Что я действительно хочу сделать, так это позволить пользователю www-data иметь возможность запускать php-cgi от имени другого пользователя. Я просто хочу убедиться, что полностью понимаю последствия для безопасности.
Сервер должен поддерживать среду общего хостинга, в которой различные (возможно, ненадежные) пользователи имеют доступ к серверу через chroot по FTP для хранения своих файлов HTML и PHP. Затем, поскольку сценарии PHP могут быть вредоносными и читать / записывать файлы других пользователей, я хотел бы убедиться, что сценарии PHP каждого пользователя выполняются с одинаковыми правами пользователя для этого пользователя (вместо того, чтобы работать как www-data).
Короче говоря, я добавил следующую строку в свой /etc/sudoers
файл, и я хотел пропустить его мимо сообщества в качестве проверки работоспособности:
www-data ALL = (%www-data) NOPASSWD: /usr/bin/php-cgi
Эта строка должна только разрешить www-data запускать такую команду (без запроса пароля):
sudo -u some_user /usr/bin/php-cgi
...где some_user
является пользователем в группе www-data. Каковы последствия этого для безопасности?
Это должно позволить мне изменить мою конфигурацию Lighttpd следующим образом:
fastcgi.server += ( ".php" =>
((
"bin-path" => "sudo -u some_user /usr/bin/php-cgi",
"socket" => "/tmp/php.socket",
"max-procs" => 1,
"bin-environment" => (
"PHP_FCGI_CHILDREN" => "4",
"PHP_FCGI_MAX_REQUESTS" => "10000"
),
"bin-copy-environment" => (
"PATH", "SHELL", "USER"
),
"broken-scriptfilename" => "enable"
))
)
... позволяя мне создавать новые экземпляры сервера FastCGI для каждого пользователя.
Похоже, вы изобретаете колесо (не осознавая опасности неисправного колеса)
SuPHP - это ответ на вашу проблему, и, насколько я знаю, его можно заставить работать с lighttpd.
У Apache есть расширение, которое Безопасно позволяет серверу менять пользователей перед выполнением процесса CGI. это называется SuEXEC
Требуется множество проверок, противовесов и очистки, иначе оболочка НЕ выполнит или не изменит пользователя. это потому, что есть МНОГО вещей, которые могут пойти не так, в свою очередь, поставить под угрозу безопасность вашей системы. Я бы серьезно рекомендовал не делать то, что делаете вы.
Я никогда раньше не запускал Lighttpd просто потому, что при правильной настройке, настройке, тестировании и тестировании ... он может работать очень хорошо.
Тем не мение, Я нашел это: похоже, это реализация SuEXEC, но для Lighttpd.
Вот некоторые дополнительная документация о том, как его использовать.
Удачи.
Я рекомендую использовать php-fpm вместо этого (управление всеми пользователями с помощью одного сервера, но обычно небезопасно, если вы используете кеш кода операции) или порождение бэкэндов с помощью запустить его и spawn-fcgi.
Затем удалите параметры спауна из конфигурации lighttpd (bin-path, max-procs, bin * -environment)