En nybörjarguide för SELinux

En nybörjarguide för SELinux

ÖversĂ€ttningen av artikeln förbereddes för studenter i kursen Linux-sĂ€kerhet

SELinux eller Security Enhanced Linux Àr en förbÀttrad Ätkomstkontrollmekanism som utvecklats av USA:s National Security Agency (NSA) för att förhindra illvilliga intrÄng. Det implementerar en tvingande (eller mandat) modell för Ätkomstkontroll (eng. Mandatory Access Control, MAC) ovanpÄ en befintlig diskretionÀr (eller valfri) modell (eng. Discretionary Access Control, DAC), det vill sÀga behörigheter för lÀsning, skrivning, körning.

SELinux har tre lÀgen:

  1. Enforcing — blockerar Ă„tkomst baserat pĂ„ policyregler.
  2. Permissive — loggar aktiviteter som bryter mot policyn, som skulle vara blockerade i enforcing-lĂ€get.
  3. Disabled — fullstĂ€ndig avstĂ€ngning av SELinux.

Som standard Àr instÀllningarna i /etc/selinux/config

Ändra SELinux-lĂ€gen

För att ta reda pÄ det aktuella lÀget kör du

$ getenforce

För att Àndra lÀget till permissive kör du följande kommando

$ setenforce 0

eller, för att Àndra lÀget frÄn permissive till enforcing, kör

$ setenforce 1

Om du behöver helt stÀnga av SELinux kan detta endast göras genom konfigurationsfilen

$ vi /etc/selinux/config

För att stÀnga av det, Àndra parametern SELINUX till följande:

SELINUX=disabled

Konfigurera SELinux

Varje fil och process mÀrks med en SELinux-kontext som innehÄller ytterligare information, sÄsom anvÀndare, roll, typ osv. Om du aktiverar SELinux för första gÄngen, mÄste du först konfigurera kontext och etiketter. Processen att tilldela etiketter och kontext kallas mÀrkning. För att börja mÀrkning Àndrar vi lÀget i konfigurationsfilen till permissive.

$ vi /etc/selinux/config
SELINUX=permissive

NÀr lÀget har stÀllts in, permissive, skapar vi en tom, dold fil med namnet .autorelabel

$ touch /.autorelabel

och startar om datorn

$ init 6

Obs: Vi anvÀnder lÀget permissive för mÀrkning, eftersom anvÀndning av lÀget enforcing kan leda till systemkrasch vid omstart.

Oroa dig inte om uppstarten hÀnger pÄ en viss fil, mÀrkning tar lite tid. Efter att mÀrkningen och uppstarten av ditt system Àr klar kan du gÄ till konfigurationsfilen och stÀlla in lÀget enforcing, samt köra:

$ setenforce 1

Nu har du framgÄngsrikt aktiverat SELinux pÄ din dator.

Övervaka loggar

Det kan ha uppstÄtt nÄgra fel under mÀrkningen eller i systemets drift. För att kontrollera om din SELinux fungerar korrekt och inte blockerar Ätkomst till nÄgon port, applikation mm, behöver du titta pÄ loggarna. SELinux-loggen finns i /var/log/audit/audit.log, men du behöver inte lÀsa den helt för att hitta fel. Du kan anvÀnda verktyget audit2why för att söka efter fel. Kör följande kommando:

$ audit2why < /var/log/audit/audit.log

Som resultat kommer du att fÄ en lista med fel. Om det inte har funnits nÄgra fel i loggen kommer inga meddelanden att visas.

Konfigurera SELinux-policy

SELinux-policyn Àr en uppsÀttning regler som styrs av SELinux-sÀkerhetsmekanismen. Policyn definierar en uppsÀttning regler för en viss miljö. Nu kommer vi att studera hur man konfigurerar policyn för att tillÄta Ätkomst till blockerade tjÀnster.

1. Logiska vÀrden (switchar)

Switchar (booleans) gör att du kan Àndra delar av policyn medan systemet körs, utan att behöva skapa nya policys. De tillÄter Àndringar utan omstart eller omkompilering av SELinux-policys.

Exempel
Anta att vi vill ge delad Ätkomst till anvÀndarens hemkatalog via FTP för lÀs- och skrivsÄtkomst, och vi har redan delat den, men vid Ätkomst ser vi inget. Detta beror pÄ att SELinux-policyn förbjuder FTP-servern frÄn att lÀsa och skriva i anvÀndarens hemkatalog. Vi behöver Àndra policyn sÄ att FTP-servern kan komma Ät hemkatalogerna. LÄt oss se om det finns nÄgra switchar för detta genom att köra

$ semanage boolean -l

Detta kommando kommer att ge en lista över tillgÀngliga switchar med deras nuvarande status (aktiverad/on eller inaktiverad/off) och en beskrivning. Du kan precisera sökningen genom att lÀgga till grep för att hitta resultat som endast rör ftp:

$ semanage boolean -l | grep ftp

och du kommer att hitta följande

ftp_home_dir        -> off       TillÄt ftp att lÀsa och skriva filer i anvÀndarens hemkatalog

Denna switch Àr avstÀngd, sÄ vi aktiverar den med setsebool ftp_home_dir on

Nu kommer vÄr ftp-daemon att kunna fÄ Ätkomst till anvÀndarens hemkatalog.
Observera: Du kan ocksÄ fÄ en lista över tillgÀngliga switchar utan beskrivning genom att köra getsebool -a

2. Etiketter och kontext

Detta Àr det vanligaste sÀttet att genomföra SELinux-policy. Varje fil, mapp, process och port mÀrks med SELinux-kontakt:

  • För filer och mappar lagras etiketter som utökade attribut i filsystemet och kan visas med följande kommando:
    $ ls -Z /etc/httpd
  • För processer och portar hanteras mĂ€rkningen av kĂ€rnan, och dessa etiketter kan ses pĂ„ följande sĂ€tt:

process

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Exempel
LĂ„t oss nu titta pĂ„ ett exempel för att bĂ€ttre förstĂ„ etiketter och sammanhang. Anta att vi har webbserver, som istĂ€llet för en katalog /var/www/html/ ĐžŃĐżĐŸĐ»ŃŒĐ·ŃƒĐ”Ń‚ /home/dan/html/. SELinux kommer att betrakta detta som ett brott mot policyn, och du kommer inte att kunna visa dina webbsidor. Anledningen till detta Ă€r att vi inte har stĂ€llt in den sĂ€kerhetskontext som Ă€r kopplad till HTML-filer. För att visa standard sĂ€kerhetskontext, anvĂ€nd följande kommando:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

HÀr fick vi httpd_sys_content_t som sÀkerhetskontext för html-filer. Vi behöver stÀlla in denna sÀkerhetskontext för vÄr nuvarande katalog, som för nÀrvarande har följande kontext:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Ett alternativt kommando för att kontrollera sÀkerhetskontexten för en fil eller katalog:

$ semanage fcontext -l | grep '/var/www'

Vi kommer ocksÄ att anvÀnda semanage för att Àndra kontexten, efter att vi har hittat rÀtt sÀkerhetskontext. För att Àndra kontexten för /home/dan/html, kör följande kommandon:

$ semanage fcontext -a -t httpd_sys_content_t '/home/dan/html(/.*)?'
$ semanage fcontext -l | grep '/home/dan/html'
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

NÀr kontexten har Àndrats med semanage, kommer kommandot restorecon att ladda standardkontexten för filer och kataloger. VÄr webbserver kommer nu att kunna lÀsa filer frÄn mappen /home/dan/html, eftersom sÀkerhetskontexten för denna mapp har Àndrats till httpd_sys_content_t.

3. Skapa lokala policys

Det kan uppstÄ situationer nÀr ovanstÄende metoder Àr vÀrdelösa för dig och du fÄr fel (avc/denial) i audit.log. NÀr detta hÀnder, behöver du skapa en lokal policy (Local policy). Alla fel kan du hitta med hjÀlp av audit2why, som beskrivits ovan.

För att ÄtgÀrda felen kan du skapa en lokal policy. Till exempel, om vi fÄr ett fel relaterat till httpd (apache) eller smbd (samba), grep'ar vi felen och skapar en policy för dem:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

HĂ€r http_policy och smb_policy — detta Ă€r namnen pĂ„ de lokala policyer som vi har skapat. Nu behöver vi ladda upp dessa skapade lokala policyer till den aktuella SELinux-policyn. Detta kan göras pĂ„ följande sĂ€tt:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

VÄra lokala policyer har laddats upp, och vi bör inte lÀngre fÄ nÄgra avc- eller denial-meddelanden i audit.log.

Detta var mitt försök att hjÀlpa dig att förstÄ SELinux. Jag hoppas att du efter att ha lÀst den hÀr artikeln kommer att kÀnna dig mer bekvÀm med SELinux.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster