En nybörjarguide till SELinux

En nybörjarguide till SELinux

Översättning av artikeln förberedd för kursstudenter "Linux-säkerhet"

SELinux eller Security Enhanced Linux är en förbättrad åtkomstkontrollmekanism utvecklad av US National Security Agency (NSA) för att förhindra skadliga intrång. Den implementerar en påtvingad (eller obligatorisk) åtkomstkontrollmodell (English Mandatory Access Control, MAC) ovanpå den befintliga diskretionära (eller selektiva) modellen (English Discretionary Access Control, DAC), det vill säga behörigheter att läsa, skriva, exekvera.

SELinux har tre lägen:

  1. driva — nekad tillgång baserat på policyregler.
  2. Tolerant — föra en logg över åtgärder som bryter mot policyn, vilket skulle vara förbjudet i upprätthållande läge.
  3. Disabled — fullständig inaktivering av SELinux.

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

Ändra SELinux-lägen

Kör för att ta reda på det aktuella läget

$ getenforce

För att ändra läget till tillåtande kör följande kommando

$ setenforce 0

eller för att ändra läge från tolerantdriva, Kör

$ setenforce 1

Om du behöver inaktivera SELinux helt, kan detta endast göras genom konfigurationsfilen

$ vi /etc/selinux/config

För att inaktivera, ändra SELINUX-parametern enligt följande:

SELINUX=disabled

Konfigurera SELinux

Varje fil och process är markerad med en SELinux-kontext, som innehåller ytterligare information som användare, roll, typ, etc. Om det här är första gången du aktiverar SELinux måste du först konfigurera sammanhanget och etiketterna. Processen att tilldela etiketter och sammanhang kallas taggning. För att börja markera, i konfigurationsfilen ändrar vi läget till tolerant.

$ vi /etc/selinux/config
SELINUX=permissive

Efter att ha ställt in läget tolerant, skapa en tom dold fil i roten med namnet autorelabel

$ touch /.autorelabel

och starta om datorn

$ init 6

Obs: Vi använder läget tolerant för märkning, sedan användningen av läget driva kan göra att systemet kraschar under omstart.

Oroa dig inte om nedladdningen fastnar på någon fil, markeringen tar ett tag. När markeringen är klar och ditt system har startat kan du gå till konfigurationsfilen och ställa in läget drivaoch kör även:

$ setenforce 1

Du har nu framgångsrikt aktiverat SELinux på din dator.

Övervakning av loggarna

Du kan ha stött på några fel under markeringen eller när systemet körs. För att kontrollera om din SELinux fungerar korrekt och om den inte blockerar åtkomst till någon port, applikation etc. måste du titta på loggarna. SELinux-loggen finns i /var/log/audit/audit.log, men du behöver inte läsa allt för att hitta fel. Du kan använda verktyget audit2why för att hitta fel. Kör följande kommando:

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

Som ett resultat kommer du att få en lista över fel. Om det inte fanns några fel i loggen, kommer inga meddelanden att visas.

Konfigurera SELinux-policy

En SELinux-policy är en uppsättning regler som styr SELinux-säkerhetsmekanismen. En policy definierar en uppsättning regler för en specifik miljö. Nu kommer vi att lära oss hur man konfigurerar policyer för att tillåta åtkomst till förbjudna tjänster.

1. Logiska värden (switchar)

Switchar (booleaner) låter dig ändra delar av en policy vid körning, utan att behöva skapa nya policyer. De låter dig göra ändringar utan att starta om eller kompilera om SELinux-policyer.

Exempel
Låt oss säga att vi vill dela en användares hemkatalog via FTP läs/skriv, och vi har redan delat den, men när vi försöker komma åt den ser vi ingenting. Detta beror på att SELinux-policyn förhindrar FTP-servern från att läsa och skriva till användarens hemkatalog. Vi måste ändra policyn så att FTP-servern kan komma åt hemkataloger. Låt oss se om det finns några växlar för detta genom att göra

$ semanage boolean -l

Detta kommando kommer att lista de tillgängliga switcharna med deras nuvarande tillstånd (på eller av) och beskrivning. Du kan förfina din sökning genom att lägga till grep för att hitta resultat som endast är ftp:

$ semanage boolean -l | grep ftp

och du hittar följande

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Den här omkopplaren är inaktiverad, så vi aktiverar den med setsebool $ setsebool ftp_home_dir on

Nu kommer vår ftp-demon att kunna komma åt användarens hemkatalog.
Obs: Du kan också få en lista över tillgängliga växlar utan beskrivning genom att göra getsebool -a

2. Etiketter och sammanhang

Detta är det vanligaste sättet att implementera SELinux policy. Varje fil, mapp, process och port är märkt med SELinux-kontexten:

  • 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 du kan se dessa etiketter enligt följande:

process

$ ps –auxZ | grep httpd

hamnen

$ netstat -anpZ | grep httpd

Exempel
Låt oss nu titta på ett exempel för att bättre förstå etiketter och sammanhang. Låt oss säga att vi har en 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 se dina webbsidor. Detta beror på att vi inte har ställt in säkerhetskontexten för HTML-filerna. För att se standardsäkerhetskontexten, 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 har vi httpd_sys_content_t som sammanhang för html-filer. Vi måste ställa in denna säkerhetskontext för vår nuvarande katalog, som för närvarande har följande sammanhang:

-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 när vi har hittat rätt säkerhetskontext. För att ändra sammanhanget 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

Efter att 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/htmleftersom säkerhetskontexten för den här mappen har ändrats till httpd_sys_content_t.

3. Skapa lokala policyer

Det kan finnas situationer där ovanstående metoder inte är till någon nytta för dig och du får fel (avc/denial) i audit.log. När detta händer måste du skapa en lokal policy. Du kan hitta alla fel med audit2why, som beskrivs ovan.

Du kan skapa en lokal policy för att lösa fel. Till exempel får vi ett fel relaterat till httpd (apache) eller smbd (samba), vi grep 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 и smb_policy är namnen på de lokala policyer som vi skapade. Nu måste vi ladda dessa skapade lokala policyer i den nuvarande 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 ner och vi bör inte längre ta emot någon avc eller denail i audit.log.

Detta var mitt försök att hjälpa dig 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: will.com

Lägg en kommentar