
ĂversĂ€ttningen av artikeln förbereddes för studenter i kursen
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:
- Enforcing â blockerar Ă„tkomst baserat pĂ„ policyregler.
- Permissive â loggar aktiviteter som bryter mot policyn, som skulle vara blockerade i enforcing-lĂ€get.
- 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
$ getenforceFör att Àndra lÀget till permissive kör du följande kommando
$ setenforce 0eller, för att Àndra lÀget frÄn permissive till enforcing, kör
$ setenforce 1Om du behöver helt stÀnga av SELinux kan detta endast göras genom konfigurationsfilen
$ vi /etc/selinux/configFör att stÀnga av det, Àndra parametern SELINUX till följande:
SELINUX=disabledKonfigurera 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=permissiveNÀr lÀget har stÀllts in, permissive, skapar vi en tom, dold fil med namnet .autorelabel
$ touch /.autorelabeloch startar om datorn
$ init 6Obs: 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 1Nu 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.logSom 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 -lDetta 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 ftpoch du kommer att hitta följande
ftp_home_dir -> off TillÄt ftp att lÀsa och skriva filer i anvÀndarens hemkatalogDenna 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 httpdport
$ netstat -anpZ | grep httpdExempel
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/htmlNÀ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_policyHĂ€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.ppVĂ„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
