Posterous theme by Cory Watilo

Lighttpd and execwrap

В качестве вэб-сервера я использую lighttpd. И сегодня я наткнулся на старую проблему - вэб-сервер работает из-под пользователя www-data, и когда пользователь pupkin загружает какой-то файл - этот файл принадлежит не pupkin'у, а www-data. И через ftp удалить его он не может, и вынужден искать некие web-file-manager'ы. Так вот я погуглил и наткнулся на execwrap. Он очень мелкий, почти ничего ему не нужно стороннего для работы, конфигурировать и использовать его крайне просто (да-да, я знаю про suExec, но он мне не сильно понравился). В результате конфиг для сайта у меня выглядит так: [cc lang="text"] $HTTP["host"] == "pupkin.com" { server.name = "pupkin.com" site-root = "/home/pupkin/www/" + server.name server.document-root = site-root + "/www" accesslog.filename = site-root + "/log/access.log" setenv.add-environment = ( "AWSTATS_FORCE_CONFIG" => server.name ) auth.backend.htpasswd.userfile = site-root + "/awstats.passwd" fastcgi.server = ( ".php" => (( "bin-path" => "/var/www/lighttpd/execwrap", "socket" => "/tmp/" + server.name + ".phpsocket", "max-procs" => 10, "bin-environment" => ( "UID" => "9999", "GID" => "9999", "TARGET" => site-root + "/cgi-bin/php", "CHECK_GID" => "1", "CGI_BIN_DIR" => site-root + "/cgi-bin/", "PHP_FCGI_CHILDREN" => "2", "PHP_FCGI_MAX_REQUESTS" => "5000" ) ))) } [/cc] где 9999 - ID пользователя и группы (у меня они часто совпадают). А в директории /home/pupkin/www/pupkin.com/cgi-bin лежит два файла - симлинк на php.ini и исполняемый файлик "php" следующего содержания: [cc lang="bash"] #!/bin/bash cd $CGI_BIN_DIR exec /usr/bin/php-cgi -c ./php.ini [/cc] Как видите, если надо то конфиг php.ini можно пользователю задать персональный. А файлик php обязательно должен принадлежать этому же пользователю. Когда все сделано - рестартуем lighttpd и смотрим, нет ли в логах ругательств с кодом ошибки 22 - это, как видно из сорса execwrap, несоответствие прав. Enjoy =) UPD: execwrap умер и воскрес тут: http://cgit.stbuehler.de/gitosis/execwrap/