我真正想要做的就是让'www-data'用户能够以另一个用户的身份启动php-cgi。 我只是想确保我完全理解安全性的含义。
服务器应该支持共享主机环境,其中各种(可能不受信任的)用户通过chroot来访问服务器的FTP来存储他们的HTML和PHP文件。 然后,由于PHP脚本可能是恶意的,读/写别人的文件,所以我想确保每个用户的PHP脚本以相同的用户权限运行(而不是以www数据运行)。
长话短说,我在/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中的用户。 这有什么安全影响?
这应该允许我像这样修改我的Lighttpdconfiguration:
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服务器实例。
我build议使用php-fpm (pipe理所有用户使用一个服务器,但通常不安全,如果您使用操作码caching),或使用runit和spawn-fcgi产生后端。
然后从lighttpdconfiguration(bin-path,max-procs,bin * -environment)中删除产卵选项
在执行CGI进程之前,Apache有一个安全地允许服务器更改用户的扩展。 这就是所谓的SuEXEC
有很多需要检查,平衡和消毒,或包装将不会执行或更改用户。 这是因为有很多东西可能会出错,反过来又危及系统的安全。 我会认真的build议不要做你正在做的事情。
我以前从来没有运行Lighttpd,只是因为经过适当的调整,configuration,testing和基准testing。它可以performance得非常好。
但是, 我发现这是一个SuEXEC的实现,但是对于Lighttpd来说。
这里是一些关于如何使用它的附加文档 。
祝你好运。
你似乎在重新发明车轮(不知道车轮故障的危险)
SuPHP是你的问题的答案,据我所知可以使用lighttpd。