Hoofdstuk 3. SELinux context
Processen en bestanden worden gelabeld met een SELinux context die extra informatie bevat, zoals een SELinux gebruiker, rol, type, en, optioneel, een niveau. Als SELinux gedraaid wordt, wordt al deze informatie gebruikt om toegangs contole beslissingen te maken. In Fedora 11, biedt SELinux een combinatie van Role-Based Access Contol (RBAC) (toegangscontrole gebaseerd op rol), Type Enforcement® (TE) (type afdwinging), en, optioneel, Multi-Level Security (MLS) (multi-niveau beveiliging)
Het volgende is een voorbeeld SELinux context. SELinux context wordt gebruikt voor processen, Linux gebruikers, en bestanden in Linux operating systemen die SELinux draaien. Gebruik het ls -Z
commando om de SELinux context van bestanden en mappen te zien:
$ ls -Z file1
-rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
SELinux context volgt de SELinux gebruiker:rol:type:niveau syntax:
- SELinux gebruiker
De SELinux gebruiker identiteit is een identiteit die bekend is aan de tactiek en die gemachtigd is voor een specifieke verzameling van rollen, en voor een specifieke MLS reeks. Iedere Linux gebruiker wordt afgebeeld op een SELinux gebruiker via SELinux tactiek. Dit staat Linux gebruikers toe om de beperkingen van SELinux gebruiker te erven. De afgebeelde SELinux identiteit wordt gebruikt in de SELinux context voor processen in die sessie, om te beperken welke rollen en niveau's ze kunnen betreden. Voer het semanage login -l
commando uit als Linux root gebruiker om een lijst van afbeeldingen te zien tussen SELinux en Linux gebruikersaccounts:
# /usr/sbin/semanage login -l
Login Name SELinux User 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
De output kan verschillen van systeem tot systeem. De Login Name
kolom laat de Linux gebruikers zien, en de SELinux User
kolom laat zien op welke SELinux gebruiker de Linux gebruiker is afgebeeld. Voor processen beperkt de SELinux gebruiker welke rollen en niveau's bereikbaar zijn. De laatste kolom, MLS/MCS Range
, is het niveau gebruikt door Multi-Level Security (MLS) en Multi-Category Security (MCS) (multi-categorie beveiliging). Niveau's worden later kort besproken.
- rol
Onderdeel van SELinux is het Role-Based Access Control (RBAC) beveiligings model. De rol is een kenmerk van RBAC. SELinux gebruikers zijn gemachtigd voor rollen, en rollen zijn gemachtigd voor domeinen. De rol dient als een bemiddelaar tussen domeinen en SELinux gebruikers. De rollen die betreed kunnen worden bepalen welke domeinen betreed kunnen worden - uiteindelijk controleert dit tot welke object types toegang kan worden verkregen. Dit helpt de kwetsbaarheid te verminderen voor rechten escalatie aanvallen.
- type
Het type is een kenmerk van Type Enforcement. Het type definieert een domein voor processen, en een type voor bestanden. SELinux tactiekregels bepalen hoe types toegang hebben tot elkaar, of het nu een domein is die toegang heeft tot een type, of een domein die toegang heeft tot een ander domein. Toegang is alleen toegestaan als er een specifieke SELinux tactiekregel bestaat die dit toestaat.
- niveau
Het niveau is een kenmerk van MLS en Multi-Category Security (MCS). Een MLS reeks is een paar van niveau's, geschreven als laagniveau-hoogniveau als de niveau's verschillend zijn, of laagniveau als de niveau's identiek zijn (s0-s0
is hetzelfde als s0
). Elk niveau is een gevoeligheid-categorie paar, met categorie optioneel. Als er categorieën zijn, wordt het niveau geschreven als gevoeligheid:categorie-set. Als er geen categorieën zijn, wordt het geschreven als gevoeligheid.
Als de categorie set een opeenvolgende reeks is, kan het afgekort worden. Bijvoorbeeld, c0.c3
is hetzelfde als c0,c1,c2,c3
. Het /etc/selinux/targeted/setrans.conf
bestand beeldt niveau's (s0:c0
) af op een voor mensen leesbare vorm (CompanyConfidential
). Bewerk setrans.conf
niet met een tekstverwerker: gebruik semanage
om veranderingen te maken. Refereer naar de semanage(8) manual pagina voor meer informatie. De gerichte tactiek in Fedora 11 dwingt MCS af, en in MCS is een gevoeligheid, s0
. MCS in Fedora 11 ondersteunt 1024 verschillende categorieën: c0
tot en met c1023
. s0-s0:c0.c1023
is gevoeligheid s0
en gemachtigd voor alle categorieën.
MLS dwingt het
Bell-LaPadula Mandatory Access Model af, en wordt gebruikt in Labeled Security Protection Profile (LSPP) omgevingen. Om MLS beperkingen te gebruiken, installeer je het
selinux-policy-mls pakket, en je stelt MLS in om de standaard SELinux tactiek te zijn. De MLS tactiek die onderdeel van Fedora is laat veel programma domeinen weg die geen onderdeel waren van de geevalueerde configuratie, en daarom is MLS niet bruikbaar op een bureau werkstation (geen ondersteuning voor het X Windows systeem); echter een MLS tactiek kan gemaakt worden van de
upstream SELinux Referentie Tactiek die alle programma domeinen bevat.
Een proces in een domein gaat over naar een ander domein door het uitvoeren van een toepassing die het entrypoint
type heeft voor het nieuwe domein. De entrypoint
toestemming wordt gebruikt in SELinux tactiek, en controleert welke toepassingen gebruikt kunnen worden om een domein in te gaan. Het volgende voorbeeld laat een domein overgang zien:
Een gebruiker wil zijn wachtwoord veranderen. Om zijn wachtwoord te veranderen, gebruikt hij de passwd
toepassing. Het /usr/bin/passwd
uitvoerbare programma is gelabeld met het passwd_exec_t
type:
$ ls -Z /usr/bin/passwd
-rwsr-xr-x root root system_u:object_r:passwd_exec_t:s0 /usr/bin/passwd
De passwd toepassing heeft toegang tot /etc/shadow
, welke gelabeld is met het shadow_t
type:
$ ls -Z /etc/shadow
-r-------- root root system_u:object_r:shadow_t:s0 /etc/shadow
Een SELinux tactiekregel zegt dat het aan processen die in het passwd_t
domein draaien toegestaan wordt om te lezen en schrijven naar bestanden gelabeld met het shadow_t
type. Het shadow_t
type wordt alleen toegepast bij bestanden die nodig zijn voor een verandering van wachtwoord. Dit omvat /etc/gshadow
, /etc/shadow
, en hun backup bestanden.
Een SELinux tactiekregel zegt dat het passwd_t
domein entrypoint
toestemming heeft voor het passwd_exec_t
type.
Als een gebruiker de /usr/bin/passwd
toepassing uitvoert, zal het shell proces van de gebruiker overgaan naar het passwd_t
domein. Met SELinux, omdat de standaard actie weigeren is, en er een regel bestaat die toestaat (onder andere) dat toepassingen die draaien in het passwd_t
domein toegang hebben tot bestanden gelabeld met het shadow_t
type, is het de passwd toepassing toegestaan om toegang te hebben tot /etc/shadow
, en dus om het wachtwoord van de gebruiker te vernieuwen.
Dit voorbeeld is niet volledig,en wordt gebruikt als een basis voorbeeld om domein overgangen uit te leggen. Hoewel er in werkelijkheid een regel is die subjects, die in het passwd_t
domein draaien, toestaan om toegang te hebben tot objecten met het shadow_t
bestandslabel type, moet er voldaan worden aan andere SELinux tactiekregels voordat het subject kan overgaan naar een nieuw domein. In dit voorbeeld, verzekert Type Enforcement dat:
het passwd_t
domein kan alleen betreden worden door het uitvoeren van een toepassing gelabeld met het passwd_exec_t
type; kan alleen uitgevoerd worden met gemachtigde gedeelde bibliotheken, zoals het lib_t
type; en kan niet uitgevoerd worden enig andere toepassing.
alleen gemachtigde domeinen, zoals passwd_t
, kunnen naar bestanden schrijven met het shadow_t
type. Zelfs als andere processen draaien met root gebruiker rechten, kunnen deze processen niet schrijven naar bestanden gelabeld met het shadow_t
type, omdat deze niet draaien in het passwd_t
domein.
alleen gemachtigde domeinen kunnen overgaan naar het passwd_t
domein. Bijvoorbeeld, het sendmail
proces draaiend in het sendmail_t
domein heeft geen geldige reden om passwd
uit te voeren; daarom kan het nooit overgaan naar het passwd_t
domein.
processen die draaien in het passwd_t
domein kunnen alleen lezen en schrijven naar gemachtigde types, zoals bestanden gelabeld met etc_t
of shadow_t
types. Dit verhindert de passwd toepassing om misleid te worden om willekeurige bestanden te lezen of te schrijven.