5.7. SELinux context - Bestanden labelen
Op systemen die SELinux draaien, zijn alle processen en bestanden gelabeld met een label die informatie bevat die relevant is voor de beveiliging. Deze informatie wordt de SELinux context genoemd. Voor bestanden kan deze bekeken worden met het ls -Z
commando:
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
In dit voorbeeld biedt SELinux een gebruiker (unconfined_u
), een rol (object_r
), een type (user_home_t
), en een niveau (s0
). Deze informatie wordt gebruikt om toegangscontrole beslissingen te maken. Op DAC systemen wordt toegang gecontroleerd op basis van Linux gebruiker en groep ID's. SELinux tactiekregels worden toegepast na de DAC regels. SELinux tactiekregels worden niet gebruikt als DAC regels als eerste toegang weigeren.
Er zijn meerdere commando's voor het beheren van de SELinux context voor bestanden, zoals chcon
, semanage fcontext
, en restorecon
.
5.7.1. Tijdelijke veranderingen: chcon
Het chcon
commando verandert de SELinux context voor bestanden. Deze veranderingen overleven het herlabelen van een bestandssysteem niet, en ook het /sbin/restorecon
commando niet. SELinux tactiek controleert welke gebruikers in staat zijn om de SELinux context voor elk bestand te veranderen. Als chcon
gebruikt wordt, kunnen gebruikers alle of een deel van de SELinux context veranderen. Een foutief bestands type is een vaak voorkomende fout als SELinux toegang weigert.
Het volgende voorbeeld laat het veranderen van het type zien, alle andere attributen van de SELinux context blijven onveranderd:
Voer het cd
commando uit zonder argumenten om naar je persoonlijke map te gaan.
Voer het touch file1
commando uit om een nieuw bestand aan te maken. Gebruik het ls -Z file1
commando om de SELinux context voor file1
te zien:
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
In dit voorbeeld bevat de SELinux context voor
file1
de SELinux
unconfined_u
gebruiker, de
object_r
rol, het
user_home_t
type, en het
s0
niveau. Voor een beschrijving van ieder onderdeel van de SELinux context, refereer je naar
Hoofdstuk 3, SELinux context.
Voer het chcon -t samba_share_t file1
commando uit om het type te veranderen naar samba_share_t
. De -t
optie verandert alleen het type. Bekijk de verandering met ls -Z file1
:
$ ls -Z file1
-rw-rw-r-- user1 group1 unconfined_u:object_r:samba_share_t:s0 file1
Gebruik het /sbin/restorecon -v file1
commando om de SELinux context voor het file1
bestand te herstellen. Gebruik de -v
optie om te zien wat er verandert:
$ /sbin/restorecon -v file1
restorecon reset file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:user_home_t:s0
In dit voorbeeld wordt het vorige type, samba_share_t
, hersteld naar het juiste user_home_t
type. Als gerichte tactiek gebruikt wordt (de standaard SELinux tactiek in Fedora 11), leest het /sbin/restorecon
commando de bestanden in de /etc/selinux/targeted/contexts/files/
map om te zien welke SELinux context bestanden moeten hebben.
Het voorbeeld in deze paragraaf werkt hetzelfde voor mappen, bijvoorbeeld, als file1
een map was.
Het volgende voorbeeld laat het aanmaken van een nieuwe map zien, en het veranderen van het bestandstype van de map (te samen met zijn inhoud) naar een type dat gebruikt wordt voor de Apache HTTP server. De instelling in dit voorbeeld wordt gebruikt als je wilt dat de Apache HTTP server een ander document root gebruikt (in plaats van /var/www/html/
):
Als de Linux root gebruiker voer je het mkdir /web
commando uit om een nieuwe map aan te maken, en daarna het touch /web/file{1,2,3}
commando om 3 lege bestanden aan te maken (file1
, file2
, en file3
). De /web/
map en zijn bestanden zijn gelabeld met het default_t
type:
# ls -dZ /web
drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
# ls -lZ /web
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file2
-rw-r--r-- root root unconfined_u:object_r:default_t:s0 file3
Als de Linux root gebruiker voer je het chcon -R -t httpd_sys_content_t /web/
commando uit om het type van de /web/
map (en zijn inhoud) te veranderen naar httpd_sys_content_t
:
# chcon -R -t httpd_sys_content_t /web/
# ls -dZ /web/
drwxr-xr-x root root unconfined_u:object_r:httpd_sys_content_t:s0 /web/
# ls -lZ /web/
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file1
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file2
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 file3
Als de Linux root gebruiker voer je het /sbin/restorecon -R -v /web/
commando uit om de standaard SELinux context te herstellen:
# /sbin/restorecon -R -v /web/
restorecon reset /web context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/file2 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/file3 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
restorecon reset /web/file1 context unconfined_u:object_r:httpd_sys_content_t:s0->system_u:object_r:default_t:s0
Refereer naar de chcon(1) manual pagina voor verdere informatie over chcon
.
Opmerking
Type Enforcement is de belangrijkste toestemmingscontrole gebruikt in SELinux gerichte tactiek. Voor het grootste deel kunnen SELinux gebruikers en rollen genegeerd worden.