ich habe auf meinem Server zwei chroot-Umgebungen eingerichtet. In beiden soll ein lighttpd laufen. Lighty1 soll sich an eth0 binden, Lighty2 an eth0:1. Natürlich sollen beide, nachdem sie sich lauschenderweise an die Ethernet Interfaces gebunden haben, die root-Rechte abgeben und unter einem unprivilegierten User laufen.
Soweit so gut, das ganze war kein Problem in der Umsetzung. Aktiviere ich jedoch die diversen Schutzmechanismen von grsecurity per sysctl, startet der erste Lighty problemlos. Der zweite hingegen kommt nicht hoch. Ich hab mir jetzt folgendes zusammengereimt (alles auf Dienste innerhalb eines chroot bezogen):
- Dienste, die an 127.0.0.1 gebunden sind, funktionieren problemlos
- Dienste, die an eth0 gebunden sind, funktionieren ebenfalls problemlos
- Dienste, die an eth0:x gebunden sind, funktionieren nur, wenn sie mit root-Rechten laufen (ein sshd z. B. tut's).
Hier noch meine grsecurity-Konfiguration:
Code: Select all
kernel.grsecurity.audit_mount = 1
kernel.grsecurity.chroot_caps = 1
kernel.grsecurity.chroot_deny_chmod = 1
kernel.grsecurity.chroot_deny_chroot = 1
kernel.grsecurity.chroot_deny_fchdir = 1
kernel.grsecurity.chroot_deny_mknod = 1
kernel.grsecurity.chroot_deny_mount = 1
kernel.grsecurity.chroot_deny_pivot = 1
kernel.grsecurity.chroot_deny_shmat = 1
kernel.grsecurity.chroot_deny_sysctl = 1
kernel.grsecurity.chroot_deny_unix = 1
kernel.grsecurity.chroot_enforce_chdir = 1
kernel.grsecurity.chroot_execlog = 1
kernel.grsecurity.chroot_findtask = 1
kernel.grsecurity.chroot_restrict_nice = 1
kernel.grsecurity.destroy_unused_shm = 1
kernel.grsecurity.dmesg = 1
kernel.grsecurity.exec_logging = 1
kernel.grsecurity.execve_limiting = 1
kernel.grsecurity.fifo_restrictions = 1
kernel.grsecurity.forkfail_logging = 1
kernel.grsecurity.grsec_lock = 1
kernel.grsecurity.linking_restrictions = 1
kernel.grsecurity.resource_logging = 1
kernel.grsecurity.tpe = 1
kernel.grsecurity.tpe_gid = xxx
kernel.grsecurity.tpe_restrict_all = 1
Ich habe jetzt den Übeltäter durch stumpfes probieren entlarvt. Es ist die Option
Code: Select all
kernel.grsecurity.chroot_deny_unix = 1
Code: Select all
CONFIG_GRKERNSEC_CHROOT_UNIX:
If you say Y here, processes inside a chroot will not be able to
connect to abstract (meaning not belonging to a filesystem) Unix
domain sockets that were bound outside of a chroot. It is recommended
that you say Y here. If the sysctl option is enabled, a sysctl option
with name "chroot_deny_unix" is created.