
Ich versuche nur, zielgerichtetes SELinux besser zu verstehen. Ich verstehe zwar, dass Benutzer, Prozesse, Ports usw. mit einem Vierfachen gekennzeichnet sind <user>,role>,<type>,<sensitivity>
und wie die Bezeichnungen semanage, restorecon
usw. festgelegt werden. Ich verstehe jedoch noch nicht, wie SELinux entscheidet, ob eine Ressource von einem Prozess aus zugänglich ist und wie der Prozess darauf zugreifen kann.
Wenn ich mir beispielsweise httpd
REL8 anschaue, kann ich die folgenden Bezeichnungen für den Prozess und das Standardverzeichnis DocumentRoot
sehen /var/www/html
:
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35292 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35293 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35294 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 35295 35291 0 13:23 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 35838 27088 0 13:30 pts/0 00:00:00 grep --color=auto httpd
Was ich jedoch suche, sind Antworten auf die folgenden Fragen:
- Warum darf der httpd-Prozess auf die Dateien in /var/www/html zugreifen?? Welche Labels werden hier in welcher Reihenfolge geprüft und welche Labels müssen übereinstimmen?
- Wie sieht die
role
Festlegung aus, dass dieser Zugriff erlaubt ist? Wie kann ich die Rollendefinition überprüfen - Wie kann ich bestimmen, wie ein Prozess auf eine Ressource einer bestimmten Bezeichnung zugreifen kann??
- Kann ich als Admin die Rolle so modifizieren, dass beispielsweise auch auf andere Dateikontexte zugegriffen werden kann?
Vielen Dank im Voraus für etwaige Klarstellungen.
Antwort1
Aus Ihrer Ausgabe:
[root@mylinux targeted]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 35291 1 0 13:23 ?
httpd
wird als httpd_t
Label ausgeführt. Dieses Label wird dem Prozess über eine spezielle Selinux-Domänenübergangsregel zugewiesen.
Dann können wir sehen:
[root@mylinux targeted]# ls -alZ /var/www/html
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 6 Aug 17 16:53 .
drwxr-xr-x. 4 root root system_u:object_r:httpd_sys_content_t:s0 33 Aug 17 16:53 ..
/var/www/html
hat die zulässige Domänenbezeichnung httpd_sys_content_t
. Daher kann ein mit laufender Prozess httpd_d
Dateisysteminhalte lesen, die mit derselben Bezeichnung versehen sind httpd_sys_content_t
.
All dies wird über sehr komplexe (und ausführliche) Selinux-Regeln gesteuert. Von Sysadmins wird nicht erwartet, dass sie den gesamten Regelsatz verstehen, also keine Panik. Wichtig ist, a) Selinux-Protokolle zu verstehen, b) semanage
und c)audit2allow
Weitere Informationen finden Sie unterRedHat Selinux-Dokumente
So beantworten Sie Ihre Fragen:
Warum darf der httpd-Prozess auf die Dateien in /var/www/html zugreifen?Weil eine Regel einem Prozess mit
httpd_t
dem Label erlaubt, Dateien mit dem Label zu lesenhttpd_sys_content_t
(z. B.:ALLOW apache_process apache_log:FILE READ;
)Wie sieht die Rolle aus, die definiert, dass dieser Zugriff erlaubt ist?Rollen wenden MAC auf Benutzertypen an (z. B. Mitarbeiter), werden aber nicht in der Standardrichtlinie verwendet. Sie werden vielmehr in der (nicht standardmäßigen) MLS-Richtlinie verwendet.
Wie kann ich bestimmen, wie ein Prozess auf eine Ressource mit einem bestimmten Label zugreifen kann?Sie können den gesamten Richtliniensatz ausgeben, aber das wird keine einfachen Informationen liefern. Schauen Sie sich stattdessen an
semange fcontext -l
Kann ich als Admin die Rolle so anpassen, dass beispielsweise auch auf andere Dateikontexte zugegriffen werden kann?Sicher. Sie können eine Richtlinie von Grund auf neu schreiben (nicht empfohlen) oder verwenden
audit2allow
(besser). Versuchen Sie dies jedoch zu vermeiden, da jede benutzerdefinierte Richtlinienänderung schwer zu verfolgen/verwalten ist. Verwenden Sie stattdessen, wenn möglich,setsebool
oder ,semanage
um Ihre Basisrichtlinie anzupassen.