Am 12.09.2017 um 10:55 schrieb Rainer.Rose@HannIT.de:
Moin!
Am 08.09.2017 um 23:05 schrieb Andreas Meyer a.meyer@nimmini.de:
Apache hat da einen 403 gemeldet. Es funktioniert jetzt. [...], weil auch die Rechte gestimmt haben und eine index.html vorhanden war. [...] Ich habe gesucht und auch gelesen, dass selinux schuld sein kann. [...]kenne es nicht.
Zeigt 'sealert -a /var/log/audit/audit.log' denn überhaupt SELinux Fehler?
# sealert -a /var/log/audit/audit.log bash: sealert: Kommando nicht gefunden.
Wenn man Probleme mit einem Programm hat, die vermutlich von SELinux verursacht werden, macht es Sinn SELinux zuerst auf 'Permissive' zu setzen. Damit werden die Regeln nicht angewendet, aber die Fehlermeldungen ins Log geschrieben.
root:~# setenforce 0
Danach kann mit 'audit2allow' aus dem Paket 'policycoreutils-python' das Log ausgewertet werden. Das zeigt einem schnell ein Problem auf, und es kann sogar Lösungen vorschlagen.
root:~# audit2allow -a -w
Manchmal muss man einfach nur einen Schalter umlegen:
root:~# setsebool httpd_can_network_connect=1 root:~# setsebool -P httpd_can_network_connect=1
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/htm...
Mir geht es ähnlich. Ich bin recht neu unter CentOS und hatte es mir vor Jahren mal angeguckt. Jetzt muss ich mich beruflich damit beschäftigen. Leider habe ich auch so meine Schwierigkeiten mit SElinux. Grundsätzlich ist es so, dass reine Dateirechte mit SElinux erstmal nicht ausreichen. Die SElinux-Rechte bzw. ACLs müssen auch stimmen. Es soll eine zusätzliche Sicherheitsschicht darstellen. Ich mach es mal kurz, so wie ich es verstanden habe. Theoretische könnte man unter Ausnutzung von Sicherheits und Konfig-Lücken, den Apache dazu bringen einen kleinen zusätzlichen Webserver mit nc (netcat) zum rennen zu bringen und sich dann auf dem System auszutoben.[1] Auch das Auslesen der /etc/passwd ist so ein beliebtes Szenario. SElinux soll nun genau das verhindern. Ausbrechen außerhalb der konfigurierten Verzeichnisse und einfach mal so eben eine Port (für den nc) aufzumachen is' nich'.
Dafür gibt es weitere "Gefängnisse" für den Apache-Prozess. Im Dateisystem gibt es erweiterte Dateirechte, die man sich z.B. mit -Z ,also $ ls -lZ angucken kann. Wichtig, auch z.B. tar muss man den SElinux-Kontext beim Sichern beibringen, sonst verschwindet die Info ( --selinux)
Sieht dann z.B. so aus
$ ls -lZ /var/www/ drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
Wie und wo man diese Labels (httpd_sys_content_t) konfiguriert werden, habe ich noch nicht rausgefunden und tue mich damit schwer, weil auch bei mir sealert nicht vorhanden scheint
Einen bestimmten Kontext für eine Datei oder ein Verzeichnis setzen:
root:~# chcon -t httpd_sys_content_t /var/www/html
Den Kontext eines Verzeichnisses und der Unterverzeichnisse wieder auf die Standardeinstellung zurücksetzen:
root:~# restorecon -vR /var/www/html
Man kann mit 'semanage' auch selbst Standardeinstellungen für ein Verzeichnis definieren. Damit bekommen neue Dateien automatisch den richtigen Kontext:
root:~# semanage fcontext -a -t httpd_sys_content_t '/srv/www(/.*)?'