Spawn-Fcgi in Chroot: User wird nicht gefunden
Posted: 2007-01-21 00:22
Hallo zusammen,
ich verwende jetzt schon seit längerer Zeit den Lighttpd als Webserver. Soweit so gut, klappt alles wunderbar
Nun habe ich mir überlegt das Ganze in einer "chrooted Environment" unter zu bringen. Lighttpd bietet ja eine Möglichkeit an, zu "chrooten". Jetzt möchte ich aber auch die per "spawn-fcgi" erzeugten Instanzen im Chroot einsperren:
Dazu kopiere ich das Binary und die benötigten Libraries ( ausfindig gemacht per ldd) in das Chroot. Geht man nach den Manualpages von "lighttpd.net" aus, so hat man ein Bashskript, welches das "spawn-fcgi"-Binary mit "env" ausführt. Daher habe ich auch "env" dementsprechend im Chroot eingerichtet...
Nun wird in diesem Bashskript ( http://trac.lighttpd.net/trac/wiki/HowT ... ermissions )ein User definiert, zu dem FastCGI wechseln soll, falls es als root läuft, z.B. user1.
Führt man nun das Skript in dem Chroot aus, so erscheint ein Fehler, dass der Benutzer "user1" nicht existiert.
:arrow: Dabei ist anzumerken, dass im Chroot eine "passwd"-Datei vorhanden ist, in welcher der User "user1" als solches aber existiert.
Passwd-File (abgeändert):
Hier noch ein Ausschnitt von strace an der Fehlerstelle:
An dieser Stelle weiß ich im Moment nicht weiter. Vielleicht kann mir ja jemand einen Tipp oder eine Anregung geben, wie ich das Problem genauer lokalisieren bzw. lösen kann. 
ich verwende jetzt schon seit längerer Zeit den Lighttpd als Webserver. Soweit so gut, klappt alles wunderbar
Nun habe ich mir überlegt das Ganze in einer "chrooted Environment" unter zu bringen. Lighttpd bietet ja eine Möglichkeit an, zu "chrooten". Jetzt möchte ich aber auch die per "spawn-fcgi" erzeugten Instanzen im Chroot einsperren:
Dazu kopiere ich das Binary und die benötigten Libraries ( ausfindig gemacht per ldd) in das Chroot. Geht man nach den Manualpages von "lighttpd.net" aus, so hat man ein Bashskript, welches das "spawn-fcgi"-Binary mit "env" ausführt. Daher habe ich auch "env" dementsprechend im Chroot eingerichtet...
Nun wird in diesem Bashskript ( http://trac.lighttpd.net/trac/wiki/HowT ... ermissions )ein User definiert, zu dem FastCGI wechseln soll, falls es als root läuft, z.B. user1.
Code: Select all
## if this script is run as root switch to the following user
USERID=user1
GROUPID=group1
:arrow: Dabei ist anzumerken, dass im Chroot eine "passwd"-Datei vorhanden ist, in welcher der User "user1" als solches aber existiert.
Passwd-File (abgeändert):
Code: Select all
user1:x:10007:100::/var/www/vhosts/seite.de:/bin/false
Code: Select all
stat(".", {st_mode=S_IFDIR|0755, st_size=1024, ...}) = 0
stat("/home/r5Ks3zEa/bin/env", 0x7fbfffeb30) = -1 ENOENT (No such file or directory)
stat("/usr/local/bin/env", 0x7fbfffeb30) = -1 ENOENT (No such file or directory)
stat("/usr/bin/env", {st_mode=S_IFREG|0755, st_size=18720, ...}) = 0
stat("/usr/bin/env", {st_mode=S_IFREG|0755, st_size=18720, ...}) = 0
rt_sigprocmask(SIG_BLOCK, [INT CHLD], [], 8) = 0
lseek(255, -23, SEEK_CUR) = 1341
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x2a95d42ff0) = 19530
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
spawn-fcgi.c.381: can't find username, user1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 255}], WNOHANG, NULL) = 19530
wait4(-1, 0x7fbfffe834, WNOHANG, NULL) = -1 ECHILD (No child processes)
rt_sigreturn(0xffffffffffffffff) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGINT, {0x42d06e, [], SA_RESTORER, 0x2a95b454c0}, {SIG_DFL}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigaction(SIGINT, {SIG_DFL}, {0x42d06e, [], SA_RESTORER, 0x2a95b454c0}, 8) = 0