Bei SELinux Booleans handelt es sich um kleine Schalter, mit denen sich das Verhalten der SELinux-Richtlinien beeinflussen lässt. Dieser Artikel knüpft an die „Einführung in das grundlegende Konzept von SELinux“ an und erläutert die Verwendung von SELinux Booleans anhand eines einfachen Beispiels.
Hinweis: Das Beispiel aus diesem Artikel wurde auf einem RHEL/CentOS 7.3 getestet. Unter CentOS 7.2 funktioniert die hier gezeigte Konfiguration nicht. Für Details wird auf das Topic[2. Solved SELinux Booleans and httpd_enable_homedirs] im CentOS-Support-Forum verwiesen.
Im Einführungsartikel[3. „Einführung in das grundlegende Konzept von SELinux“] wurde SELinux dazu genutzt, um den Zugriff des Apache auf das DocumentRoot-Verzeichnis /var/www/html
zu beschränken. Nun möchte der Webmaster den Benutzern gestatten, Webseiten über ihre HOME-Verzeichnisse zu veröffentlichen und aktiviert dazu die Konfiguration für das Modul Userdir.[4. Linux Basics: How To Enable Apache UserDir In CentOS 7/RHEL 7 {en}] [5. Enable Userdir in CentOS 7 {en}] [6. Apache: Benutzerspezifische Verzeichnisse – wiki.ubuntuusers.de]
[root@centos ~]$ cat /etc/httpd/conf.d/userdir.conf UserDir enabled UserDir public_htmlAllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS [root@centos ~]#
Nun kann ein Benutzer in seinem HOME-Verzeichnis den Ordner public_html erstellen und eine test.txt
-Datei erstellen:
[jkastning@centos ~]$ mkdir public_html [jkastning@centos ~]$ sudo chmod 711 /home/jkastning/ [jkastning@centos ~]$ sudo chmod 755 public_html/ [jkastning@centos ~]$ vim public_html/test.txt
Hello User
Nach einem Neustart des Dienstes httpd sollte sich nun die Datei index.html aus dem Benutzerverzeichnis abrufen lassen. Statt dessen wird der Zugriff verweigert.
In den Logdateien finden sich Hinweise, die auf SELinux als Ursache hindeuten.
[root@centos ~]# tail /var/log/audit/audit.log|grep AVC type=AVC msg=audit(1480446615.354:844): avc: denied { getattr } for pid=23150 comm="httpd" path="/home/jkastning/public_html/index.html" dev="sda1" ino=1052157 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_user_content_t:s0 tclass=file [root@centos ~]# tail /var/log/messages | grep SELinux Nov 29 20:10:44 centos setroubleshoot: SELinux is preventing httpd from getattr access on the file /home/jkastning/public_html/index.html. For complete SELinux messages. run sealert -l 13419731-cedd-4433-abb7-b2e7715d5636
Um weitere Informationen zu erhalten, führen wir das Kommando aus /var/log/messages aus (Ausgabe gekürzt):
[root@centos ~]# sealert -l 13419731-cedd-4433-abb7-b2e7715d5636 SELinux is preventing httpd from getattr access on the file /home/jkastning/public_html/index.html. ***** Plugin catchall_boolean (24.7 confidence) suggests ****************** If you want to allow httpd to enable homedirs Then you must tell SELinux about this by enabling the 'httpd_enable_homedirs' boolean. You can read 'None' man page for more details. Do setsebool -P httpd_enable_homedirs 1
In der obigen Ausgabe wird neben der Ursache auch gleich die Lösung mitgeliefert. Nach der Aktivierung des SELinux Boolean httpd_enable_homedirs kann der Inhalt der Datei index.html im Webbrowser abgerufen werden.
Damit wurde eine weitere Funktionalität von SELinux kurz vorgestellt. Für weiterführende Informationen sei auf die Manpages booleans(8)[6. booleans(8) – Linux man page {en}], getsebool(8)[7. getsebool(8) – Linux man page {en}] und setsebool(8)[8. setsebool(8) – Linux man page {en}] verwiesen.