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