02.02.2013 yahe administration legacy linux security
Wenn man PHP chrootet, funktionieren mitunter die grundlegendsten Dinge nicht mehr, was jedoch erst dann auffällt, wenn ein Codeabschnitt eine bestimmte Funktion benötigt. Bei mir war das vor kurzem die DNS-Auflösung, die ich bisher nicht gebraucht hatte. Folgendes minimale chroot-Setup habe ich nun zusammengestellt, damit DNS-Lookups in PHP ordentlich funktionieren:
mkdir ./dev
mknod ./dev/null c 1 3
mknod ./dev/random c 1 8
mknod ./dev/urandom c 1 9
mknod ./dev/zero c 1 5
mkdir ./etc
cp /etc/resolv.conf ./etc
echo 127.0.0.1 localhost > ./etc/hosts
echo ::1 ip6-localhost ip6-loopback >> ./etc/hosts
mkdir ./lib
cp /lib/libnss_dns.so.2 ./lib
P.S.: Anhand folgender Fehlermeldung kann man erkennen, dass etwas mit dem DNS-Lookup seiner eigenen chroot-Umgebung im Argen ist: "php_network_getaddresses: getaddrinfo failed: Name or service not known"