Vad är selinux-status. SELinux - teori

Vissa Linux-distributioner har SELinux aktiverat som standard, och detta kan orsaka olika problem. Om du inte förstår hur SELinux fungerar och inte vet hur du konfigurerar det korrekt, är det bäst att inaktivera det tills du lär dig de grundläggande principerna för dess funktion

Att stänga av SELinux du kan använda någon av de fyra beskrivna metoderna.

Vi kommer inte att gå in i detalj om vad SELinux används för, utan går direkt vidare till att inaktivera det. Om systemet använder SELinux kan du se följande bild genom att köra kommandot ls -Z.

# ls -Z /etc/-rw-r--r-- rot rotsystem_u:objekt_r:etc_t:s0 a2ps.cfg -rw-r--r-- rot rotsystem_u:objekt_r:adjtime_t:s0 adjtid -rw-r--r-- rot root system_u:object_r:etc_aliases_t:s0 alias drwxr-x--- root root system_u:object_r:auditd_etc_t:s0 audit drwxr-xr-x root root system_u:object_r:etc_runtime_t:s0 blkid drwxject root systemr_xr-xob :bluetooth_conf_t:s0 bluetooth drwx------ root root system_u:object_r:system_cron_spool_t:s0 cron.d -rw-rw-r-- rotdisk system_u:object_r:amanda_dumpdates_t:s0 dumpdates

Metod 1: Inaktivera SELinux tillfälligt

För att tillfälligt inaktivera SELinux kan du modifiera filen /selinux/enforce. Observera att detta är en tillfällig inaktivering och när systemet har startat om kommer SELinux att fungera igen.

# cat /selinux/enforce 1 # echo 0 > /selinux/enforce# cat /selinux/enforce 0

Du kan också använda kommandot setenforce, som visas i exemplet nedan. Möjliga alternativ för setenforce-kommandot är: Upprätthållande, Tillåtande, 1 (aktivera) eller 0 (avaktivera).

#setenforce 0

Metod 2: Inaktivera SELinux permanent

För att permanent inaktivera SELinux, redigera filen /etc/selinux/config och ställ in SELINUX=disabled som visas nedan. Efter detta, starta om servern.

# cat /etc/selinux/config SELINUX=inaktiverad SELINUXTYPE=riktad SETLOCALDEFS=0

Metod 3: Inaktivera SELinux i Grub Bootloader

Den tredje metoden använder GRUB-starthanteraren för att inaktivera SELinux. Lägg till i slutet av raden selinux=0

# cat /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz doldmenytitel Enterprise Linux Enterprise Linux Server (2.6.18-92.el5PAE) rot (hd0,0) kärna /boot/vmlinuz -2.6.18-92.el5PAE ro root=LABEL=/ rhgb tyst selinux=0 initrd /boot/initrd-2.6.18-92.el5PAE.img titel Enterprise Linux Enterprise Linux Server (2.6.18-92.el5) root (hd0,0) kärna /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb tyst selinux=0 initrd /boot/initrd-2.6.18-92.el5.img

Metod 4: Inaktivera SELinux endast för vissa tjänster - HTTP/Apache

Om du inte behöver inaktivera SELinux helt, utan bara för vissa tjänster, har du det här alternativet. Låt oss till exempel inaktivera SELinux för HTTP/Apache genom att ändra värdet på variabeln httpd_disable_trans i fil /etc/selinux/targeted/booleans.

# grep httpd /etc/selinux/targeted/booleans httpd_builtin_scripting=1 httpd_disable_trans=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_ssi_exec=1 httpd_tty_comm=0 httpd_unified=1

Ställ in en variabel också med kommandot setsebool. Efter detta, starta om httpd för att ändringarna ska träda i kraft.

Hej alla, låt oss prata lite om SELinux, men innan dess, en liten definition för de som inte har hört vad det är. SELinux är en förkortning för engelska. orden Security-Enhanced Linux som betyder Linux med förbättrad säkerhet. Detta är med andra ord implementeringen av ett påtvingat tillträdeskontrollsystem, som kan fungera parallellt med det klassiska selektiva tillträdeskontrollsystemet. Skillnaden är att i SELinux, genom vissa policyer, bestäms åtkomsträttigheter av systemet självt, i sin tur separerar ett selektivt åtkomstkontrollsystem processåtkomst till resurser baserat på användarrättigheter, för enkel förståelse är dessa rwx-rättigheter på tre nivåer - ägare , ägargrupp och andra användare.
Efter en liten beskrivning, låt oss försöka titta på några SELinux-kommandon och alternativ. Våra exempel kommer att demonstreras på operativsystemet Linux CentOS 6. Det kanske första och förmodligen mest populära är kommandona för att kontrollera SELinux-statusen.

/usr/sbin/getenforce

/usr/sbin/sestatus

Returnera värden för kommandot getenforce
Genomdrivande– indikerar att SELinux är aktiverat och policyregler upprätthålls;
Tolerant– indikerar att SELinux är aktiverat, men policyregler tillämpas inte och endast DAC-regler används;
Inaktiverad– indikerar att SELinux är inaktiverat.

Returnera värden för kommandot sestatus
Detta kommando returnerar, förutom SELinux-statusen, den använda SELinux-policyn, exempel:

$ /usr/sbin/sestatus SELinux status: aktiverad SELinuxfs mount: /selinux Aktuellt läge: upprätthåller Läge från konfigurationsfil: upprätthåller Policyversion: 23 Policy från konfigurationsfil: riktad

SELinux status: aktiverad – betyder att SELinux är aktiverat;
Aktuellt läge: verkställande – betyder att SELinux är aktiverat i forcerat läge;
Policy från konfigurationsfil: targeted – indikerar att SELinux-målpolicyn används.

Aktiverar SELinux
Aktivera/inaktivera SELinux i operativsystemet i konfigurationsfilen
/etc/selinux/config

# Den här filen styr tillståndet för SELinux på systemet. # SELINUX= kan ta ett av dessa tre värden: # enforcing - SELinux säkerhetspolicy tillämpas. # tillåtande - SELinux skriver ut varningar istället för att upprätthålla. # disabled - Ingen SELinux-policy har laddats. SELINUX=inaktiverad # SELINUXTYPE= kan ta ett av dessa två värden: # targeted - Riktade processer är skyddade, # mls - Multi Level Security-skydd. SELINUXTYPE=riktad

Alternativet SELINUX=disabled betyder att SELinux är inaktiverat. Innan du startar SELinux måste du utföra några manipulationer.
1. Kontrollera installationen av SELinux-paket

Rpm -qa | grep selinux rpm -q policycoreutils rpm -qa | grep settroubleshooting

Se även till att följande paket är installerade: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server, setroubleshoot-plugins. Paket policycoreutils-gui, setroubleshoot, selinux-policy-devel, Och mcstrans frivillig.
Saknade paket kan installeras med kommandot (som root)

Yum installera paketnamn

2. Varje filsystemfil måste markeras med en SELinux-kontext innan den körs. Fram till denna punkt kan begränsade domäner nekas åtkomst, vilket kan leda till att operativsystemet inte laddas korrekt. Situationen kan korrigeras genom att ställa in alternativet SELINUX=tillåtande i konfigurationsfilen /etc/selinux/config.

3. Filmarkering kommer att ske vid nästa omstart av systemet. Etiketter för alla filer ställs in i SELinux-kontexten under processen. På den sista raden representerar varje *-tecken 1000 taggade filer. Processens varaktighet beror på antalet filer i systemet, såväl som hastigheten på diskarna.

*** Varning -- SELinux-riktad policyommärkning krävs. *** Ommärkning kan ta mycket lång tid, beroende på fil *** systemstorlek och hårddiskars hastighet. ****

4. I fallet när SELinux-policyn inte tvångstilldelas och arbetet sker i expansionsläge, skrivs förbud till loggen som åtgärder som skulle vara förbjudna i forcerat läge. Se till att SELinux inte förbjuder åtgärder under den senaste uppstarten av systemet, för att göra detta, kör kommandot

Grep "SELinux förhindrar" /var/log/messages

Utdata ska vara tom, vilket betyder att allt är bra och SELinux förbjuder inte åtgärden.
5. När du är säker på att det inte finns några meddelanden om förbud i loggarna, ställ in SELINUX-parametern för att verkställa (fil /etc/selinux/config):

# Den här filen styr tillståndet för SELinux på systemet. # SELINUX= kan ta ett av dessa tre värden: # enforcing - SELinux säkerhetspolicy tillämpas. # tillåtande - SELinux skriver ut varningar istället för att upprätthålla. # disabled - Ingen SELinux-policy har laddats. SELINUX=upprätthålla # SELINUXTYPE= kan ta ett av dessa två värden: # targeted - Riktade processer är skyddade, # mls - Multi Level Security-skydd. SELINUXTYPE=riktad

6. Efter detta bör operativsystemet startas om. Efter omstarten måste du kontrollera Enforcing-returvärdet med kommandot getenforce.

$ /usr/sbin/getenforce Genomföra

7. För att se mappningarna mellan SELinux och systemanvändare, kör kommandot

/usr/sbin/semanage login –l

Utdata från kommandot bör vara så här:

Inloggningsnamn SELinux Användare MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023

Det finns några funktioner som också bör beaktas. När SELinux är inaktiverat markeras inte användarskapade filer, och som ett resultat kan problem uppstå när de sätts i upprätthållande tillstånd. Filer kommer att markeras genom att ändra alternativet från inaktiverat till tillåtande/tillämpande läge, vilket förhindrar problemet med att omarkerade filer dyker upp.

SELinux (Security-Enhanced Linux - Linux med förbättrad säkerhet) är en implementering av ett påtvingat åtkomstkontrollsystem som kan fungera parallellt med ett klassiskt diskretionärt åtkomstkontrollsystem. Ingår i standard Linux-kärnan. För att SELinux ska fungera krävs också modifierade versioner av vissa verktyg (ps, ls, etc.), som ger stöd för nya kärnfunktioner och stöd från filsystemet.

Metod 1: Inaktivera SELinux tillfälligt

För att tillfälligt inaktivera SELinux kan du modifiera filen /selinux/enforce. Observera att detta är en tillfällig inaktivering och när systemet har startat om kommer SELinux att fungera igen.

# cat /selinux/enforce 1 # echo 0 > /selinux/enforce# cat /selinux/enforce 0 Du kan också använda kommandot setenforce, som visas i exemplet nedan. Möjliga alternativ för setenforce-kommandot är: Upprätthållande, Tillåtande, 1 (aktivera) eller 0 (avaktivera).
#setenforce 0

Metod 2: Inaktivera SELinux permanent

För att permanent inaktivera SELinux, redigera filen /etc/selinux/config och ställ in SELINUX=disabled som visas nedan. Efter detta, starta om servern.

# cat /etc/selinux/config SELINUX=inaktiverad SELINUXTYPE=riktad SETLOCALDEFS=0

Metod 3: Inaktivera SELinux i Grub Bootloader

Den tredje metoden använder GRUB-starthanteraren för att inaktivera SELinux. Lägg till i slutet av raden selinux=0

# cat /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz doldmenytitel Enterprise Linux Enterprise Linux Server (2.6.18-92.el5PAE) rot (hd0,0) kärna /boot/vmlinuz -2.6.18-92.el5PAE ro root=LABEL=/ rhgb tyst selinux=0 initrd /boot/initrd-2.6.18-92.el5PAE.img titel Enterprise Linux Enterprise Linux Server (2.6.18-92.el5) root (hd0,0) kärna /boot/vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb tyst selinux=0 initrd /boot/initrd-2.6.18-92.el5.img

Metod 4: Inaktivera SELinux endast för vissa tjänster - HTTP/Apache

Om du inte behöver inaktivera SELinux helt, utan bara för vissa tjänster, har du det här alternativet. Låt oss till exempel inaktivera SELinux för HTTP/Apache genom att ändra värdet på variabeln httpd_disable_trans i fil /etc/selinux/targeted/booleans.

# grep httpd /etc/selinux/targeted/booleans httpd_builtin_scripting=1 httpd_disable_trans=1 httpd_enable_cgi=1 httpd_enable_homedirs=1 httpd_ssi_exec=1 httpd_tty_comm=0 httpd_unified=1 Ställ in variabeln också med kommandot setsebool. Efter detta, starta om httpd för att ändringarna ska träda i kraft.

# setsebool httpd_disable_trans 1# tjänst httpd omstart

Security-Enhanced Linux (SELinux) är en ny åtkomstkontrollmetod i Linux baserad på Linux Security Kernel Module (LSM). SELinux är aktiverat som standard på många Red Hat-baserade distributioner som använder rpm-paketbasen, såsom Fedora, CentOS, OpenSUSE, etc.

Den här artikeln kommer att titta på hur man ställer in SELinux; vi kommer inte att beröra att skapa nya policyer, utan kommer att försöka närma sig systemet från andra sidan, se hur det kan vara användbart för den genomsnittliga Linux-användaren, överväga grunderna i dess funktion, möjliggöra , inaktivera och ändra tillstånd.

Grunderna i SELinux

SELinux är ett märkningssystem, varje process har en etikett. Varje fil, katalog eller till och med användare på systemet har en etikett. Även portar och enheter och värdnamn i systemet tilldelas etiketter. SELinux definierar reglerna för en process för att komma åt objekt med specifika etiketter. Detta kallas politik. Kärnan upprätthåller reglerna. Ibland kallas detta även för Mandatory Access Control (MAC)

Filägaren har inte fullständig kontroll över säkerhetsattributen. Standard åtkomstkontrollattribut som grupp och ägare betyder ingenting för SELinux. Allt styrs helt av taggar. Attributvärden kan ställas in utan root-rättigheter, men du måste ha speciella SELinux-behörigheter för att göra detta.

Nu ska vi prata lite om politiker. Vi definierar en etikett för processer av en viss typ, såväl som för filsystemobjekt av en viss typ. Föreställ dig bara ett system där objekt (processer) är katter och hundar. Dessa är processtyper. Och vi har anläggningar som de vill ha tillgång till – mat. Men deras mat är annorlunda - mat_katter och mat_hundar. Det är nödvändigt att föremål endast har tillgång till sin mat.

En hund har tillåtelse att äta dess mat, och en katt har tillåtelse att äta dess mat. I SELinux policyer kommer det att se ut så här:

låt katten äta kattmat

låt hunden äta hundmat

Kärnan kommer nu att se till att dessa regler följs. På ett SELinux-system är allt inaktiverat som standard, så om en hund försöker äta kattmat tillåter inte kärnan det.

Låt oss säga att Apache-processen är märkt httpd_t, och vi namngav filerna som Apache ska ha tillgång till httpd_sys_content. Vi har även kreditkortsuppgifter som lagras i mysql-databasen. Om en hacker hackar Apache-processen och har root-åtkomst kommer han fortfarande inte att kunna komma åt filer från mysql.

Systemet innehåller ganska ofta processer med samma typer. För att komma runt detta och konfigurera behörigheter för olika processer av samma typ uppfanns ett system med säkerhetskategorier, Multi Category Security (MCS). Vi kan lägga till en kategori till ett objekt och konfigurera behörigheter beroende på denna kategori.

SELinux kan orsaka många problem för systemadministratörer; många inaktiverar det helt enkelt, vilket löser problemet och minskar säkerheten. Som nämnts ovan blockerar SELinux som standard allt och alla. Detta passar beskrivningen av en strikt policy. Men för att underlätta för systemadministratörer har andra standardpolicyer tagits fram. Många distributioner använder en riktad policy, den täcker cirka 200 nätverkstjänster och processer, men alla andra program startar och körs fritt, inga SELinux-modeller tillämpas på dem.

SELinux kan fungera i tre lägen - inaktiverat, systemet är helt inaktiverat och fungerar inte, Upprätthållande av begränsningsläge - programmet aktiveras och blockerar alla åtgärder som inte följer policyerna, och det tredje Permissive läget - registrerar bara överträdelser.

Teorin diskuteras i allmänna termer. Låt oss nu gå vidare till den praktiska delen.

Konfigurera SELinux

SELinux-systemet kommer förinstallerat med distributionen på Red Hat-baserade system; troligen är alla komponenter redan installerade där, men på Ubuntu och andra liknande distributioner måste du göra allt själv. För att installera SELInux på Ubuntu, kör kommandot:

sudo apt-get installera selinux

När installationen är klar måste systemet startas om för att alla inställningar ska träda i kraft, eftersom Grub-konfigurationsfilen kommer att skrivas över för att skicka de nödvändiga parametrarna till kärnan.

Efter omstarten kan vi se SELinux-statusen:

SELinux-status: aktiverad
SELinuxfs-fäste: /sys/fs/selinux
SELinux rotkatalog: /etc/selinux
Inläst policynamn: ubuntu
Aktuellt läge: tillåtande
Läge från konfigurationsfil: tillåtande
Policy MLS-status: aktiverad
Policy deny_unknown status: tillåten
Max kärnpolicyversion: 29

Här ser vi att systemet är påslaget SELinux status: aktiverad, Aktuellt läge är tillåtet, det vill säga vi kommer bara att ta emot meddelanden om överträdelser i loggen. Den policy som för närvarande används är Ubuntu.

Låt oss nu aktivera aktivt läge, för att göra detta kör kommandot:

sudo setenforce 1

Du kan inaktivera det aktiva läget genom att skicka 0 till samma kommando:

sudo setenforce 0

Du kan också se det aktuella läget med ett liknande kommando:

All grundläggande SELinux-konfiguration görs genom filen /etc/selinux/config. Här kan du antingen inaktivera selinux helt eller konfigurera säkerhetspolicyn som används.

sudo vi /etc/selinux/config

Denna parameter betyder driftläget för SELinux, du kan ange en av tre parametrar här: verkställa, tillåtande och inaktiverad

SELINUX=tillåtande

Använd disabled för att helt inaktivera SELinux eller något annat alternativ för att aktivera SELinux tillbaka. Detta läge kommer att tillämpas som standard vid systemstart.

SELinux-policyer är också konfigurerade i den här filen. Parametern SELINUXTYPE är ansvarig för policyn:

SELINUXTYPE=ubuntu

Du kan referera till vilken policy som helst som finns i katalogen /etc/selinux.

Tre grundläggande policyer kan användas:

  • målinriktad(eller här ubuntu) skyddar grundläggande systemtjänster, till exempel webbserver, DHCP, DNS, men berör inte alla andra program.
  • minimum- det här är en policy för experiment, baserad på målinriktade, men dess regler är inte aktiverade som standard, du kan aktivera och inaktivera den efter behov, som också används ofta på mobila enheter.
  • sträng- den mest stränga policyn, kontrollerar inte bara nätverkstjänster utan även användarprogram.
  • mls- innehåller inte bara regler, utan även olika säkerhetsnivåer. Det låter dig implementera ett säkerhetssystem på flera nivåer baserat på SELinux.

Policyer i Ubuntu måste installeras separat; för riktade och strikta, installera paketet:

sudo apt-get installera selinux-policy-default

För att tillämpa policyn måste du starta om datorn, och det är önskvärt att SELinux är i revisionsläge (tillåtande) under denna omstart. Dessutom, för att systemet ska uppdatera alla etiketter i filsystemet, kan du behöva skapa en tom fil i roten:

sudo vi ~/.autolabel

Vill du känna all kraft och samtidigt nackdelarna med SELinux? Ställ in SELINUXTYPE på strikt och starta om systemet:

SELINUXTYPE=standard

Se bara till att SELinux fungerar i tillåtande läge, annars blir det problem. Standardpolicyn implementerar både riktade och strikta; för att bli strikt behöver du bara ladda ur den oavgränsade modulen:

sudo semoule -r obegränsad

Sedan startar vi det aktiva läget:

sudo setenforce 1

Nåväl, nu kan du prova att läsa systemloggarna, eller slå på revisionsläget tillbaka. Ingenting fungerar? Korrekt, SELinux blockerar alla obehöriga åtgärder. Mitt terminalfönster stängdes omedelbart och jag kunde inte längre kontrollera mitt system. För att återta kontrollen över din dator måste du starta om den.

Nu vet du hur du aktiverar och inaktiverar SELinux, samt hur du ändrar programmets policy eller driftläge. Allt annat ligger utanför ramen för vår korta artikel.

Vi har redan skrivit om SELinux på Habré, men inte många detaljerade manualer om detta system har publicerats. Idag publicerar vi just en så detaljerad manual om SELinux, från information om systemet och slutar med flexibel konfiguration av policyer.
För att inte göra inlägget till ett "ark" som är svårt att förstå, bestämde vi oss för att dela upp manualen i två delar. Den första kommer att prata om själva systemet och några av dess funktioner. Den andra handlar om att upprätta policyer. Nu publicerar vi första delen, andra delen kommer ut lite senare.

1. Introduktion

SELinux (SELinux) är ett påtvingat åtkomstkontrollsystem implementerat på kärnnivå. Detta system dök först upp i den fjärde versionen av CentOS, och i versionerna 5 och 6 kompletterades och förbättrades implementeringen avsevärt. Dessa förbättringar har gjort det möjligt för SELinux att bli ett universellt system som effektivt kan lösa många aktuella problem. Det är värt att komma ihåg att det klassiska Unix-rättighetssystemet tillämpas först, och kontrollen kommer bara att övergå till SELinux om denna första kontroll lyckas.

1.1 Några aktuella problem.

För att förstå det praktiska värdet av SELinux, låt oss titta på några exempel där ett standardsystem för åtkomstkontroll inte räcker. Om SELinux är inaktiverat har du bara tillgång till klassisk diskretionär åtkomstkontroll, som inkluderar DAC (diskretionär åtkomstkontroll) eller ACL (åtkomstkontrollistor). Det vill säga att vi pratar om att manipulera skriv-, läs- och exekveringsrättigheter på användar- och användargruppersnivå, vilket i vissa fall kan vara helt otillräckligt. Till exempel:

- Administratören kan inte helt kontrollera användarens handlingar. Det är till exempel fullt möjligt för en användare att ge alla andra användare läsrättigheter till sina egna känsliga filer, såsom SSH-nycklar.

Processer kan ändra säkerhetsinställningar. Till exempel bör filer som innehåller en användares e-post vara läsbara av endast en specifik användare, men e-postklienten kan mycket väl ändra åtkomsträttigheterna så att dessa filer är läsbara av alla.

Processer ärver rättigheterna för användaren som startade dem. Till exempel kan en trojaninfekterad version av webbläsaren Firefox läsa användarens SSH-nycklar, även om den inte har någon anledning att göra det.

I huvudsak, i den traditionella modellen för selektiv åtkomstkontroll (DAC) är endast två åtkomstnivåer väl implementerade - användare och superanvändare. Det finns ingen enkel metod som skulle tillåta varje användare att ha de nödvändiga minimibehörigheterna.
Naturligtvis finns det många metoder för att komma runt dessa problem inom den klassiska säkerhetsmodellen, men ingen av dem är universell.

1.1.1 Grundläggande termer som används i SELinux:

Domän- en lista över åtgärder som en process kan utföra. Vanligtvis definieras en domän som den minsta möjliga uppsättningen av åtgärder genom vilka en process kan fungera. På detta sätt, om processen misskrediteras, kommer angriparen inte att kunna göra mycket skada.

Roll- en lista över domäner som kan tillämpas. Om en viss domän inte finns i listan över domäner för en roll, kan åtgärder från den domänen inte tillämpas.

Typ- en uppsättning åtgärder som är tillåtna i förhållande till ett föremål. En typ skiljer sig från en domän genom att den kan appliceras på pipes, kataloger och filer, medan en domän appliceras på processer.

Säkerhetskontext- alla SELinux-attribut - roller, typer och domäner.

1.2 Att lösa problemen med den traditionella säkerhetsmodellen.

SELinux följer modellen med minsta nödvändiga privilegier för varje tjänst, användare och program mycket mer strikt. Som standard är det "förbjudande läget" inställt när varje element i systemet endast har de rättigheter som är avgörande för att det ska fungera. Om en användare, ett program eller en tjänst försöker ändra en fil eller komma åt en resurs som inte helt klart behövs för att lösa det, kommer de helt enkelt att nekas åtkomst, och ett sådant försök kommer att loggas.

SELinux är implementerat på kärnnivå, så applikationsapplikationer kanske inte vet något alls om versionen av detta påtvingade åtkomstkontrollsystem, funktionerna i dess funktion, etc. Om SELinux konfigureras korrekt kommer inte SELinux att påverka funktionen av tredjepartsprogram och tjänster. Även om applikationen kan fånga upp felmeddelanden från detta åtkomstkontrollsystem, ökar användarvänligheten avsevärt. Om ett försök görs att komma åt en skyddad resurs eller fil, skickar SELinux ett felmeddelande från "access denied"-familjen till huvudapplikationen. Men få applikationer använder returkoder för systemanrop erhållna från SELinux.

Här är några exempel på hur du använder SELinux för att visa hur du kan förbättra säkerheten för hela ditt system.

- Skapa och konfigurera en lista med program som kan läsa ssh-nycklar.

Förhindra obehörig åtkomst till data via en e-postklient.

Konfigurera webbläsaren så att den endast kan läsa de filer och mappar som behövs för att fungera i användarens hemmapp.

2. SELinux driftlägen

SELinux har tre huvudsakliga driftlägen, med Enforcing-läge inställt som standard. Detta är ett ganska strikt läge, och vid behov kan det ändras till något mer bekvämt för slutanvändaren.

Genomdrivande: Standardläge. När det här läget är valt kommer alla åtgärder som på något sätt bryter mot den nuvarande säkerhetspolicyn att blockeras, och försöket att överträda kommer att registreras i loggen.

Tolerant: När du använder det här läget kommer information om alla åtgärder som bryter mot den nuvarande säkerhetspolicyn att registreras i loggen, men själva åtgärderna blockeras inte.

Inaktiverad: Fullständig inaktivering av systemet för tvångskontroll.

Du kan se det aktuella läget och andra SELinux-inställningar (och, om nödvändigt, ändra det) med hjälp av ett speciellt GUI-verktyg som finns tillgängligt i Administration-menyn (system-config-selinux). Om du är van vid att arbeta i konsolen kan du se aktuell status med kommandot sestatus.

# sestatus SELinux status: aktiverad SELinuxfs mount: /selinux Aktuellt läge: upprätthåller Läge från konfigurationsfil: upprätthåller Policyversion: 21 Policy från konfigurationsfil: riktad

Du kan också ta reda på SELinux-statusen med hjälp av kommandot getenforce.
Kommandot "setenforce" låter dig snabbt växla mellan Enforcement och Permissive lägen, ändringarna träder i kraft utan att starta om. Men om du aktiverar eller inaktiverar SELinux krävs en omstart eftersom säkerhetsetiketterna måste installeras om på filsystemet.
För att välja standardläget som kommer att tillämpas varje gång systemet startar, ställ in värdet på raden "SELINUX=" i filen /etc/selinux/config, och specificera ett av lägena - "enforcing", "permissive" eller " Inaktiverad" . Till exempel: "SELINUX=tillåtande".

3. SELinux policyer

Som nämnts tidigare, fungerar SELinux som standard i Enforcing-läge, när andra åtgärder än de som är tillåtna blockeras automatiskt, har varje program, användare eller tjänst bara de privilegier som de behöver för att fungera, men inget mer. Detta är en ganska strikt policy, som har både fördelar - den högsta nivån av informationssäkerhet och nackdelar - att konfigurera systemet i detta läge är förknippat med mycket arbete för systemadministratörer, dessutom finns det en stor risk att användarna kommer möter åtkomstbegränsningar om de vill använda systemet på åtminstone något icke-trivialt sätt. Detta tillvägagångssätt är acceptabelt i företagssektorn, men är oacceptabelt på slutanvändardatorer. Många administratörer inaktiverar helt enkelt SELinux på sina arbetsstationer för att undvika sådana problem.

För att undvika detta, för nyckelapplikationer och tjänster, som till exempel httpd, named, dhcpd, mysqld, definieras förkonfigurerade målpolicyer som inte tillåter en angripare att få tillgång till viktig data. De applikationer för vilka policyn inte är definierad körs i unconfined_t-domänen och är inte skyddade av SELinux. Således kan korrekt valda målpolicyer dig uppnå en acceptabel säkerhetsnivå utan att skapa onödiga problem för användaren.

4. Åtkomstkontroll i SELinux

SELinux tillhandahåller följande åtkomstkontrollmodeller:

Typ Enforcement (TE): Den primära åtkomstkontrollmekanismen som används i målpolicyer. Låter dig hantera behörigheter i detalj, på den lägsta nivån. Den mest flexibla, men också den mest arbetskrävande mekanismen för en systemadministratör.

Rollbaserad åtkomstkontroll (RBAC): I denna modell implementeras åtkomsträttigheter som roller. En roll är behörighet att utföra vissa åtgärder av ett eller flera element i systemet över andra delar av systemet. I huvudsak är RBAC en vidareutveckling av TE.

Multi-Level Security (MLS): en säkerhetsmodell på flera nivåer där alla systemobjekt tilldelas en viss åtkomstnivå. Tillstånd eller nekad åtkomst bestäms endast av förhållandet mellan dessa nivåer.

Alla processer och filer inom SELinux har en säkerhetskontext.
Låt oss titta på sammanhanget i praktiken genom att titta närmare på Apache-webbserverns startsida, som finns på /var/www/html/index.html

$ ls -Z /var/www/html/index.html -rw-r--r-- användarnamn användarnamn system_u:object_r:httpd_sys_content_t /var/www/html/index.html

Förutom standardfilbehörigheterna kan vi se SELinux säkerhetskontext: system_u: object_r: httpd_sys_content_t.

Kontexten baseras på user:role:type:mls, men user:role:type-fälten visas medan mls-fältet är dolt. Vi kan också se målpolicyn, i det här fallet httpd_sys_content_t.

Låt oss nu titta på SELinux säkerhetskontext för "httpd" -processen (Apache webbserver):

$ps axZ | grep httpd system_u:system_r:httpd_t 3234 ? Ss 0:00 /usr/sbin/httpd

Som vi kan se körs denna process på httpd_t-domänen.

Nåväl, låt oss nu titta på säkerhetskontexten för en fil i vår hemkatalog:

$ ls -Z /home/username/myfile.txt -rw-r--r-- användarnamn användarnamn user_u:object_r:user_home_t /home/username/myfile.txt

Vi ser att filen är av typen user_home_t, denna typ tilldelas som standard till alla filer i hemkatalogen.
Åtkomst tillåts endast mellan element av samma typ, varför Apache-webbservern enkelt kan läsa filen /var/www/html/index.html, som är av typen httpd_sys_content_t. Samtidigt, eftersom Apache körs på httpd_t-domänen och inte har användar-id:användarnamn-fälten ifyllda, kan den inte komma åt filen home/username/myfile.txt, även om denna fil är läsbar av processer som inte har en mål definierad policy. På detta sätt, om Apache-webbservern äventyras, kommer angriparen inte att kunna komma åt filer eller köra processer som inte finns i httpd_t-domänen.

5. Felsökning av SELinux-problem

Förr eller senare kommer det att uppstå en situation där du ställs inför en situation där SELinux nekar dig tillgång till något. Det finns flera huvudorsaker till nekad åtkomst:

Felaktigt märkt fil.
– Processen körs i fel sammanhang
- Fel i policyn. Processen kräver åtkomst till en fil som inte beaktades när policyn skapades.
- Försök till invasion.

De tre första orsakerna till nekad åtkomst löses ganska enkelt, medan ett intrångsförsök larmas och ett motsvarande meddelande skickas till användaren.
För att hantera eventuella problem, titta bara på SELinux-loggen. Som standard skrivs det av auditd-processen till filen /var/log/audit/audit.log. Om denna process inte körs loggar SELinux in filen /var/log/messages, i vilket fall alla meddelanden i åtkomstkontrollsystemet är markerade med AVC-nyckeln, vilket gör att du snabbt kan filtrera bort de nödvändiga raderna, till exempel. med kommandot grep.
De senaste versionerna av distributioner (som börjar med CentOS 5) inkluderar ett verktyg med ett grafiskt användargränssnitt som låter dig visa SELinux-loggen i en bekväm och användarvänlig form. Du kan ringa det från konsolen genom att skriva sealert -b. Verktyget är en del av setroubleshoot-paketet. Om X-servern inte körs kan du generera läsbara rapporter med följande kommando:

Sealert -a /var/log/audit/audit.log > /path/to/mylogfile.txt

5.1 Ändra filsäkerhetskontextetiketter.

Kommandot "chcon" låter dig ändra SELinux-kontexten för filer eller kataloger på samma sätt som kommandona "chown" och "chmod" låter dig ändra ägare eller åtkomsträttigheter för en fil inom ett standardsystem för åtkomstkontroll.

Låt oss titta på några exempel.
Låt oss anta att Apache-webbservern är installerad på systemet och vi behöver ändra mappen där webbplatserna är lagrade (som standard är detta /var/www/html/) till, säg, /html/ och skapa ett index. html-fil i den här katalogen.
# mkdir /html # touch /html/index.html # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:default_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:default_t html

Ovan ser vi att både /html-katalogen och /html/index.html-filen inom säkerhetskontexten är av typen default_t. Det betyder att om vi startar Apache och försöker arbeta med den här katalogen eller filen kommer SELinux att neka oss åtkomst. Och detta kommer att vara helt korrekt, eftersom den korrekta säkerhetskontexten för filer som interagerar med Apache är httpd_sys_content_t.
Låt oss ändra sammanhanget och kontrollera om allt är gjort korrekt:

# chcon -v --type=httpd_sys_content_t /html-kontext för /html har ändrats till user_u:object_r:httpd_sys_content_t # chcon -v --type=httpd_sys_content_t /html/index.html sammanhanget för /html/index.html ändrat till user_u:object_r :httpd_sys_content_t # ls -Z /html/index.html -rw-r--r-- root root user_u:object_r:httpd_sys_content_t /html/index.html # ls -Z | grep html drwxr-xr-x root root user_u:object_r:httpd_sys_content_t html
Det är inte nödvändigt att manuellt bearbeta varje fil och varje katalog; du kan helt enkelt använda alternativet -R rekursiv kataloggenomgång:

# chcon -Rv --type=httpd_sys_content_t /html

Sådana ändringar av säkerhetskontexten kommer att kvarstå mellan omstarterna, men om filsystemetiketterna ändras kommer ändringarna att gå förlorade. Vid underhåll och drift är detta inte ovanligt. Den korrekta lösningen i en sådan situation skulle vara (naturligtvis efter testning) att skapa en ytterligare regel och sedan kombinera den med lokala lokala regler. Därmed kommer det att ha högre prioritet än de grundläggande reglerna.

För att SELinux ska fungera korrekt även efter att ha ändrat filsystemetiketter, kan vi använda både verktyg för att hantera SELinux med ett GUI-gränssnitt och semanage-konsolverktyget:

Semanage fcontext -a -t httpd_sys_content_t "/html(/.*)?"

I exemplet ovan tilldelade vi sammanhanget httpd_sys_content_t till alla filer som finns i /html-katalogen.

5.2 Återställa SELinux säkerhetskontext.

Kommandot "restorecon" låter dig ändra säkerhetskontexten till den som tilldelades som standard.
Återigen använder vi Apache webbserver som ett exempel. Låt oss anta att användaren redigerade en kopia av filen index.html i sin hemkatalog och flyttade den (med mv-kommandot) till katalogen där webbplatser är lagrade (/var/www/html).

Observera att vid kopiering (cp-kommando) kommer filens säkerhetskontext att sammanfalla med kontexten för målkatalogen, medan säkerhetskontexten vid flyttning sammanfaller med källkontexten. Naturligtvis kan vi använda kommandot chcon för att ändra säkerhetskontexten, men eftersom de flyttade filerna nu finns i /var/www/html-katalogen kan vi helt enkelt återställa kontextinställningarna för alla filer som finns i den katalogen.

För att återställa kontexten endast för filen index.html kan vi använda kommandot:

# restorecon -v /var/www/html/index.html

Om vi ​​rekursivt vill gå igenom hela katalogen och ändra kontexten för alla filer den innehåller, använder vi följande kommando:

# restorecon -Rv /var/www/html

5.3 Ändra etiketter för hela filsystemet.

Ibland är det nödvändigt att återställa säkerhetsetiketter på hela filsystemet. Oftast utförs denna operation när du återaktiverar SELinux efter att systemet har stängts av under en tid. Detta är också nödvändigt om vi ändrar policyhanteringstypen till strikt (i det här fallet fungerar alla processer i sina egna speciella domäner; ingen kan arbeta i unconfined_t-domänen).

För att automatiskt partitionera om filsystemet nästa gång du startar om, skriv in följande kommandon:
# touch /.autorelabel # starta om
Ibland fungerar inte automatisk ompartition (oftast i de fall där distributionspaketet med SELinux inaktiverat uppdaterades). I det här fallet använder du följande kommando:

# genhomedircon # touch /.autorelabel # starta om

5.4 Ge tillgång till hamnar.

Ofta vill vi att tjänster som Apache ska kunna lyssna på icke-standardiserade portar och acceptera inkommande anslutningar på dem. Grundläggande SELinux-policyer tillåter endast åtkomst till fördefinierade portar som är tätt associerade med en viss tjänst. Låt oss säga att vi vill att Apache ska lyssna på port 81. I det här fallet måste vi lägga till en regel med kommandot semanage:

# semanage port -a -t http_port_t -p tcp 81

En komplett lista över portar som SELinux ger åtkomst till kan ses enligt följande:

# semanage port -l

I nästa, andra del av manualen kommer vi att visa möjligheten till flexibel konfiguration av systempolicyer.

Dela med sig