保护共享的lighttpd设置

时间:2010-07-06 12:13:58

标签: php security lighttpd

(是的,我知道有关lighttpd的问题在SF上更合适,但我认为这更容易被问到这里,因为它主要关注安全策略。)

我们计划在我的大学里设置一个小型网络服务器,这样人们就可以获得一些网页空间来建立网页等。他们还可以上传PHP页面。整个设置从一个chroot监狱内运行。

我们正在考虑使用相同的基础架构来提供更多服务,例如讨论论坛。 我的问题是,将论坛置于同一文档根目录(或者实际上,相同的chrooted环境)几乎允许任何用户在其目录中放置可以访问论坛配置文件的小PHP脚本(使用比方说,file_get_contents)。这是一个巨大的安全风险!有没有办法解决这个问题,没有为用户帐户禁用PHP,只保持为论坛等启用它,或者在其他地方提供论坛并使用lighttpd代理它?

我怀疑设置所有权/权限会做什么来解决这个问题,因为我看到它的方式,PHP FastCGI进程是由Web服务器产生的,因此,任何可以被服务器访问的页面(它们都是必须是,看看它是如何最终服务于它们的服务器)可以通过用户上传的PHP脚本访问。

任何帮助将不胜感激!

2 个答案:

答案 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 700chmod 500(最适合.php文件)。 chmod中的最后2个零以及suphp使得用户不能file_get_contents()彼此文件。