(是的,我知道有关lighttpd的问题在SF上更合适,但我认为这更容易被问到这里,因为它主要关注安全策略。)
我们计划在我的大学里设置一个小型网络服务器,这样人们就可以获得一些网页空间来建立网页等。他们还可以上传PHP页面。整个设置从一个chroot监狱内运行。
我们正在考虑使用相同的基础架构来提供更多服务,例如讨论论坛。 我的问题是,将论坛置于同一文档根目录(或者实际上,相同的chrooted环境)几乎允许任何用户在其目录中放置可以访问论坛配置文件的小PHP脚本(使用比方说,file_get_contents
)。这是一个巨大的安全风险!有没有办法解决这个问题,没有为用户帐户禁用PHP,只保持为论坛等启用它,或者在其他地方提供论坛并使用lighttpd代理它?
我怀疑设置所有权/权限会做什么来解决这个问题,因为我看到它的方式,PHP FastCGI进程是由Web服务器产生的,因此,任何可以被服务器访问的页面(它们都是必须是,看看它是如何最终服务于它们的服务器)可以通过用户上传的PHP脚本访问。
任何帮助将不胜感激!
答案 0 :(得分:2)
好吧,几点。
首先,虽然Lighttpd非常适合高性能需求,但它并非设计用于共享主机设置。 Apache可能是更好的选择,因为它支持像.htaccess
...
其次,PHP不需要与Lighttpd作为同一用户运行。您可以使用spawn_fcgi
程序以该网站的用户身份启动每个fastcgi侦听器。您将为每个虚拟主机声明一个fastcgi后端。请注意,您可能无法使用任何内置的vhost模块(simple_vhost等)。只需使用正则表达式匹配:
通过IP和端口:
$SERVER["socket"] == "127.0.0.2:80" {
fastcgi.server = (
".php" => (
"username" => (
"socket" => "/tmp/user_php.fastcgi",
)
)
)
)
或通过主机名:
$HTTP["host"] =~ "example\.com" {
# ...
}
您可能需要修改init脚本以执行spawn_fcgi
以启动每个用户的php进程。
答案 1 :(得分:1)
每个用户都需要拥有自己的Linux用户帐户。然后你需要使用SuPHP+LightHTTPD来确保php代码以该用户的权限运行。接下来,您应该确保所有文件都归正确的用户所有,chmod 700
或chmod 500
(最适合.php文件)。 chmod中的最后2个零以及suphp使得用户不能file_get_contents()
彼此文件。