Uitgave 1.3
Copyright © 2009 Red Hat, Inc.
Mono-spaced Bold
Om de inhoud van het bestandmijn_onwijsgoed_verkopende_boekin uw huidige directory te zien, voert u het commandocat mijn_onwijsgoed_verkopende_boekin bij de shell-prompt en drukt u op Enter om het commando uit te laten voeren.
Druk op Enter om het commando te laten uitvoeren.Druk op Ctrl+Alt+F1 om naar de eerste virtuele terminal over te schakelen. Druk op Ctrl+Alt+F7 om terug te keren naar uw X-Windows sessie.
Mono-spaced Bold. Voorbeeld:
Onder bestandsgerelateerde klassen vallenfilesystemvoor bestandsystemen,filevoor bestanden, endirvoor directories. Elke klasse heeft haar eigen set van permissies.
Kies uit de hoofdmenubalk om Muis Voorkeuren te openen. In de Knoppen tab, klik de Linkshandige muis checkbox aan en klik om de primaire muisknop van links naar rechts te wisselen (waardoor de muis beter geschikt is geworden voor linkshandig gebruik).Om een speciaal teken in een gedit bestand op te nemen, kiest u uit de hoofdmenubalk. Vervolgens kiest u uit de Tekentabel menubalk, typ de naam van het teken in het Zoek veld en klik . Het teken dat u zoekt zal worden gemarkeerd in de Tekentafel. Dubbel-klik op dit teken om het in de Te kopiëren tekst veld op te nemen en klik dan de knop. Keer terug naar uw document en kies uit de gedit menubalk.
Mono-spaced Bold Italic of Proportional Bold Italic
Om verbinding te maken met een andere computer met behulp van ssh, typt usshbij een shell prompt.gebruikersnaam@domein.naamHetmount -o remountcommando mount opnieuw het genoemde bestandsysteem. Om bijvoorbeeld hetfile-system/homebestandsysteem opnieuw te mounten, gebruikt men hetmount -o remount /homecommando.Om de versie van een huidig geïnstalleerd pakket te zien, gebruikt u hetrpm -qcommando. Dit zal het volgende resultaat opleveren:package.package-version-release
Wanneer de Apache HTTP Server verzoeken accepteert, zet het childprocessen of threads ter afhandeling in. Deze groep van childprocessen of threads staan bekend als een server-pool. Onder Apache HTTP Server 2.0 is de verantwoordelijkheid voor het creëren en onderhouden van deze server-pools toegewezen aan een groep modules genaamd Multi-Processing Modules (MPMs). Anders dan bij de andere modules kan slechts één module van de MPM groep door de Apache HTTP Server geladen zijn.
Mono-spaced Roman en als volgt gepresenteerd:
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
Mono-spaced Roman maar worden alsvolgt gepresenteerd en benadrukt:
package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
{
public static void main(String args[])
throws Exception
{
InitialContext iniCtx = new InitialContext();
Object ref = iniCtx.lookup("EchoBean");
EchoHome home = (EchoHome) ref;
Echo echo = home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
}
}
ls -l commando om de bestandsrechten te zien:
$ ls -l file1 -rwxrw-r-- 1 user1 group1 0 2009-04-30 15:42 file1
rwx, controleren de toegang die de Linux user1 gebruiker (in dit geval de eigenaar) heeft voor file1. De volgende drie rechten bits, rw-, controleren de toegang die de Linux group1 groep heeft voor file1. De laatste drie rechten bits, r--, controleren de toegang die alle anderen hebben voor file1, wat alle gebruikers en processen omvat.
ls -Z commando:
$ ls -Z file1 -rwxrw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
unconfined_u), een rol (object_r), een type (user_home_t), en een niveau (s0) aan. Deze informatie wordt gebruikt om toegangscontrole beslissingen te maken. Met DAC kan de toegang alleen maar gecontroleerd worden op basis van de gebruiker en groep ID's. De SELinux tactiekregels worden gecontroleerd na de DAC regels. SELinux tactiekregels worden niet gebruikt als DAC reeds toegang weigert.
sudo en su, zowel als ze te verhinderen om bestanden en toepassingen in hun persoonlijke map uit te voeren - als dat ingesteld is, dit belet gebruikers om verdachte bestanden vanuit hun persoonlijke mappen op te starten.
named daemon, en andere processen.
[1] "Integrating Flexible Support for Security Policies into the Linux Operating System", door Peter Loscocco en Stephen Smalley. Dit artikel was oorspronkelijk gemaakt voor de National Security Agency en is dus in het publieke domein. Refereer naar het originele artikel voor details en het document zoals het eerst is vrijgegeven. Alle aanpassingen en veranderingen zijn gedaan door Murray McAllister.
[2] "Meeting Critical Security Objectives with Security-Enhanced Linux", door Peter Loscocco en Stephen Smalley. Dit artikel was oorspronkelijk gemaakt voor de National Security Agency en is dus in het publieke domein. Refereer naar het originele artikel voor details en het document zoals het eerst was vrijgegeven. Alle aanpassingen en veranderingen zijn gemaakt door Murray McAllister.
[3] Tekst bestanden die informatie bevatten, zoals hostnaam naar IP adres omzetting, die gebruikt wordt door DNS servers.
[4] Cox, Mark. "Risk report: Three years of Red Hat Enterprise Linux 4". Published 26 February 2008. Accessed 28 August 2008: http://www.redhatmagazine.com/2008/02/26/risk-report-three-years-of-red-hat-enterprise-linux-4/.
[5] Marti, Don. "A seatbelt for server software: SELinux blocks real-world exploits". Published 24 February 2008. Accessed 28 August 2008: http://www.linuxworld.com/news/2008/022408-selinux.html?page=1.
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
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
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.
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.
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.
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:
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
/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
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.
passwd_t domein entrypoint toestemming heeft voor het passwd_exec_t type.
/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.
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:
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.
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.
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.
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.
ps -eZ commando om de SELinux context voor processen te bekijken. Bijvoorbeeld:
/usr/bin/passwd commando uit. Vul geen nieuw wachtwoord in.
ps -eZ | grep passwd commando uit. De output lijkt op het volgende:
unconfined_u:unconfined_r:passwd_t:s0-s0:c0.c1023 13212 pts/1 00:00:00 passwd
Ctrl+C in de eerste tab om de passwd toepassing te stoppen.
/usr/bin/passwd toepassing (gelabeld met het passwd_exec_t type) wordt uitgevoerd, gaat het shell proces van de gebruiker over naar het passwd_t domein. Denk eraan: het type definieert een domein voor een proces, en een type voor bestanden.
ps -eZ commando om de SELinux context voor draaiende processen te zien. Het volgende is een beperkt voorbeeld van de output, en kan op jouw systeem anders zijn:
system_u:system_r:setroubleshootd_t:s0 1866 ? 00:00:08 setroubleshootd system_u:system_r:dhcpc_t:s0 1869 ? 00:00:00 dhclient system_u:system_r:sshd_t:s0-s0:c0.c1023 1882 ? 00:00:00 sshd system_u:system_r:gpm_t:s0 1964 ? 00:00:00 gpm system_u:system_r:crond_t:s0-s0:c0.c1023 1973 ? 00:00:00 crond system_u:system_r:kerneloops_t:s0 1983 ? 00:00:05 kerneloops system_u:system_r:crond_t:s0-s0:c0.c1023 1991 ? 00:00:00 atd
system_r rol wordt gebruikt voor systeem processen, zoals daemons. Type Enforcement afzondert dan elk domein.
id -Z commando om de SELinux context te zien die verbonden is met jouw Linux gebruiker:
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_u gebruiker, draait in de unconfined_r rol, en draait in het unconfined_t domein. s0-s0 is een MLS reeks, die in dit geval hetzelfde is als s0. De categorieën waar naar de gebruiker toegang heeft zijn gedefinieerd door c0.c1023, wat betekent alle categorieën (c0 tot en met c1023).
unconfined_t domein, en systeem processen opgestart door init draaien in het initrc_t domein - deze beide domeinen zijn onbeperkt.
httpd proces draait in het httpd_t domein. Als een beperkt proces in gevaar wordt gebracht door een aanvaller zal, afhankelijk van de SELinux tactiek instellingen, de toegang van de aanvaller naar hulpbronnen, en de mogelijke schade die aangericht kan worden, beperkt zijn.
httpd) leest van bestanden die niet correct gelabeld zijn, zoals bestanden bedoelt voor gebruik met Samba. Dit is een voorbeeld, en moet niet gebruikt worden in een productieomgeving. Het neemt aan dat de httpd, wget, setroubleshoot-server, en audit pakketten geinstalleerd zijn, dat de SELinux gerichte tactiek wordt gebruikt, en dat SELinux draait in de afdwingende (enforcing) modus.
sestatus commando uit om te bevestigen dat SELinux is aangezet, het draait in de afdwingende modus, en dat de gerichte tactiek wordt gebruikt:
$ /usr/sbin/sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 23 Policy from config file: targeted
SELinux status: enabled is returned when SELinux is enabled. Current mode: enforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is returned when the SELinux targeted policy is used.
touch /var/www/html/testfile commando om een bestand aan te maken.
ls -Z /var/www/html/testfile commando om de SELinux context te bekijken:
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/testfile
testfile bestand gelabeld met de SELinux unconfined_u gebruiker. RBAC wordt gebruikt voor processen, niet voor bestanden. Rollen hebben geen betekenis voor bestanden - de object_r rol is een algemene rol gebruikt voor bestanden (op blijvende opslag en netwerkbestandsystemen). In de /proc/ map, kunnen bestanden die gerelateerd zijn aan processen de system_r rol gebruiken.[6] Het httpd_sys_content_t type staat het httpd proces toe om toegang te krijgen tot dit bestand.
service httpd start commando om het httpd proces te starten. Als httpd met succes opstart verschijnt de volgende output:
# /sbin/service httpd start Starting httpd: [ OK ]
wget http://localhost/testfile commando. Behalve als er veranderingen in de standaard instelling gemaakt zijn zal dit commando slagen:
--2009-05-06 23:00:01-- http://localhost/testfile
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/plain]
Saving to: `testfile'
[ <=> ] 0 --.-K/s in 0s
2009-05-06 23:00:01 (0.00 B/s) - `testfile' saved [0/0]
chcon commando herlabelt bestanden; zulke label veranderingen zullen echter niet blijven bestaan als het bestandssysteem opnieuw gelabeld wordt. Voor permanente veranderingen die een herlabeling van het bestandssysteem zullen overleven, gebruik je het semanage commando, dat later besproken wordt. Als de Linux root gebruiker draai je het volgende commando om het type te veranderen naar een type dat door Samba gebruikt wordt:
chcon -t samba_share_t /var/www/html/testfile
ls -Z /var/www/html/testfile commando om de veranderingen te bekijken:
-rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/testfile
httpd proces toegang toe tottestfile. Ga naar een map waar je Linux gebruiker schrijfrechten heeft, en voer het wget http://localhost/testfile commando uit. Behalve als er veranderingen in de standaard instelling gemaakt zijn zal dit commando falen:
--2009-05-06 23:00:54-- http://localhost/testfile Resolving localhost... 127.0.0.1 Connecting to localhost|127.0.0.1|:80... connected. HTTP request sent, awaiting response... 403 Forbidden 2009-05-06 23:00:54 ERROR 403: Forbidden.
rm -i /var/www/html/testfile commando om testfile te verwijderen.
httpd draait, voer je als de Linux root gebruiker het service httpd stop commando uit om httpd te stoppen:
# /sbin/service httpd stop Stopping httpd: [ OK ]
httpd proces toegang toestaan tot testfile in stap 7, zal SELinux toegang weigeren omdat het bestand gelabeld was met een type waarnaar het httpd proces geen toegang heeft. Na stap 7 wordt een fout weggeschreven naar /var/log/messages die lijkt op het volgende:
May 6 23:00:54 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/testfile (samba_share_t). For complete SELinux messages. run sealert -l c05911d3-e680-4e42-8e36-fe2ab9f8e654
/var/log/messages.YYYYMMDD formaat gebruiken. Als syslog-ng draait, kunnen eerdere log bestanden een /var/log/messages.X formaat gebruiken. Als de setroubleshootd en auditd processen draaien, worden fouten naar /var/log/audit/audit.log weggeschreven likend op het volgende:
type=AVC msg=audit(1220706212.937:70): avc: denied { getattr } for pid=1904 comm="httpd" path="/var/www/html/testfile" dev=sda5 ino=247576 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1220706212.937:70): arch=40000003 syscall=196 success=no exit=-13 a0=b9e21da0 a1=bf9581dc a2=555ff4 a3=2008171 items=0 ppid=1902 pid=1904 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
/var/log/httpd/error_log lijkend op het volgende:
[Wed May 06 23:00:54 2009] [error] [client 127.0.0.1] (13)Permission denied: access to /testfile denied
setroubleshootd en auditd daemons. Deze daemons draaien standaard. Het stoppen van een van deze daemons verandert waar de SELinux weigeringen weggeschreven worden. Refereer naar Paragraaf 5.2, “Welk log bestand wordt gebruikt” voor meer informatie.
initrc_t domein, onbeperkte kernel processen draaien in het kernel_t domein, en onbeperkte Linux gebruikers draaien in het unconfined_t domein. Voor onbeperkte processen worden SELinux tactiekregels toegepast, maar de bestaande tactiekregels staan processen die in onbeperkte domeinen draaien bijna alle toegang toe. Processen die draaien in onbeperkte domeinen vallen terug op het gebruik van alleen de DAC regels. Als een onbeperkt proces in gevaar wordt gebracht, verhindert SELinux een aanvaller niet om toegang te krijgen tot systeemhulpbronnen en data, maar de DAC regels worden natuurlijk nog gebruikt. SELinux is een beveiligingsverbetering boven op DAC regels - het vervangt deze niet.
httpd) als het onbeperkt draait toegang kan krijgen tot data die bedoeld is voor gebruik met Samba. Merk op: in Fedora 11 draait het httpd proces standaard in het beperkte httpd_t domein. Dit is een voorbeeld en moet niet in een productieomgeving gebruikt worden. Het neemt aan dat de httpd, wget, setroubleshoot-server, en audit pakketten geinstalleerd zijn, dat de SELinux gerichte tactiek gebruikt wordt, en dat SELinux in de afdwingende modus is:
sestatus commando uit om te bevestigen dat SELinux is aangezet, het draait in de afdwingende modus, en dat de gerichte tactiek wordt gebruikt:
$ /usr/sbin/sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 23 Policy from config file: targeted
SELinux status: enabled is returned when SELinux is enabled. Current mode: enforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is returned when the SELinux targeted policy is used.
touch /var/www/html/test2file commando uit om een bestand te maken.
ls -Z /var/www/html/test2file commando uit om de SELinux context te zien:
-rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/test2file
test2file bestand gelabeld met de SELinux unconfined_u gebruiker. RBAC wordt gebruikt voor processen, niet voor bestanden. Rollen hebben geen betekenis voor bestanden - de object_r rol is een algemene rol gebruikt voor bestanden (op blijvende opslag en netwerkbestandssystemen). In de /proc/ map, kunnen bestanden die gerelateerd zijn aan processen de system_r rol gebruiken.[7] Het httpd_sys_content_t type staat het httpd proces toe om toegang te krijgen tot dit bestand.
chcon commando herlabelt bestanden; zulke label veranderingen zullen echter niet blijven bestaan als het bestandssysteem opnieuw gelabeld wordt. Voor permanente veranderingen die een herlabeling van het bestandssysteem zullen overleven, gebruik je het semanage commando, dat later besproken wordt. Als de Linux root gebruiker draai je het volgende commando om het type te veranderen naar een type dat door Samba gebruikt wordt:
chcon -t samba_share_t /var/www/html/test2file
ls -Z /var/www/html/test2file commando uit om de veranderingen te bekijken:
-rw-r--r-- root root unconfined_u:object_r:samba_share_t:s0 /var/www/html/test2file
service httpd status commando uit om te bevestigen dat het httpd proces niet draait:
$ /sbin/service httpd status httpd is stopped
service httpd stop commando uit als de Linux root gebruiker om het httpd proces te stoppen:
# /sbin/service httpd stop Stopping httpd: [ OK ]
httpd proces onbeperkt te laten draaien, voer je het volgende commando uit als de Linux root gebruiker om het type van /usr/sbin/httpd te veranderen naar een type dat niet overgaat naar een beperkt domein:
chcon -t unconfined_exec_t /usr/sbin/httpd
ls -Z /usr/sbin/httpd commando uit om te bevestigen dat /usr/sbin/httpd is gelabeld met het unconfined_exec_t type:
-rwxr-xr-x root root system_u:object_r:unconfined_exec_t /usr/sbin/httpd
service httpd start commando om het httpd proces te starten. Als httpd met succes opstart verschijnt de volgende output:
# /sbin/service httpd start Starting httpd: [ OK ]
ps -eZ | grep httpd commando uit om httpd te zien draaien in het unconfined_t domein:
$ ps -eZ | grep httpd unconfined_u:system_r:unconfined_t7721? 00:00:00 httpd unconfined_u:system_r:unconfined_t7723? 00:00:00 httpd unconfined_u:system_r:unconfined_t7724? 00:00:00 httpd unconfined_u:system_r:unconfined_t7725? 00:00:00 httpd unconfined_u:system_r:unconfined_t7726? 00:00:00 httpd unconfined_u:system_r:unconfined_t7727? 00:00:00 httpd unconfined_u:system_r:unconfined_t7728? 00:00:00 httpd unconfined_u:system_r:unconfined_t7729? 00:00:00 httpd unconfined_u:system_r:unconfined_t7730? 00:00:00 httpd
wget http://localhost/test2file commando uit. Behalve als er veranderingen in de standaard instelling gemaakt zijn, zal dit commando slagen:
--2009-05-07 01:41:10-- http://localhost/test2file
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 0 [text/plain]
Saving to: `test2file.1'
[ <=> ]--.-K/s in 0s
2009-05-07 01:41:10 (0.00 B/s) - `test2file.1' saved [0/0]
httpd proces geen toegang heeft tot bestanden gelabeld met het samba_share_t type, draait httpd in het onbeperkte unconfined_t domein, en valt terug op het gebruiken van DAC regels, en dus zal het wget commando slagen. Als httpd in het beperkte httpd_t domein had gedraaid, dan zou het wget commando gefaald hebben.
restorecon commando herlaadt de standaard SELinux context voor bestanden. Als de Linux root gebruiker voet je het restorecon -v /usr/sbin/httpd commando uit om de standaard SELinux context voor /usr/sbin/httpd te herladen:
# /sbin/restorecon -v /usr/sbin/httpd restorecon reset /usr/sbin/httpd context system_u:object_r:unconfined_notrans_exec_t:s0->system_u:object_r:httpd_exec_t:s0
ls -Z /usr/sbin/httpd commando uit om te bevestigen dat /usr/sbin/httpd is gelabeld met het httpd_exec_t type:
$ ls -Z /usr/sbin/httpd -rwxr-xr-x root root system_u:object_r:httpd_exec_t /usr/sbin/httpd
/sbin/service httpd restart commando uit om httpd opnieuw te starten. Na het herstarten, voer je het ps -eZ | grep httpd commando uit om te bevestigen dat httpd in het beperkte httpd_t domein draait:
# /sbin/service httpd restart Stopping httpd: [ OK ] Starting httpd: [ OK ] # ps -eZ | grep httpd unconfined_u:system_r:httpd_t 8880 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8882 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8883 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8884 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8885 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8886 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8887 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8888 ? 00:00:00 httpd unconfined_u:system_r:httpd_t 8889 ? 00:00:00 httpd
rm -i /var/www/html/test2file commando uit om test2file te verwijderen.
httpd draait, voer je als de Linux root gebruiker het service httpd stop commando uit om httpd te stoppen:
# /sbin/service httpd stop Stopping httpd: [ OK ]
semanage login -l commando als de Linux root gebruiker:
# /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
__default__ login ( welke is afgebeeld op de SELinux unconfined_u gebruiker). Het volgende definieert de standaard afbeelding:
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u gebruiker. Het neemt aan dat de Linux root gebruiker onbeperkt draait, wat standaard het geval is in Fedora 11:
/usr/sbin/useradd newuser commando uit om een nieuwe Linux gebruiker aan te maken met de naam newuser.
passwd newuser command to assign a password to the Linux newuser user:
# passwd newuser Changing password for user newuser. New UNIX password:Enter a passwordRetype new UNIX password:Enter the same password againpasswd: all authentication tokens updated successfully.
id -Z commando uit om de context van een Linux gebruiker te bekijken:
[newuser@localhost ~]$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
/usr/sbin/userdel -r newuser commando uit als de Linux root gebruiker om het te verwijderen, te samen met de persoonlijke map van de Linux newuser.
unconfined_t domein naar zijn eigen beperkt domein, zullen onbeperkte Linux gebruikers nog steeds vallen onder de beperkingen van dat beperkte domein. Het beveilings voordeel hiervan is dat, zelfs als een Linux gebruiker onbeperkt draait, de toepassing beperkt blijft, en dat daardoor de uitbuiting van een fout in de toepassing beperkt kan worden door de tactiek. Merk op: dit beschermt het systeem niet voor de gebruiker. In plaats daarvan worden de gebruiker en het systeem beschermd tegen mogelijke schade veroorzaakt door een fout in de toepassing.
| Gebruiker | Domein | X Window systeem | su en sudo | Uitvoeren in persoonlijke map en /tmp/ | Netwerken |
|---|---|---|---|---|---|
| guest_u | guest_t | nee | nee | optioneel | nee |
| xguest_u | xguest_t | ja | nee | optioneel | alleen Firefox |
| user_u | user_t | ja | nee | optioneel | ja |
| staff_u | staff_t | ja |
alleen sudo
| optioneel | ja |
guest_t, xguest_t, en user_t domeinen kunnen alleen set user ID (setuid) toepassingen draaien als SELinux tactiek dat toestaat (zoals passwd). Ze kunnen de su en /usr/bin/sudo setuid toepassingen niet draaien, en kunnen daarom deze toepassingen niet gebruiken om de Linux root gebruiker te worden.
guest_t domein hebben geen netwerk toegang, en kunnen alleen inloggen met een terminal (inclusief ssh; ze kunnen inloggen met ssh, maar kunnen ssh niet gebruiken om te verbinden met andere systemen).
xguest_t domein hebben is om met Firefox te verbinden met web pagina's.
xguest_t, user_t en staff_t domeinen kunnen inloggen met het X Window systeem en een terminal.
staff_t domein geen rechten om toepassingen met /usr/bin/sudo uit te voeren. Deze rechten moeten ingesteld worden door een beheerder.
guest_t en xguest_t domeinen geen toepassingen in hun persoonlijke mappen of /tmp/ uitvoeren, wat hun tegenhoudt om toepassingen op te starten (welke de rechten van de gebruiker erven) in mappen waartoe ze schrijftoegang hebben. Dit helpt om foutieve of kwaadwillige toepassingen te verhinderen om bestanden waarvan ze eigenaar zijn te veranderen.
user_t en staff_t domeinen toepassingen in hun persoonlijke mappen en /tmp/ uitvoeren. Refereer naar Paragraaf 6.6, “Booleans voor gebruikers die toepassingen uitvoeren” voor informatie over het toestaan en tegenhouden van gebruikers om toepassingen in hun persoonlijke mappen en /tmp/ uit te voeren.
mount commando; het aankoppelen van NFS bestandssystemen; en hoe je SELinux context behoudt bij het kopiëren en archiveren van bestanden en mappen.
semanage, restorecon, audit2allow, semodule, load_policy, en setsebool, voor het uitvoeren en beheren van SELinux.
system-config-selinux, een grafisch gereedschap voor het beheren van SELinux.
/usr/share/selinux/devel/policygentool en /usr/share/selinux/devel/policyhelp, en ook voorbeeld tactiek bestanden. Dit pakket is opgegaan in het selinux-policy pakket.
policy: levert SELinux tactieken. Voor gerichte tactiek, installeer je selinux-policy-targeted. Voor MLS, installeer je selinux-policy-mls. In Fedora 8 is de strikte tactiek opgegaan in de gerichte tactiek, wat toestaat dat beperkte en onbeperkte gebruikers tegelijk kunnen bestaan op hetzelfde systeem.
sealert (welke door dit pakket geleverd wordt).
apol, seaudit, en sediffx gereedschappen. Het setools-console pakket levert de seaudit-report, sechecker, sediff, seinfo, sesearch, findcon, replcon, en indexcon commadoregel gereedschappen. Refereer naar de Tresys Technology SETools pagina voor meer informatie over deze gereedschappen.
avcstat, getenforce, getsebool, matchpathcon, selinuxconlist, selinuxdefcon, selinuxenabled, setenforce, en togglesebool gereedschappen.
s0-s0:c0.c1023, naar een eenvoudiger te lezen vorm, zoals SystemLow-SystemHigh. Dit pakket is standaard niet geinstalleerd.
yum install pakket-naam commando. Bijvoorbeeld, om het mcstrans pakket te installeren, voer je het yum install mcstrans commando uit. Om alle geinstalleerde pakketten in Fedora 11 te vernieuwen, voer je het yum update commando uit.
yum om pakketten te beheren.
audit2allow -M.
setroubleshootd en auditd daemons. Deze daemons draaien standaard.
/var/log/audit/audit.log geschreven:
type=AVC msg=audit(1223024155.684:49): avc: denied { getattr } for pid=2000 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=399185 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=file
setroubleshootd draait, wat standaard het geval is, worden weigeringsboodschappen van /var/log/audit/audit.log ook vertaald naar een eenvoudiger te lezen vorm en naar /var/log/messages gestuurd:
May 7 18:55:56 localhost setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l de7e30d6-5488-466d-a606-92c9f40d316d
| Daemon | Log Location |
|---|---|
| auditd on | /var/log/audit/audit.log |
| auditd off; rsyslogd on | /var/log/messages |
| setroubleshootd, rsyslogd, and auditd on | /var/log/audit/audit.log. Easier-to-read denial messages also sent to /var/log/messages |
auditd, rsyslogd, en setroubleshootd daemons in te stellen om automatisch op te starten bij het opstarten van het systeem, voer je de volgende commando's uit als de Linux root gebruiker:
/sbin/chkconfig --levels 2345 auditd on
/sbin/chkconfig --levels 2345 rsyslog on
/sbin/chkconfig --levels 345 setroubleshoot on
service service-naam status commando om te controleren of deze services draaien, bijvoorbeeld:
$ /sbin/service auditd status
auditd (pid 1318) is running...
service-naam is stopped), voer je het service service-naam start commando uit als de Liinux root gebruiker om ze te starten. Bijvoorbeeld:
# /sbin/service setroubleshoot start Starting setroubleshootd: [ OK ]
/etc/selinux/config bestand is het hoofd SELinux configuratie bestand. Het controleert de SELinux modus en de te gebruiken SELinux tactiek:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
SELINUX=enforcing (afdwingend)SELINUX optie stelt de modus in waarin SELinux draait. SELinux heeft drie modes: enforcing (afdwingend), permissive (toelatend), en disabled (uitgezet). Als de afdwingende modus gebruikt wordt, wordt de SELinux tactiek afgedwongen, en SELinux verbiedt toegang gebaseerd op SELinux tactiekregels. Weigeringsboodschappen worden gelogd. Als de toelatende modus gebruikt wordt, wordt de SELinux tactiek niet afgedwongen. SELinux verbiedt geen toegang, maar weigeringen voor acties die geweigerd zouden zijn als SELinux in de afdwingende modus zou zijn, worden gelogd. In de uitgezette modus, is SELinux uitgezet (de SELinux module wordt niet registreerd bij de Linux kernel), en alleen DAC regels worden gebruikt.
SELINUXTYPE=targeted (gericht)SELINUXTYPE optie stelt de te gebruiken SELinux tactiek in. Gerichte tactiek is de standaard tactiek. Verander deze optie alleen als je de MLS tactiek wilt gebruiken. Om de MLS tactiek te gebruiken, installeer je het selinux-policy-mls pakket, je configureert SELINUXTYPE=mls in /etc/selinux/config; en je start je systeem opnieuw op.
/usr/sbin/getenforce of /usr/sbin/sestatus commando's om de status van SELinux te controleren. Het getenforce commando geeft Enforcing, Permissive, of Disabled terug. Het getenforce geeft Enforcing terug als SELinux is aangezet (SELinux tactiekregels zijn afgedwongen):
$ /usr/sbin/getenforce Enforcing
getenforce commando geeft Permissive terug als SELinux is aangezet, maar SELinux tactiekregels worden niet afgedwongen, en alleen DAC regels worden gebruikt. Het getenforce commando geeft Disabled terug als SELinux is uitgezet.
sestatus commando geeft de SELinux status en de gebruikte SELinux tactiek terug:
$ /usr/sbin/sestatus SELinux status: enabled SELinuxfs mount: /selinux Current mode: enforcing Mode from config file: enforcing Policy version: 23 Policy from config file: targeted
SELinux status: enabled is returned when SELinux is enabled. Current mode: enforcing is returned when SELinux is running in enforcing mode. Policy from config file: targeted is returned when the SELinux targeted policy is used.
SELINUX=disabled optie ingesteld in /etc/selinux/config:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce commando geeft Disabled terug:
$ /usr/sbin/getenforce Disabled
rpm -qa | grep selinux, rpm -q policycoreutils, en rpm -qa | grep setroubleshoot commando's om te bevestigen dat de SELinux pakketten geinstalleerd zijn. Deze gids neemt aan dat de volgende pakketten geinstalleerd zijn: selinux-policy-targeted, selinux-policy, libselinux, libselinux-python, libselinux-utils, policycoreutils, setroubleshoot, setroubleshoot-server en setroubleshoot-plugins. Als deze pakketten niet geinstalleerd zijn, installeer je ze als de Linux root gebruiker met het yum install pakket-naam commando. De volgende pakketten zijn optioneel: policycoreutils-gui, setroubleshoot, selinux-policy-devel, en mcstrans.
/sbin/chkconfig --list setroubleshoot commando om te bevestigen dat setroubleshootd opstart als het systeem draait in runlevel[10] 3, 4, en 5:
$ /sbin/chkconfig --list setroubleshoot setroubleshoot 0:off 1:off 2:off 3:on 4:on 5:on 6:off
/sbin/chkconfig --levels 345 setroubleshoot on commando uit. Hierdoor start setroubleshootd automatisch op als het systeem in runlevel 3, 4, en 5 draait.
SELINUX=permissive in /etc/selinux/config:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
reboot commando uit om het systeem opnieuw op te starten. Tijdens de volgende start worden de bestandssystemen gelabeld. Het label proces labelt alle bestanden met een SELinux context:
*** Warning -- SELinux targeted policy relabel is required. *** Relabeling could take a very long time, depending on file *** system size and speed of hard drives. ****
* karakter in de onderste regel representeerd 1000 bestanden die gelabeld zijn. In het bovenstaande voorbeeld, representeren vier * karakters 4000 bestanden die gelabeld zijn. De tijd die het duurt om alle bestanden te labelen hangt af van het aantal bestanden op het systeem, en de snelheid van de harde schijf stations. Op moderne systemen kan dit proces 10 minuten duren.
grep "SELinux is preventing" /var/log/messages commando uit om te bevestigen dat SELinux geen acties heeft geweigerd tijdens het laatste opstarten. Als SELinux geen acties heeft geweigerd tijdens het laatste opstarten, geeft dit commando geen output terug. Refereer naar Hoofdstuk 7, Foutzoeken voor foutzoek informatie als SELinux toegang heeft geweigerd tijdens het opstarten.
/var/log/messages waren, configureer je SELINUX=enforcing in /etc/selinux/config:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce commando Enforcing terug geeft:
$ /usr/sbin/getenforce Enforcing
/usr/sbin/semanage login -l commando uit op de afbeelding tussen SELinux en Linux gebruikers te bekijken. De output moet als volgt zijn:
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
SELinux-user gebruikersnaam is already defined waarschuwingen te negeren als ze voorkomen, waarin gebruikersnaam unconfined_u, guest_u, of xguest_u kan zijn:
/usr/sbin/semanage user -a -S targeted -P user -R "unconfined_r system_r" -r s0-s0:c0.c1023 unconfined_u
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 __default__
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r s0-s0:c0.c1023 root
/usr/sbin/semanage user -a -S targeted -P user -R guest_r guest_u
/usr/sbin/semanage user -a -S targeted -P user -R xguest_r xguest_u
SELINUX=disabled in /etc/selinux/config:
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
getenforce commando Disabled terug geeft:
$ /usr/sbin/getenforce Disabled
/usr/sbin/setenforce commando om te veranderen tussen afdwingende en toelatende mode. Veranderingen gemaakt met /usr/sbin/setenforce zijn niet blijvend na een heropstarten van het systeem. Om naar de afdwingende modus te veranderen, voer je als de Linux root gebruiker het /usr/sbin/setenforce 1 commando uit. Om naar de toelatende modus te veranderen, voer je het /usr/sbin/setenforce 0 commando uit. Gebruik het /usr/sbin/getenforce commando om de huidige SELinux modus te bekijken.
semanage boolean -l commando uit als de Linux root gebruiker. Het volgende voorbeeld laat niet alle Booleans zien:
# /usr/sbin/semanage boolean -l SELinux boolean Description ftp_home_dir -> off Allow ftp to read and write files in the user home directories xen_use_nfs -> off Allow xen to manage nfs files xguest_connect_network -> on Allow xguest to configure Network Manager
SELinux boolean kolom laat de lijst van Boolean namen zien. De Description kolom laat zien of de Booleans aan of uit zijn, en wat ze doen.
ftp_home_dir Boolean uit, dit belet de FTP daemon (vsftpd) om bestanden in de persoonlijke mappen van de gebruiker te lezen of te schrijven:
ftp_home_dir -> off Allow ftp to read and write files in the user home directories
getsebool -a commando laat een lijst zien van de Booleans, of ze nu aan of uit zijn, maar geeft geen beschrijving van elke Boolean. Het volgende voorbeeld laat niet alle Booleans zien:
$ /usr/sbin/getsebool -a allow_console_login --> off allow_cvs_read_shadow --> off allow_daemons_dump_core --> on
getsebool boolean-naam commando uit om alleen de status van de boolean-naam Boolean te laten zien:
$ /usr/sbin/getsebool allow_console_login allow_console_login --> off
$ getsebool allow_console_login allow_cvs_read_shadow allow_daemons_dump_core allow_console_login --> off allow_cvs_read_shadow --> off allow_daemons_dump_core --> on
setsebool boolean-naam x commando zet Booleans aan of uit, waarin boolean-naam de naam van een Boolean is, en x of on is om de Boolean aan te zetten, of off is om hem uit te zetten.
httpd_can_network_connect_db Boolean zien:
httpd_can_network_connect_db Boolean uit, wat Apache HTTP scripts en modules belet om te verbinden met database servers:
$ /usr/sbin/getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> off
setsebool httpd_can_network_connect_db on commando uit als de Linux root gebruiker.
getsebool httpd_can_network_connect_db commando om te bevestigen dat de Boolean aangezet is:
$ /usr/sbin/getsebool httpd_can_network_connect_db httpd_can_network_connect_db --> on
setsebool -P boolean-naam on commando uit als de Linux root gebruiker:
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
setsebool httpd_can_network_connect_db off commando uit. Voor veranderingen die blijvend zijn na het herstarten, voer je het setsebool -P httpd_can_network_connect_db off commando uit.
nfs_t type. En ook zijn standaard Samba delingen aangekoppeld op de client zijde gelabeld met een standaard context gedefinieerd door tactiek. In algemene tactieken gebruikt deze standaard context het cifs_t type.
nfs_t of cifs_t types te lezen. Dit kan bestandssystemen die met deze types gelabeld zijn beletten om aangekoppeld te worden en daarna gelezen of geexporteerd te worden door andere services. Booleans kunnen aan of uit gezet worden om te bepalen welke services toestemming hebben om toegang te krijgen tot de nfs_t enecifs_t types.
setsebool en semanage commando's moeten uitgevoerd worden als de Linux root gebruiker. Het setsebool -P commando maakt blijvende veranderingen. Gebruik de -P optie niet als je niet wilt dat veranderingen blijvend zijn na het opnieuw opstarten van het systeem:
nfs_t type):
/usr/sbin/setsebool -P httpd_use_nfs on
cifs_t type):
/usr/sbin/setsebool -P httpd_use_cifs on
/usr/sbin/setsebool -P samba_share_nfs on
vsftpd)/usr/sbin/setsebool -P allow_ftpd_use_nfs on
/usr/sbin/setsebool -P allow_ftpd_use_cifs on
/usr/sbin/semanage boolean -l | grep nfs
/usr/sbin/semanage boolean -l | grep cifs
ls -Z commando:
$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
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.
chcon, semanage fcontext, en restorecon.
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.
chcon -t type bestandsnaam commando uit om het bestandstype te veranderen, waarin type een type is, zoals httpd_sys_content_t, en bestandsnaam een bestand of een map is.
chcon -R -t type mapnaam commando uit om het type van een map en zijn inhoud te veranderen, waarin type een type is, zoals httpd_sys_content_t, en mapnaam een mapnaam is.
cd commando uit zonder argumenten om naar je persoonlijke map te gaan.
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
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.
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
/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
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.
file1 een map was.
/var/www/html/):
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
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
/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
chcon.
/usr/sbin/semanage fcontext commando verandert de SELinux context voor bestanden. Als de gerichte tactiek gebruikt wordt, worden veranderingen die met dit commando gemaakt zijn toegevoegd aan het /etc/selinux/targeted/contexts/files/file_contexts bestand als de veranderingen gemaakt zijn voor bestanden die bestaan in file_contexts, of worden toegevoegd aan file_contexts.local voor nieuwe bestanden en mappen, zoals het aan maken van een /web/ map. setfiles, welke gebruikt wordt als een bestandssysteem geherlabeld wordt, en /sbin/restorecon, welke de standaard SELinux context herstelt, lezen deze bestanden. Dit betekent dat veranderingen gemaakt door /usr/sbin/semanage fcontext blijvend zijn, zelfs als het bestandssysteem opnieuw gelabeld wordt. SELinux tactiek controleert of gebruikers in staat zijn de SELinux context van een bepaald bestand kunnen veranderen.
/usr/sbin/semanage fcontext -a opties bestandsnaam|mapnaam commando uit, waarbij je er aan moet denken om voor een bestand of map het volledige pad te gebruiken.
/sbin/restorecon -v bestandsnaam|mapnaam commando uit om de context veranderingen toe te passen.
touch /etc/file1 commando uit om een nieuw bestand aan te maken. Standaard worden nieuw aangemaakte bestanden in de /etc/ gelabeld met het etc_t type:
# ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
/usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1 commando uit om het type van file1 te veranderen naar samba_share_t. De -a optie voegt een nieuwe optekening toe, en de -t optie definieert een type (samba_share_t). Merk op: het uitvoeren van dit commando verandert niet direct het type - file1 is nog steeds gelabeld met het etc_t type:
# /usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1 # ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
/usr/sbin/semanage fcontext -a -t samba_share_t /etc/file1 commando voegt de volgende regel toe aan /etc/selinux/targeted/contexts/files/file_contexts.local:
/etc/file1 unconfined_u:object_r:samba_share_t:s0
/sbin/restorecon -v /etc/file1 commando uit om het type te veranderen. Omdat het semanage commando een regel aan file.contexts.local heeft toegevoegd voor /etc/file1, verandert het /sbin/restorecon commando het type naar samba_share_t:
# /sbin/restorecon -v /etc/file1 restorecon reset /etc/file1 context unconfined_u:object_r:etc_t:s0->system_u:object_r:samba_share_t:s0
rm -i /etc/file1 commando uit om file1 te verwijderen.
/usr/sbin/semanage fcontext -d /etc/file1 commando uit om de context toegevoegd voor /etc/file1 te verwijderen. Als de context verwijderd is, zal het uitvoeren van restorecon het type veranderen naar etc_t, in plaats van samba_share_t.
mkdir /web commando uit om een nieuwe map aan te maken. Deze map is gelabeld met het default_t type:
# ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
ls -d optie laat ls informatie tonen over een map, in plaats van zijn inhoud, en de -Z optie laat ls de SELinux context tonen (in dit voorbeeld, unconfined_u:object_r:default_t:s0).
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web commando uit om het type van /web/ te veranderen naar httpd_sys_content_t. De -a optie voegt een nieuwe aantekening toe, en de -t optie definieert een type (httpd_sys_content_t). Merk op: het uitvoeren van dit commando verandert niet direct het type - /web/ is nog steeds gelabeld met het default_t type:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web # ls -dZ /web drwxr-xr-x root root unconfined_u:object_r:default_t:s0 /web
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /web commmando voegt de volgende regel toe aan /etc/selinux/targeted/contexts/files/file_contexts.local:
/web unconfined_u:object_r:httpd_sys_content_t:s0
/sbin/restorecon -v /web commando uit om het type te veranderen. Omdat het semanage commando een regel aan file.contexts.local heeft toegevoegd voor /web, verandert het /sbin/restorecon commando het type naar httpd_sys_content_t:
# /sbin/restorecon -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
/web/ is verwijderd, zijn bestanden en mappen aangemaakt in de /web/ map gelabeld met het httpd_sys_content_t type.
/usr/sbin/semanage fcontext -d /web commando uit om de toegevoegde context voor /web/ te verwijderen.
/sbin/restorecon -v /web commando uit om de standaard SELinux context te herstellen.
/var/www/html/):
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
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" commando uit om het type van de /web/, en de bestanden hierin, te veranderen naar httpd_sys_content_t. De -a optie voegt een nieuwe aantekening toe, en de -t optie definieert een type (httpd_sys_content_t). De "/web(/.*)?" reguliere expressie laat het semanage commando veranderingen maken naar de /web/ map, en naar de bestanden daar in. Merk op: het uitvoeren van dit commando verandert niet direct het type - /web/ en de bestanden hierin zijn nog steeds 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
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" commando voegt de volgende regel toe aan /etc/selinux/targeted/contexts/files/file_contexts.local:
/web(/.*)? system_u:object_r:httpd_sys_content_t:s0
/sbin/restorecon -R -v /web commando uit om het type van de /web/ map, en alle bestanden hierin, te veranderen. De -R optie staat voor recursief, wat betekent dat alle bestanden en mappen onder de /web/ map gelabeld worden met het httpd_sys_content_t type. Omdat het semanage commando een regel toevoegde aan file.contexts.local voor /web(/.*)?, verandert het /sbin/restorecon commando de types naar httpd_sys_content_t:
# /sbin/restorecon -R -v /web restorecon reset /web context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file2 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file3 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /web/file1 context unconfined_u:object_r:default_t:s0->system_u:object_r:httpd_sys_content_t:s0
/web/ map gelabeld worden met het httpd_sys_content_t type.
/usr/sbin/semanage fcontext -d "/web(/.*)?" commando uit om de context toegevoegd voor "/web(/.*)?" te verwijderen.
/sbin/restorecon -R -v /web om de standaard SELinux context te herstellen.
/usr/sbin/semanage fcontext -a -t httpd_sys_content_t /test commando uit. De /test/ map hoeft niet te bestaan. Dit commando voegt de volgende context toe aan /etc/selinux/targeted/contexts/files/file_contexts.local:
/test system_u:object_r:httpd_sys_content_t:s0
/usr/sbin/semanage fcontext -d bestandsnaam|mapnaam commando uit, waarin bestandsnaam|mapnaam het eerste onderdeel is in file_contexts.local. Het volgende is een voorbeeld van een context in file_contexts.local:
/test system_u:object_r:httpd_sys_content_t:s0
/test is. Om te voorkomen dat de /test/ map gelabeld wordt met httpd_sys_content_t na het draaien van /sbin/restorecon, of na een bestandssysteem herlabeling, voer je het volgende commando uit als de Linux root gebruiker om de context van file_contexts.local te verwijderen:
/usr/sbin/semanage fcontext -d /test
/web(/.*)?, gebruik je aanhalingstekens om de reguliere expressie:
/usr/sbin/semanage fcontext -d "/web(/.*)?"
/usr/sbin/semanage.
/usr/sbin/semanage fcontext -a, gebruik dan het volledige pad naar het bestand of de map om te voorkomen dat bestanden verkeerd worden gelabeld na een systeem herlabeling, of nadat het /sbin/restorecon commando is uitgevoerd.
file_t type. Dit moet het enigste gebruik zijn van dit type, zodat bestanden zonder context op een schijf onderscheiden kunnen worden in de tactiek, en in het algemeen onbereikbaar worden gehouden voor beperkte domeinen. Het file_t type moet niet bestaan op correct gelabelde bestandssystemen, omdat alle bestanden op een systeem dat SELinux draait en SELinux context moeten hebben, en het file_t type wordt nooit gebruikt in bestandscontext configuratie[11].
default_t type wordt gebruikt voor bestanden die niet passen bij elk ander patroon in de bestandscontext configuratie, zodat zulke bestanden onderscheiden kunnen worden van bestanden op schijf die geen context hebben, en ze worden in het algemeen onbereikbaar gehouden voor beperkte domeinen. Als je een nieuwe top-niveau map aanmaakt, zoals /mijnmap/, zal deze misschien gelabeld worden met het default_t type. Als services toegang nodig hebben naar zo'n map, vernieuw dan de bestandscontext voor deze loocatie. Refereer naar Paragraaf 5.7.2, “Permanente veranderingen: semanage fcontext” voor details over het toevoegen van een context aan de bestandscontext configuratie.
mount -o context commando om bestaande uitgebreide attributen ter zijde te schuiven, of om een andere, standaard context op te geven voor bestandssystemen die geen uitgebreide attributen ondersteunen. Dit is nuttig als je niet vertrouwt dat een bestandssysteem de juiste attriburen levert, bijvoorbeeld, verwijderbare media gebruikt in meerdere systemen. Het mount -o context commando kan ook gebruikt worden om labeling te ondersteunen voor bestandssystemen die geen uitgebreide attributen ondersteunen, zoals de File Allocation Table (FAT) of NFS bestandssystemen. De context opgegeven met de context optie wordt niet naar schijf geschreven, de originele context blijft bewaard, en kan gezien worden door aan te koppelen zonder een context optie (als het bestandssysteem om te beginnen uitgebreide attributen heeft).
mount -o context=SELinux_user:role:type:level commando om het gewenste bestandssysteem aan te koppelen. Context veranderingen worden niet naar schijf geschreven. Standaard worden NFS aankoppelingen op de client zijde gelabeld met een standaard context gedefinieerd door tactiek voor NFS bestandssystemen. In algemene tactieken gebruikt deze standaard context het nfs_t type. Zonder extra aankoppel opties, kan dit het delen van NFS bestandssytemen via andere services beletten, zoals de Apache HTTP server. Het volgende voorbeeld koppelt een NFS bestandssysteem zodanig aan dat het gedeeld kan worden via de Apache HTTP server:
# mount server:/export /local/mount/point -o\ context="system_u:object_r:httpd_sys_content_t:s0"
-o context optie; omdat echter de context veranderingen niet naar schijf geschreven worden in deze situaties, wordt de context opgegeven met de context optie alleen vastgehouden als de context optie wordr gebruikt bij de volgende aankoppeling, en als dezelfde context wordt opgegeven.
-o context optie, gebruik dan de SELinux system_u gebruiker en de object_r rol, en concentreer je op het type. Als je de MLS tactiek of multi-categorie beveiliging niet gebruikt, gebruik je het s0 niveau.
context optie, zijn context veranderingen (door gebruikers en processen) verboden. Bijvoorbeeld, het uitvoeren van chcon op een bestandssysteem aangekoppeld met een context optie resulteert in een Operation not supported fout.
file_t type. Als het wenselijk is om een andere standaard context te gebruiken, koppel dan het bestandssysteem aan met de defcontext optie.
/dev/sda2) aan naar de nieuw aangemaakte /test/ map. Het veronderstelt dat er geen regels zijn in /etc/selinux/targeted/contexts/files/ die een context definieren voor de /test/ map:
# mount /dev/sda2 /test/ -o defcontext="system_u:object_r:samba_share_t:s0"
defcontext optie definieert dat system_u:object_r:samba_share_t:s0 "de standaard beveiligingscontext voor niet gelabelde bestanden"[12] is.
/test/) van het bestandssysteem behandeld alsof het is gelabeld met de context opgegeven door defcontext (dit label wordt niet op schijf bewaard). Dit heeft gevolgen voor het labelen van bestanden die in /test/ aangemaakt worden: nieuwe bestanden erven het samba_share_t type en deze labels worden op schijf bewaard.
/test/ terwijl het bestandssysteem was aangekoppeld met een defcontext optie houden hun labels vast.
nfs_t type. Alfhankelijk van de tactiek instelling, zullen services, zoals de Apache HTTP server en MySQL, misschien niet in staat zijn om bestanden te lezen die gelabeld zijn met het nfs_t type. Dit kan verhinderen dat bestandssystemen die met dit type gelabeld zijn aangekoppeld worden en daarna gelezen of geexporteerd door andere services.
context optie tijdens het aankoppelen om het nfs_t type terzijde te schuiven. Gebruik de volgende context optie om NFS bestandssystemen aan te koppelen zodat ze gedeeld kunnen worden via de Apache HTTP server:
mount server:/export /local/mount/point -o\ context="system_u:object_r:httpd_sys_content_t:s0"
context optie alleen behouden als de context optie wordt gebruikt tijdens de volgende aankoppeling, en als dezelfde context wordt opgegeven.
context opties, kunnen Booleans aangezet worden om services toe te staan om toegang te hebben tot bestandssystemen gelabeld met het nfs_t type. Refereer naar Paragraaf 5.6.3, “Booleans voor NFS en CIFS” voor instructies over het instellen van Booleans om services toegang te geven tot het nfs_t type.
/export, welke twee submappen heeft, web/ en database/. De volgende commando's proberen twee aankoppelingen te maken van een enkele NFS export, en proberen iedere keer de context terzijde te schuiven:
# mount server:/export/web /local/web -o\ context="system_u:object_r:httpd_sys_content_t:s0" # mount server:/export/database /local/database -o\ context="system_u:object_r:mysqld_db_t:s0"
/var/log/messages geschreven:
kernel: SELinux: mount invalid. Same superblock, different security settings for (dev 0:15, type nfs)
-o nosharecache,context opties. Het volgende voorbeeld koppelt meerdere aankoppelingen voor een enkele NFS export, met een andere context voor iedere aankoppeling (wat een enkele service toestaat om toegang tot iedere te hebben):
# mount server:/export/web /local/web -o\ nosharecache,context="system_u:object_r:httpd_sys_content_t:s0" # mount server:/export/database /local/database -o\ nosharecache,context="system_u:object_r:mysqld_db_t:s0"
server:/export/web locaal aangekoppeld naar /local/web/, waarbij alle bestanden gelabeld worden met het httpd_sys_content_t type, wat Apache HTTP server toegang toestaat. server:/export/database wordt locaal aangekoppeld naar /local/database, waarbij alle bestanden gelabeld worden met het mysqld_db_t type, wat MySQL toegang toestaat. Deze veranderingen worden niet naar schijf geschreven.
nosharecache opties laten je dezelfde submap van een export meerdere keren aankoppelen met verschillende contexten (bijvoorbeeld, het meerdere keren aankoppelen van /export/web). Koppel dezelfde submap van een export niet meerdere keren aan met verschillende contexten, omdat dit een overlappende aankoppeling maakt, waarbij bestanden bereikbaar zijn met twee verschillende contexten.
/etc/fstab of een automounter map, en gebruik de gewenste context als een aankoppel optie. Het volgende voorbeeld voegt een regel toe aan /etc/fstab voor een NFS context aankoppeling:
server:/export /local/mount/ nfs context="system_u:object_r:httpd_sys_content_t:s0" 0 0
user_home_t type:
$ touch file1 $ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
/etc/, wordt het nieuwe bestand aangemaakt overeenkomstig de standaard labelingsregels voor de /etc/ map. Een bestand kopiëren (zonder extra opties) hoeft de originele context niet te behouden:
$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 # cp file1 /etc/ $ ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
file1 gekopieerd wordt naar /etc/, en als /etc/file1 niet bestaat, wordt /etc/file1 aangemaakt als een nieuw bestand. Zoals in het voorbeeld hierboven is getoond, wordt /etc/file1 gelabeld met het etc_t type, overeenkomstig de standaard labelingsregels.
cp opties op heeft gegeven om de context van het originele bestand te behouden, zoals --preserve=context. SELinux tactiek kan beletten dat contexten behouden blijven tijdens het kopiëren.
cp commando, en er worden geen opties meegegeven, wordt het type geerfd van de doel, ouders map:
$ touch file1 $ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 $ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ # cp file1 /var/www/html/ $ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file1
file1 aangemaakt in de persoonlijke map van de gebruiker, en wordt gelabeld met het user_home_t type. De /var/www/html/ map is gelabeld met het httpd_sys_content_t type, zoals getoond met het ls -dZ /var/www/html/ commando. Als file1 wordt gekopieerd naar /var/www/html/, erft het het httpd_sys_content_t type, zoals het ls -Z /var/www/html/file1 commando laat zien.
cp --preserve=context commando om de context te behouden tijdens het kopiëren:
$ touch file1 $ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 $ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/ # cp --preserve=context file1 /var/www/html/ $ ls -Z /var/www/html/file1 -rw-r--r-- root root unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
file1 aangemaakt in de persoonlijke map van de gebruiker, en wordt gelabeld met het user_home_t type. De /var/www/html/ map is gelabeld met het httpd_sys_content_t type, zoals het ls -dZ /var/www/html/ coomado laat zien. Het gebruik van de --preserve=context optie behoudt de SELinux context tijdens het kopiëren. Zoals het ls -Z /var/www/html/file1 commando laat zien is het user_home_t type van file1 behouden toen het bestand gekopieerd werd naar /var/www/html/.
cp -Z commando om de context van de doel kopie te veranderen. Het volgende voorbeeld is uitgevoerd in de persoonlijke map van de gebruiker:
$ touch file1 $ cp -Z system_u:object_r:samba_share_t:s0 file1 file2 $ ls -Z file1 file2 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1 -rw-rw-r-- user1 group1 system_u:object_r:samba_share_t:s0 file2 $ rm file1 file2
-Z optie. Zonder de -Z optie, zou file2 gelabeld zijn met de unconfined_u:object_r:user_home_t context.
# touch /etc/file1 # ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1 # touch /tmp/file2 # ls -Z /tmp/file2 -rw-r--r-- root root unconfined_u:object_r:user_tmp_t:s0 /tmp/file2 # cp /tmp/file2 /etc/file1 # ls -Z /etc/file1 -rw-r--r-- root root unconfined_u:object_r:etc_t:s0 /etc/file1
/etc/file1, gelabeld met het etc_t type, en /tmp/file2, gelabeld met het user_tmp_t type. Het cp /tmp/file2 /etc/file1 commando overschrijft file1 met file2. Na het kopiëren, laat het ls -Z /etc/file1 zien dat file1 gelabeld is met het etc_t type, niet het user_tmp_t type van /tmp/file2 welke /etc/file1 heeft vervangen.
/var/www/html/, welke gebruikt wordt door de Apache HTTP server. Omdat het bestand is verplaatst, erft het niet de juiste SELinux context:
cd commando uit zonder argumenten om naar je persoonlijke map te gaan. Als je daar bent, voer je het touch file1 commando uit om een bestand aan te maken. Dit bestand is gelabeld met het user_home_t type:
$ ls -Z file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 file1
ls -dZ /var/www/html/ commando uit om de SELinux context van de /var/www/html/ map te zien:
$ ls -dZ /var/www/html/ drwxr-xr-x root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
/var/www/html/ map gelabeld met het httpd_sys_content_t type. Bestanden en mappen aangemaakt in de /var/www/html/ map erven dit type, en dus zijn ze ermee gelabeld.
mv file1 /var/www/html/ commando uit om file1 te verplaatsen naar de /var/www/html/ map. Omdat het bestand is verplaatst behoudt het zijn huidige user_home_t type:
# mv file1 /var/www/html/ # ls -Z /var/www/html/file1 -rw-rw-r-- user1 group1 unconfined_u:object_r:user_home_t:s0 /var/www/html/file1
user_home_t type. Als alle bestanden die een web pagina vormen gelabeld zijn met het user_home_t type, of een ander type dat de Apache HTTP server niet kan lezen, wordt toegang geweigerd als je probeert ze te benaderen met Firefox of op tekst gebaseerde webbrowsers.
mv commando kan een verkeerde SELinux context tot gevolg hebben, en processen, zoals de Apache HTTP server en Samba, beletten om toegang te krijgen tot die bestanden en mappen.
/usr/sbin/matchpathcon commando om te controleren of bestanden en mappen de juiste SELinux context hebben. Van de matchpathcon(8) manual pagina: "matchpathcon ondervraagt de systeem tactiek en levert de standaard beveiligings context behorend bij het bestandspad."[13]. Het volgende voorbeeld laat het gebruik van het /usr/sbin/matchpathcon commando zien om te bevestigen dat bestanden in de /var/www/html/ map correct gelabeld zijn:
touch /var/www/html/file{1,2,3} commando uit om drie bestanden (file1, file2, en file3) aan te maken. Deze bestanden erven het httpd_sys_content_t type van de /var/www/html/ map:
# touch /var/www/html/file{1,2,3}
# ls -Z /var/www/html/
-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
chcon -t samba_share_t /var/www/html/file1 commando uit om het type van file1 te veranderen naar samba_share_t. Merk op: de Apache HTTP server kan geen bestanden of mappen lezen die gelabeld zijn met het samba_share_t type.
/usr/sbin/matchpathcon -V optie vergelijkt de huidige SELinux contect met de juiste, standaard context in SELinux tactiek. Voer het /usr/sbin/matchpathcon -V /var/www/html/* commando uit om alle bestanden in de /var/www/html/ map te controleren:
$ /usr/sbin/matchpathcon -V /var/www/html/* /var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2 verified. /var/www/html/file3 verified.
/usr/sbin/matchpathcon commando legt uit dat file1 is gelabeld met het samba_share_t type, maar het zou gelabeld moeten zijn met het httpd_sys_content_t type:
/var/www/html/file1 has context unconfined_u:object_r:samba_share_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
file1, voer je als de Linux root gebruiker het /sbin/restorecon -v /var/www/html/file1 commando uit:
# /sbin/restorecon -v /var/www/html/file1 restorecon reset /var/www/html/file1 context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
tar behoudt standaard geen uitgebreide attributen. Omdat SELinux context bewaard wordt in uitgebreide attributen, kan de context verloren raken als bestanden gearchiveerd worden. Gebruik tar --selinux om archieven te maken die de context behouden. Als een Tar archief bestanden zonder uitgebreide attributen bevat, of je wilt dat de uitgebreide attributen overeenkomen met de systeemstandaard, voer het archiveren dan uit met /sbin/restorecon:
$ tar -xvf archive.tar | /sbin/restorecon -f -
/sbin/restorecon commando uit te voeren.
touch /var/www/html/file{1,2,3} commando uit om drie bestanden (file1, file2, en file3) aan te maken. Deze bestanden erven het httpd_sys_content_t type van de /var/www/html/ map:
# touch /var/www/html/file{1,2,3}
# ls -Z /var/www/html/
-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
cd /var/www/html/ commando uit om naar de /var/www/html/ map te gaan. Als je in die map bent, voer je als de Linux root gebruiker het tar --selinux -cf test.tar file{1,2,3} uit om een Tar archief met de naam test.tar te maken.
mkdir /test commando uit om een nieuwe map aan te maken, en daarna voer je het chmod 777 /test/ commando uit om alle gebruikers volledige toegang tot de /test/ map te geven.
cp /var/www/html/test.tar /test/ commando uit om het test.tar bestand naar de /test/ map te kopiëren.
cd /test/ comando uit om naar de /test/ map te gaan. Als je in die map bent, voer je het tar -xvf test.tar commando uit om het Tar archief uit te pakken.
ls -lZ /test/ commando uit om de SELinux context te bekijken. Het httpd_sys_content_t type is behouden gebleven, in plaats van veranderd te zijn naar default_t, wat gebeurt zou zijn als de --selinux optie niet gebruikt was:
$ ls -lZ /test/ -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3 -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.tar
/test/ map niet langer nodig is, voer je als de Linux root gebruiker het rm -ri /test/ commando uit om het te verwijderen te samen met de bestanden er in.
tar, zoals de --xattrs optie die alle uitgebreide attributen behoudt.
star behoudt standaard geen uitgebreide attributen. Omdat SELinux context bewaard wordt in uitgebreide attributen, kan de context verloren gaan als de bestanden gearchiveerd worden. Gebruik star -xattr -H=exustar om archieven te maken die context behouden. Het star pakket is standaard niet geinstalleerd. Om star te installeren, voer je als de Linux root gebruiker het yum install star commando uit.
touch /var/www/html/file{1,2,3} commando uit om drie bestanden (file1, file2, en file3) aan te maken. Deze bestanden erven het httpd_sys_content_t type van de /var/www/html/ map:
# touch /var/www/html/file{1,2,3}
# ls -Z /var/www/html/
-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
cd /var/www/html/ commando uit om naar de /var/www/html/ map te gaan. Als je in die map bent, voer je als de Linux root gebruiker het star -xattr -H=exustar -c -f=test.star file{1,2,3} commando uit om een Star archief met de naam test.star te maken:
# star -xattr -H=exustar -c -f=test.star file{1,2,3}
star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
mkdir /test commando uit om een nieuwe map aan te maken, en daarna voer je het chmod 777 /test/ commando uit om alle gebruikers volledige toegang tot de /test/ map te geven.
cp /var/www/html/test.star /test/ commando uit om het test.star bestand te kopiëren naar de /test/ map.
cd /test/ commando uit om naar de /test/ map te gaan. Als je in die map bent, voer je het star -x -f=test.star commando uit om het Star archief uit te pakken:
$ star -x -f=test.star star: 1 blocks + 0 bytes (total of 10240 bytes = 10.00k).
ls -lZ /test/ commando uit om de SELinux context te bekijken. Het httpd_sys_content_t type is behouden gebleven, in plaats van veranderd te zijn naar default_t, wat gebeurt zou zijn als de --selinux optie niet gebruikt was:
$ ls -lZ /test/ -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file1 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file2 -rw-r--r-- user1 group1 unconfined_u:object_r:httpd_sys_content_t:s0 file3 -rw-r--r-- user1 group1 unconfined_u:object_r:default_t:s0 test.star
/test/ map niet langer nodig is, voer je als de Linux root gebruiker het rm -ri /test/ commando uit om het te verwijderen te samen met de bestanden er in.
star niet langer nodig is, voer je als de Linux root gebruiker het yum remove star commando uit om het pakket te verwijderen.
star.
[8] Brindle, Joshua. "Re: blurb for fedora setools packages" Email aan Murray McAllister. 1 November 2008. Elke bewerking en verandering in deze versie is gedaan door Murray McAllister.
[9] Managing Software with yum, geschreven door Stuart Ellis, bewerkt door Paul W. Frields, Rodrigo Menezes, en Hugo Cisneiros.
[10] Refereer naar http://en.wikipedia.org/wiki/Runlevel voor informatie over runlevels.
[11]
Bestanden in /etc/selinux/targeted/contexts/files/ definieren context voor bestanden en mappen. Bestanden in deze map worden gelezen door restorecon en setfiles om bestanden en mappen te herstellen naar hun standaard context.
[12] Morris, James. "Filesystem Labeling in SELinux". Published 1 October 2004. Accessed 14 October 2008: http://www.linuxjournal.com/article/7426.
[13] De matchpathcon(8) manual pagina, zoals verstuurd met het libselinux-utils pakket Fedora, is geschreven door Daniel Walsh. Alle bewerkingen of veranderingen in deze versie zijn gemaakt door Murray McAllister.
su en sudo commando's uit te voeren om de Linux root gebruiker te worden. Dit helpt om het systeem te beschermen tegen de gebruiker. Refereer naar Paragraaf 4.3, “Beperkte en onbeperkte gebruikers” voor meer informatie over beperkte gebruikers in Fedora 11.
semanage login -l commando uit om de afbeelding van Linux gebruikers op SELinux gebruikers te zien:
# /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
__default__ (welke is afgebeeld op de SELinux unconfined_u gebruiker). Als een Linux gebruiker wordt aangemaakt met het useradd commando, worden ze afgebeeld op de SELinux unconfined_u gebruiker indien er geen opties zijn opgegeven. Het volgende definieert de standaard afbeelding:
__default__ unconfined_u s0-s0:c0.c1023
unconfined_u gebruiker draaien in het unconfined_t domein. Dit kan getoond worden door het uitvoeren van het id -Z commando terwijl je ingelogd bent als een Linux gebruiker afgebeeld op unconfined_u:
$ id -Z unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
unconfined_t domein draaien, worden SELinux tactiekregels toegepast, maar er bestaan tactiekregels die Linux gebruikers die in het unconfined_t domein draaien bijna alle toegang toestaan. Als onbeperkte Linux gebruikers een toepassing uitvoeren waarvan de SELinux tactiek definieert dat het kan overgaan van het unconfined_t domein naar zijn eigen beperkte domein, zijn onbeperkte Linux gebruikers nog steeds onderworpen aan de beperkingen van het beperkte domein. Het beveiligings voordeel hiervan is dat, zelfs als een Linux gebruiker onbeperkt draait, de toepassing beperkt blijft, en dat daardoor de uitbuiting van een fout in de toepassing beperkt kan worden door tactiek. Merk op: dit beschermt het systeem niet tegen de gebruiker. In plaats daarvan worden de gebruiker en het systeem beschermd tegen mogelijke schade veroorzaakt door een fout in de toepassing.
useradd, gebruik je de -Z optie om op te geven op welke SELinux gebruiker ze afgebeeld worden. Het volgende voorbeeld maakt een nieuwe Linux gebruiker aan, useruuser, en beeldt die gebruiker af op de SELinux user_u gebruiker. Linux gebruikers afgebeeld op de SELinux user_u gebruiker draaien in het user_t domein. In dit domein zijn Linux gebruikers niet in staat om setuid toepassingen te draaien tenzij SELinux tactiek dit toestaat (zoals passwd), en kunnen ze su of sudo niet uitvoeren, wat hen tegenhoudt om met deze commando's de Linux root gebruiker te worden.
/usr/sbin/useradd -Z user_u useruuser commando uit om een nieuwe Linux gebruiker (useruuser) aan te maken die afgebeeld wordt op de SELinux user_u gebruiker.
semanage login -l commando uit om de afbeelding van de Linux useruuser gebruiker op user_u te zien:
# /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 useruuser user_u s0
passwd useruuser commando uit om een wachtwoord toe te kennen aan de Linux useruuser gebruiker:
# passwd useruuser Changing password for user useruuser. New UNIX password:Enter a passwordRetype new UNIX password:Enter the same password againpasswd: all authentication tokens updated successfully.
user_u), en stelt de bijbehorende SELinux context in. De shell van de Linux gebruiker wordt dan opgestart met deze context. Voer het id -Z commando uit om de context van een Linux gebruiker te bekijken:
[useruuser@localhost ~]$ id -Z user_u:user_r:user_t:s0
/usr/sbin/userdel -r useruuser commando uit als de Linux root gebruiker om het te verwijderen te samen met zijn persoonlijke map.
unconfined_u gebruiker (het standaard gedrag), en je wilt de SELinux gebruiker waarop ze afgebeeld zijn veranderen, gebruik je het semanage login commando. Het volgende voorbeeld maakt een nieuwe Linux gebruiker aan met de naam newuser, en beeldt dan die Linux gebruiker af op de SELinux user_u gebruiker:
/usr/sbin/useradd newuser commando uit om een nieuwe Linux gebruiker (newuser) aan te maken. Omdat deze gebruiker de standaard afbeelding gebruikt, verschijnt deze niet in de de /usr/sbin/semanage login -l output:
# /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
user_u gebruiker, voer je het volgende commando uit als de Linux root gebruiker:
/usr/sbin/semanage login -a -s user_u newuser
-a optie voegt een nieuwe aantekening toe, en de -s optie specificeert de SELinux gebruiker waarop de Linux gebruiker afgebeeld wordt. Het laatse argument, newuser, is de Linux gebruiker die je wilt afbeelden op de opgegeven SELinux gebruiker.
user_u te bekijken, voer je het semanage login -l commando uit als de Linux root gebruiker:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ unconfined_u s0-s0:c0.c1023 newuser user_u s0 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
passwd newuser command to assign a password to the Linux newuser user:
# passwd newuser Changing password for user newuser. New UNIX password:Enter a passwordRetype new UNIX password:Enter the same password againpasswd: all authentication tokens updated successfully.
id -Z commando uit om de SELinux context van newuser te bekijken:
[newuser@rlocalhost ~]$ id -Z user_u:user_r:user_t:s0
userdel -r newuser commando uit als de Linux root gebruiker om het te verwijderen, te samen met zijn persoonlijke map. Ook de afbeelding van de Linux newuser gebruiker op user_u wordt verwijderd:
# /usr/sbin/userdel -r newuser # /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
__default__ login (welke afgebeeld wordt op de SELinux unconfined_u gebruiker). Als je nieuwe Linux gebruikers, en Linux gebruikers die niet specifiek afgebeeld zijn op een SELinux gebruiker, standaard wilt instellen om beperkt te zijn, verander je de standaard afbeelding met het semanage login commando.
unconfined_u naar user_u:
/usr/sbin/semanage login -m -S targeted -s "user_u" -r s0 __default__
semanage login -l commando uit als de Linux root gebruiker om te bevestigen dat de __default__ login is afgebeeld op user_u:
# /usr/sbin/semanage login -l Login Name SELinux User MLS/MCS Range __default__ user_u s0 root unconfined_u s0-s0:c0.c1023 system_u system_u s0-s0:c0.c1023
semanage login -l output, worden ze afgebeeld op user_u, via de __default__ login.
__default__ login af te beelden op de SELinux unconfined_u gebruiker:
/usr/sbin/semanage login -m -S targeted -s "unconfined_u" -r\ s0-s0:c0.c1023 __default__
yum install xguest commando uit om het xguest pakket te installeren. Installeer ook de benodigde afhankelijkheden.
getenforce commando om er zeker van te zijn dat SELinux in de afdwingende modus draait:
$ /usr/sbin/getenforce Enforcing
Guest account toegevoegd aan GDM. Om in te loggen klik je op het Guest account:

/tmp/, waarnaar ze schrijfrechten hebben, helpt om te voorkomen van foutieve of kwaadwillige toepassingen bestanden veranderen waarvan de gebruiker eigenaar is. In Fedora 11 kunnen Linux gebruikers in de guest_t en xguest_t domeinen standaard geen toepassingen in hun persoonlijke mappen of in /tmp/; Linux gebruikers in de user_t en staff_t domeinen kunnen dit echter wel.
setsebool commando. Het setsebool commando moet uitgevoerd worden als de Linux root gebruiker. Het setsebool -P commando maakt de veranderingen blijvend. Geruik de -P optie niet als je niet wilt dat veranderingen blijvend zijn na een nieuwe systeem opstart:
guest_t domein toe te staan toepassingen uit te voeren in hun persoonlijke mappen en /tmp/:
/usr/sbin/setsebool -P allow_guest_exec_content on
xguest_t domein toe te staan om toepassingen uit te voeren in hun persoonlijke mappen en /tmp/:
/usr/sbin/setsebool -P allow_xguest_exec_content on
user_t domein te beletten om toepassingen uit te voeren in hun persoonlijke mappen en /tmp/:
/usr/sbin/setsebool -P allow_user_exec_content off
staff_t domein te beletten toepassingen uit te voeren in hun persoonlijke mappen en /tmp/:
/usr/sbin/setsebool -P allow_staff_exec_content off
audit2allow.
| Daemon | Log Location |
|---|---|
| auditd on | /var/log/audit/audit.log |
| auditd off; rsyslogd on | /var/log/messages |
| setroubleshootd, rsyslogd, and auditd on | /var/log/audit/audit.log. Easier-to-read denial messages also sent to /var/log/messages |
setroubleshootd en auditd daemons draaien, dan worden een gele ster en een waarschuwing getoond als toegang wordt geweigerd door SELinux:

Forbidden
You don't have permission to access file name on this server
/var/log/messages en /var/log/audit/audit.log voor respectievelijk "SELinux is preventing" en "denied" fouten. Dit kan gedaan worden met het uitvoeren van de volgende commando's als de Linux root gebruiker:
grep "SELinux is preventing" /var/log/messages
grep "denied" /var/log/audit/audit.log
/var/www/html/ voor een website, wil een beheerder /srv/myweb/ gebruiken. In Fedora 11 is de /srv/ map gelabeld met het var_t type. Bestanden en mappen aangemaakt in /srv/ erven dit type. Ook kunnen nieuw aangemaakte top-niveau mappen (zoals /myserver/) gelabeld zijn met het default_t type. SELinux belet de Apache HTTP server (httpd) toegang tot beide deze types. Om toegang toe te staan, moet SELinux weten dat de bestanden in /srv/myweb/ toegankelijk moeten zijn voor httpd:
# /usr/sbin/semanage fcontext -a -t httpd_sys_content_t \ "/srv/myweb(/.*)?"
semanage commando voegt de context voor de /srv/myweb/ map (en alle bestanden en mappen er in) toe aan de SELinux bestandscontext configuratie[14]. Het semanage commando verandert de context niet. Als de Linux root gebruiker voer je het restorecon commando uit om de veranderingen toe te passen:
# /sbin/restorecon -R -v /srv/myweb
matchpathcon commando controleert de context van een bestandspad en vergelijkt het met het standaard label voor dat pad. Het volgende voorbeeld laat het gebruik van matchpathcon zien voor een map die verkeerd gelabelde bestanden bevat:
$ /usr/sbin/matchpathcon -V /var/www/html/* /var/www/html/index.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0 /var/www/html/page1.html has context unconfined_u:object_r:user_home_t:s0, should be system_u:object_r:httpd_sys_content_t:s0
index.html en page1.html bestanden gelabeld met het user_home_t type. Dit type wordt gebruikt voor bestanden in persoonlijke mapen van gebruikers. Het gebruik van het mv commando om bestanden te verplaatsen vanuit je persoonlijke map kan als gevolg hebben dat de bestanden gelabeld zijn met het user_home_t type. Dit type moet niet bestaan buiten persoonlijke mappen. Gebruik het restorecon commando om het correcte type van zulke bestanden te herstellen:
# /sbin/restorecon -v /var/www/html/index.html restorecon reset /var/www/html/index.html context unconfined_u:object_r:user_home_t:s0->system_u:object_r:httpd_sys_content_t:s0
-R optie:
# /sbin/restorecon -R -v /var/www/html/ restorecon reset /var/www/html/page1.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0 restorecon reset /var/www/html/index.html context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:httpd_sys_content_t:s0
matchpathcon.
semanage commando.
httpd_can_network_connect_db Boolean aan:
# /usr/sbin/setsebool -P httpd_can_network_connect_db on
getsebool en grep commando's om te zien of er Booleans beschikbaar zijn die toegang toestaan. Bijvoorbeeld, gebruik het getsebool -a | grep ftp commando om te zoeken naar Booleans gerelateerd met FTP:
$ /usr/sbin/getsebool -a | grep ftp allow_ftpd_anon_write --> off allow_ftpd_full_access --> off allow_ftpd_use_cifs --> off allow_ftpd_use_nfs --> off ftp_home_dir --> off httpd_enable_ftp_server --> off tftp_anon_write --> off
/usr/sbin/getsebool -a commando uit. Voor een lijst met Booleans, en uitleg over wat ieder is, en of ze aan of uit zijn, voer je het /usr/sbin/semanage boolean -l commando uit als de Linux root gebruiker. Refereer naar Paragraaf 5.6, “Booleans” voor informatie over het tonen en instellen van Booleans.
semanage port -l | grep http commando uit als de Linux root gebruiker om een lijst te zien van de aan http gerelateerde poorten:
# /usr/sbin/semanage port -l | grep http http_cache_port_t tcp 3128, 8080, 8118 http_cache_port_t udp 3130 http_port_t tcp 80, 443, 488, 8008, 8009, 8443 pegasus_http_port_t tcp 5988 pegasus_https_port_t tcp 5989
http_port_t poort type definieert de poorten waarnaar de Apache HTTP server kan luisteren, welke in dit geval zijn, de TCP poorten 80, 443, 488, 8008, 8009, en 8443. Als een beheerder httpd.conf zodanig instelt dat httpd luistert op poort 9876 (Listen 9876), maar tactiek is niet vernieuwd om dit te weten, zal het service httpd start commando falen:
# /sbin/service httpd start
Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:9876
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:9876
no listening sockets available, shutting down
Unable to open logs
[FAILED]
/var/log/audit/audit.log:
type=AVC msg=audit(1225948455.061:294): avc: denied { name_bind } for pid=4997 comm="httpd" src=9876 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket
httpd toe te staan te luisteren op een poort dat niet getoond wordt voor het http_port_t poort type, voer je het semanage port commando uit om een poort toe te voegen aan de tactiek configuratie[15]:
# /usr/sbin/semanage port -a -t http_port_t -p tcp 9876
-a optie voegt een nieuwe aantekening toe, de -t optie definieert een type, en de -p option definieert een protocol. Het laatste argument is het poortnummer dat toegevoegd moet worden.
audit2allow om een aangepaste tactiek module te maken om toegang toe te staan. Refereer naar Paragraaf 7.3.8, “Toegang toestaan: audit2allow” voor informatie over het gebruik van audit2allow.
audit2allow.
ls -l commando om de standaard Linux rechten te zien:
$ ls -l /var/www/html/index.html -rw-r----- 1 root root 0 2009-05-07 11:06 index.html
index.html. De root gebruiker heeft lees en schrijf rechten (-rw), en leden van de root groep hebben lees rechten (-r-). Alle anderen hebben geen toegang (---). Standaard laten zulke rechten niet toe dat httpd dit bestand leest. Om dit op te lossen, gebruik je het chown commando om de eigenaar en de groep te veranderen. Dit commando moet uitgevoerd worden als de Linux root gebruiker:
# chown apache:apache /var/www/html/index.html
httpd draait als de Linux apache gebruiker. Als je httpd draait met een andere gebruiker, vervang je apache:apache met die gebruiker.
dontaudit regels. Deze regels komen veel voor in standaard tactiek. Het nadeel van dontaudit is dat, hoewel SELinux toegang weigert, weigeringsboodschappen niet worden gelogd, wat het foutzoeken moeilijk maakt.
dontaudit regels uit te zetten, zodat alle weigeringen gelogd worden, voer je het volgende commando uit als de Linux root gebruiker:
/usr/sbin/semodule -DB
-D zet dontaudit regels uit; de -B optie bouwt de tactiek opnieuw op. Na het uitvoeren van semodule -DB, probeer je de toepassing opnieuw die toestemmigs problemen vertoonde, en kijk of er nu SELinux weigeringen — relevant voor de toepassing — zijn gelogd. Wees voorzichtig met het beslissen welke weigeringen toegestaan moeten worden, omdat sommige genegeerd moeten worden en afgehandeld met dontaudit regels. In geval van twijfel, of als je hulp zoekt, neem dan contact op met andere SELinux gebruikers en ontwikkelaars op een SELinux lijst, zoals fedora-selinux-list.
dontaudit regels weer aan te zetten, voer je het volgende commando uit als de Linux root gebruiker:
/usr/sbin/semodule -B
dontaudit regels, voer je het sesearch --dontaudit commando uit. Versmal het zoeken met gebruik van de -s domein optie en het grep commando. Bijvoorbeeld:
$ sesearch --dontaudit -s smbd_t | grep squid WARNING: This policy contained disabled aliases; they have been removed. dontaudit smbd_t squid_port_t : tcp_socket name_bind ; dontaudit smbd_t squid_port_t : udp_socket name_bind ;
httpd). Deze informatie kan in de standaard manual pagina zijn, of in een manual pagina met selinux voor of achter de servicenaam.
samba_share_t type, en ook Booleans die toestaan dat bestanden gelabeld met andere types dan samba_share_t met Samba geexporteerd kunnen worden.
nfs_export_all_ro of nfs_export_all_rw aangezet moeten worden.
Red Hat SELinux BIND Security Profile paragraaf). De named_selinux(8) manual pagina beschrijf dat named standaard niet naar master zone bestanden kan schrijven, en om deze toegang toe te staan, de named_write_master_zones Boolean aangezet moet worden.
domain_disable_trans Booleans beschikbaar om een toepassing te beletten om over te gaan naar een beperkt domein, en daarom draait het proces in een onbeperkt domein, zoals initrc_t. Het aanzetten van zulke Booleans kan grote problemen veroorzaken. Bijvoorbeeld, als de httpd_disable_trans Boolean aangezet is:
httpd in het onbeperkte initrc_t domein. Bestanden gemaakt door processen die in het initrc_t domein draaien hebben misschien niet dezelfde labelingsregels toegepast gekregen als bestanden die draaien in het httpd_t domein, wat potentieel toestaat dat processen verkeerd gelabelde bestanden maken. Dit veroorzaakt later toegangs problemen.
httpd_t kunnen niet communiceren met initrc_t, wat potentieel extra fouten veroorzaakt.
domain_disable_trans Booleans zijn verwijderd in Fedora 7, hoewel er geen vervanger voor was. Toelatende domeinen lossen de hierboven beschreven problemen op: overgangs regels worden toegepast, en bestanden worden aangemaakt met de juiste labels.
audit2allow kon daarna gebruikt worden om te helpen met het schrijven van de tactiek. Dit maakte het gehele systeem kwetsbaar. Met toelatende domeinen, wordt alleen het domein in de nieuwe tactiek toelatend, zonder het hele systeem kwetsbaar te maken.
semanage permissive -a domein commando uit, waarin domein het domein is dat je toelatend wilt maken. Bijvoorbeeld, voer het volgende commando uit als de Linux root gebruiker om het httpd_t domein (het domein waarin de Apache HTTP sever draait) toelatend te maken:
/usr/sbin/semanage permissive -a httpd_t
semodule -l | grep permissive commando uit als de Linux root gebruiker. Bijvoorbeeld:
# /usr/sbin/semodule -l | grep permissive permissive_httpd_t 1.0
semanage permissive -d domein commando uit als de Linux root gebruiker. Bijvoorbeeld:
/usr/sbin/semanage permissive -d httpd_t
SYSCALL boodschap is verschillend voor toelatende domeinen. Het volgende is een voorbeeld AVC weigering ( en de bijbehorende systeem aanroep) van de Apache HTTP server:
type=AVC msg=audit(1226882736.442:86): avc: denied { getattr } for pid=2427 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882736.442:86): arch=40000003 syscall=196 success=no exit=-13 a0=b9a1e198 a1=bfc2921c a2=54dff4 a3=2008171 items=0 ppid=2425 pid=2427 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
httpd_t domein niet toelatend, en daarom wordt de actie geweigerd, en de SYSCALL boodschap bevat success=no. Het volgende is een voorbeeld AVC weigering voor dezelfde actie, behalve dat het semanage permissive -a httpd_t commando is uitgevoerd om het httpd_t domein toelatend te maken:
type=AVC msg=audit(1226882925.714:136): avc: denied { read } for pid=2512 comm="httpd" name="file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226882925.714:136): arch=40000003 syscall=5 success=yes exit=11 a0=b962a1e8 a1=8000 a2=0 a3=8000 items=0 ppid=2511 pid=2512 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
success=yes in de SYSCALL boodschap.
auditd, rsyslogd, en setroubleshootd daemons draaien. Refereer naar Paragraaf 5.2, “Welk log bestand wordt gebruikt” voor informatie over het starten van deze daemons. Een aantal gereedschappen zijn beschikbaar voor het zoeken naar en bekijken van SELinux weigeringen, zoals ausearch, aureport, en sealert.
ausearch. Uit de ausearch(8) manual pagina: "ausearch is een gereedschap dat de daemon logs kan onderzoeken voor gebeurtenissen gebaseerd op verscheidene zoek criteria"[16]. Het ausearch gereedschap heeft toegang tot /var/log/audit/audit.log, en moet daarom als de Linux root gebruiker uitgevoerd worden:
| Zoeken naar | Commando |
|---|---|
| alle weigeringen | /sbin/ausearch -m avc |
| weigeringen voor vandaag | /sbin/ausearch -m avc -ts today |
| weigeringen van de laatste 10 minuten | /sbin/ausearch -m avc -ts recent |
-c comm-naam optie, waarin comm-naam de naam van het programma is[17], bijvoorbeeld, httpd voor de Apache HTTP server, en smbd voor Samba:
/sbin/ausearch -m avc -c httpd
/sbin/ausearch -m avc -c smbd
ausearch opties.
aureport. Uit de aureport(8) manual pagina: "aureport is een gereedschap dat samenvattingsrapporten maakt van de systeem logs"[18]. Het aureport gereedschap heeft toegang tot /var/log/audit/audit.log, en moet daarom als de Linux root gebruiker uitgevoerd worden. Om een lijst te zien van SELinux weigeringen en hoe vaak ze zijn voorgekomen, voer je het aureport -a commando uit. Het volgende is een vorbeeld output die twee weigeringen bevat:
# /sbin/aureport -a AVC Report ======================================================== # date time comm subj syscall class permission obj event ======================================================== 1. 05/01/2009 21:41:39 httpd unconfined_u:system_r:httpd_t:s0 195 file getattr system_u:object_r:samba_share_t:s0 denied 2 2. 05/03/2009 22:00:25 vsftpd unconfined_u:system_r:ftpd_t:s0 5 file read unconfined_u:object_r:cifs_t:s0 denied 4
aureport opties.
sealert, welke weigerings boodschappen leest die vertaald zijn door setroubleshoot-server. Weigeringen krijgen ID's toegekend, zoals te zien in /var/log/messages. Het volgende is een voorbeeld weigering van messages:
setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
84e0b04d-d0ad-4347-8317-22e74f6cd020. De -l optie neemt een ID als argument. Het uitvoeren van het sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 commando laat een gedetaileerde analyse zien waarom SELinux toegang weigerde, en een mogelijke oplossing om toegang toe te staan.
setroubleshootd en auditd daemons draaien, worden een gele ster en een waarschuwing getoond als toegang geweigerd wordt door SELinux. Het klikken op de ster start de sealert GUI, en laat de weigeringen zien in HTML output:

sealert -b commando uit om de sealert GUI op te starten.
sealert -l \* commando uit om een gedetaileerde analyse van alle weigeringen te zien.
sealert -a /var/log/audit/audit.log -H > audit.html commando uit om een HTML versie te maken van de sealert analyse, zoals te zien is met de sealert GUI.
sealert opties.
/var/log/audit/audit.log. Het volgende is een voorbeeld AVC weigering (en de bijbehorende systeem aanroep) die optrad toen de Apache HTTP server (draaiende in het httpd_t domein) probeerde om toegang te krijgen tot het /var/www/html/file1 bestand (gelabeld met het samba_share_t type):
type=AVC msg=audit(1226874073.147:96): avc: denied { getattr } for pid=2465 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284133 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file
type=SYSCALL msg=audit(1226874073.147:96): arch=40000003 syscall=196 success=no exit=-13 a0=b98df198 a1=bfec85dc a2=54dff4 a3=2008171 items=0 ppid=2463 pid=2465 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=6 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
{ getattr }getattr geeft aan dat het bron proces probeerde om de status informatie van het doel bestand te lezen. Dit treedt op voor het lezen van bestanden. Deze actie is geweigerd omdat toegang werd geprobeerd naar het bestand dat een verkeerd label had. Vaak geziene rechten zijn getattr, read, en write.
httpd"exe= sectie van de systeem aanroep (SYSCALL) boodschap, welke in dit geval exe="/usr/sbin/httpd" is.
/var/www/html/file1"unconfined_u:system_r:httpd_t:s0"httpd_t domein.
unconfined_u:object_r:samba_share_t:s0"file1. Merk op: het samba_share_t type is niet bereikbaar voor processen die draaien in het httpd_t domein.
tcontext overeenkomen met de scontext, bijvoorbeeld, als een proces probeert een systeem service uit te voeren dat de eigenschappen van dat draaiende proces zal veranderen, zoals een gebruikers ID. Ook kan de tcontext overeenkomen met de scontext als een proces probeert meer hulpbronnen (zoals geheugen) te gebruiken dan de normale limieten toestaan, wat resulteert in een beveiligings controle om te zien of dat proces gemachtigd is om die limieten te doorbreken.
SYSCALL) boodachap, zijn twee items interessant:
success=no: geeft aan of de weigering (AVC) afdwingend was of niet. success=no geeft aan dat de system aanroep gefaald heeft (SELinux weigerde toegang). success=yes geeft aan dat de systeem aanroep gelukt is - dit kan voorkomen bij toelatende domeinen of onbeperkte domeinen, zoals initrc_t en kernel_t.
exe="/usr/sbin/httpd": het volledige pad naar het programma dat het proces heeft opgestart, welke in dit geval exe="/usr/sbin/httpd" is.
scontext) met de doel context (tcontext). Moet het proces (scontext) toegang hebben tot zo'n object (tcontext)? Bijvoorbeeld, de Apache HTTP server (httpd_t) moet alleen toegang hebben tot types gespecificeerd in de httpd_selinux(8) manual pagina, zoals httpd_sys_content_t, public_content_t, enzovoort, behalve als iets anders ingesteld was.
/var/log/messages. Het volgende is een voorbeeld AVC weigering (gelogd naar messages) die optrad toen de Apache HTTP server (draaiende in het httpd_t domein) probeerde toegang te krijgen tot het /var/www/html/file1 bestand (gelabeld met het samba_share_t type):
hostname setroubleshoot: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). For complete SELinux messages. run sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020
sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 commando uit om de complete boodschap te zien. Dit commando werkt alleen op de locale machine, en presenteert dezelfde informatie als de sealert GUI:
$ sealert -l 84e0b04d-d0ad-4347-8317-22e74f6cd020 Summary: SELinux is preventing httpd (httpd_t) "getattr" to /var/www/html/file1 (samba_share_t). Detailed Description: SELinux denied access to /var/www/html/file1 requested by httpd. /var/www/html/file1 has a context used for sharing by different program. If you would like to share /var/www/html/file1 from httpd also, you need to change its file context to public_content_t. If you did not intend to this access, this could signal a intrusion attempt. Allowing Access: You can alter the file context by executing chcon -t public_content_t '/var/www/html/file1' Fix Command: chcon -t public_content_t '/var/www/html/file1' Additional Information: Source Context unconfined_u:system_r:httpd_t:s0 Target Context unconfined_u:object_r:samba_share_t:s0 Target Objects /var/www/html/file1 [ file ] Source httpd Source Path /usr/sbin/httpd Port <Unknown> HosthostnameSource RPM Packages httpd-2.2.10-2 Target RPM Packages Policy RPM selinux-policy-3.5.13-11.fc11 Selinux Enabled True Policy Type targeted MLS Enabled True Enforcing Mode Enforcing Plugin Name public_content Host NamehostnamePlatformLinux hostname 2.6.27.4-68.fc11.i686 #1 SMP Thu Oct30 00:49:42 EDT 2008 i686 i686 Alert Count 4 First Seen Wed Nov 5 18:53:05 2008 Last Seen Wed Nov 5 01:22:58 2008 Local ID 84e0b04d-d0ad-4347-8317-22e74f6cd020 Line Numbers Raw Audit Messages node=hostnametype=AVC msg=audit(1225812178.788:101): avc: denied { getattr } for pid=2441 comm="httpd" path="/var/www/html/file1" dev=dm-0 ino=284916 scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:samba_share_t:s0 tclass=file node=hostnametype=SYSCALL msg=audit(1225812178.788:101): arch=40000003 syscall=196 success=no exit=-13 a0=b8e97188 a1=bf87aaac a2=54dff4 a3=2008171 items=0 ppid=2439 pid=2441 auid=502 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=3 comm="httpd" exe="/usr/sbin/httpd" subj=unconfined_u:system_r:httpd_t:s0 key=(null)
/var/log/messages. In dit voorbeeld, werd het httpd proces toegang geweigerd tot een bestand (file1), welke gelabeld is met het samba_share_t type.
file1 gelabeld met het samba_share_t type. Dit type wordt gebruikt voor bestanden en mappen die je wilt exporteren met Samba. De beschrijving suggereert het veranderen van het type naar een type dat bereikt kan worden door de Apache HTTP server en Samba, als die toegang gewenst is.
file1 te veranderen naar public_content_t, welke toegankelijk is voor de Apache HTTP server en Samba.
selinux-policy-3.5.13-11.fc11), maar die niet zal helpen om de reden van de weigering op te lossen.
/var/log/audit/audit.log die verbonden zijn met de weigering. Refereer naar Paragraaf 7.3.6, “Ruwe audit boodschappen” voor informatie over ieder item in de AVC weigering.
audit2allow te laten zien.
audit2allow - maak SELinux tactiek toelatingsregels van de logs van geweigerde operaties"[19]. Na het onderzoeken van weigeren zoals in Paragraaf 7.3.7, “sealert boodschappen”, en als label veranderingen of Booleans aanzetten geen toegang toestaan, gebruik je audit2allow om een locale tactiek module te maken. Nadat toegang geweigerd is door SELinux, presenteert het draaien van het audit2allow commando Type Enforcement regels die de hiervoor geweigerde toegang toestaan.
audit2allow zien om een tactiek module te maken:
/var/log/audit/audit.log:
type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
type=SYSCALL msg=audit(1226270358.848:238): arch=40000003 syscall=39 success=no exit=-13 a0=39a2bf a1=3ff a2=3a0354 a3=94703c8 items=0 ppid=13344 pid=13349 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="certwatch" exe="/usr/bin/certwatch" subj=system_u:system_r:certwatch_t:s0 key=(null)
comm="certwatch") schrijf toegang ({ write }) geweigerd naar een map gelabeld met het var_t type (tcontext=system_u:object_r:var_t:s0). Analyseer de weigering zoals in Paragraaf 7.3.7, “sealert boodschappen”. Als label veranderingen of Booleans aanzetten, geen toegang toestaan, gebruik je audit2allow om een locale tactiek module te maken.
certwatch weigering in stap 1, voer je het audit2allow -w -a commando uit om een leesbare beschrijving te maken van de reden van de weigering. De -a optie zorgt ervoor dat alle logs gelezen worden. De -w optie produceert een leesbare beschrijving. Het audit2allow programma neemt toegang tot /var/log/audit/audit.log, en moet daarom uitgevoerd worden als de Linux root gebruiker:
# audit2allow -w -a
type=AVC msg=audit(1226270358.848:238): avc: denied { write } for pid=13349 comm="certwatch" name="cache" dev=dm-0 ino=218171 scontext=system_u:system_r:certwatch_t:s0 tcontext=system_u:object_r:var_t:s0 tclass=dir
Was caused by:
Missing type enforcement (TE) allow rule.
You can use audit2allow to generate a loadable module to allow this access.
audit2allow -a commando uit om de Type Enforcement regel te bekijken toe de geweigerde toegang toestaat:
# audit2allow -a #============= certwatch_t ============== allow certwatch_t var_t:dir write;
Fedora product, en je selecteert de selinux-policy component. Voeg de output van de audit2allow -w -a en audit2allow -a commando's toe in zo'n foutrapport.
audit2allow -a liet zien, voer je het audit2allow -a -M mycertwatch commando uit als de Linux root gebruiker om de aangepaste module te maken. De -M optie maakt een Type Enforcement bestand (.te) met de naam opgegeven met de -M in je huidige werkmap:
# audit2allow -a -M mycertwatch ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i mycertwatch.pp # ls mycertwatch.pp mycertwatch.te
audit2allow compileert de Type Enforcement regel ook naar een tactiek pakket (.pp). Om de module te installeren, voer je het /usr/sbin/semodule -i mycertwatch.pp commando uit als de Linux root gebruiker.
audit2allow kunnen meer toegang toestaan dan nodig is. Het wordt aanbevolen dat tactiek die gemaakt is met audit2allow voor bespreking opgestuurd wordt naar een SELinux lijst, zoals fedora-selinux-list. Als je denkt dat er een fout is in de tactiek, maak dat een foutrapport aan in Red Hat Bugzilla.
grep commando om de input voor audit2allow te versmallen. Het volgende voorbeeld laat het gebruik van grep zien om alleen weigeringen te versturen naar audit2allow die gerelateerd zijn aan certwatch:
# grep certwatch /var/log/audit/audit.log | audit2allow -M mycertwatch2 ******************** IMPORTANT *********************** To make this policy package active, execute: # /usr/sbin/semodule -i mycertwatch2.pp
audit2allow om tactiek modules te maken.
[14]
Bestanden in/etc/selinux/targeted/contexts/files/ definieren context voor bestanden en mappen. Bestanden in deze map worden gelezen door restorecon en setfiles om de standaard context van bestanden en mappen te herstellen.
[15]
Het semanage port -a commando voegt een regle toe aan het /etc/selinux/targeted/modules/active/ports.local bestand. merk op: standaard kan dit bestand alleen bekeken worden door de Linux root gebruiker.
[16] Van de ausearch(8) manual pagina, zoals verstuurd met het audit pakket in Fedora 11.
[17] Van de ausearch(8) manual pagina, zoals verstuurd met het audit pakket in Fedora 11.
[18] Uit de aureport(8) manual pagina, zoals verstuurd met het audit pakket in Fedora 11.
[19] Uit de audit2allow(1) manual pagina, zoals verstuurd met het policycoreutils pakket in Fedora 11.
| Wijzigingen | |||||
|---|---|---|---|---|---|
| Herziening 1.3 | Tue May 12 2009 | ||||
| |||||
| Herziening 1.2 | Mon Jan 19 2009 | ||||
| |||||
| Herziening 1.1 | Sat Dec 6 2008 | ||||
| |||||
| Herziening 1.0 | Tue Nov 25 2008 | ||||
| |||||