我在本地开发机上安装了 Apache、FastCGI (mod_fastcgi)、suExec 和 PHP。除了一件事外,运行正常。
假设我有两个用户:
user1 - /home/user1/public_html
user2 - /home/user2/public_html
我发现我的配置中存在一个严重的安全漏洞:我可以将 user2 web 根目录中的文件包含在 user1 文件中。如何预防?有什么建议吗?
php-cgi
进程在正确的用户下运行。
答案1
我建议您base_path
在 VirtualHost 中设置:
php_admin_value open_basedir /usr/local/www/sixeightzero
答案2
如果目的是以用户的名义运行 php,为了分离它们,请尝试Apache2-mpm-itk,它比 fast-cgi 更容易部署,而且效果很好。
要使用,您只需将这一行添加到虚拟主机配置中:
AssignUserId someuser somegroup
如果愿意,您还可以设置 MaxClientsVHost 和 NiceValue。
答案3
正确做法的唯一方法是禁止一个用户从另一个用户的主目录读取文件,但保留网络服务器可读的文件。
您可以通过以下方式实现此目的(示例):
使用 acl 选项挂载文件系统:
mount -o acl /dev/sda /home
允许网络服务器访问它:
setfacl -m u:nobody:r-x /home/user1
setfacl -m u:nobody:r-x /home/user2
允许所有者阅读:
setfacl -m u:user1:r-x /home/user1
setfacl -m u:user2:r-x /home/user2