2010-07-06 61 views
2

(是的,我知道问题有关的lighttpd适合在SF更好,但我认为这是更容易被要求在这里,因为它是主要关注的安全策略。)保护共享lighttpd的设置

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

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

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

任何帮助,将不胜感激!

+0

这应该是在serverfault。 – rook 2010-07-06 16:14:04

回答

2

好吧,几点。

首先,Lighttpd非常适合高性能需求,但它并不适用于共享主机设置。 Apache可能是更好的选择,因为它支持像.htaccess ...

其次,PHP不需要像Lighttpd一样运行。您可以使用spawn_fcgi程序启动每个fastcgi监听器作为该网站的用户。你会为每个虚拟主机声明一个fastcgi后端。请注意,您可能无法使用任何内置的虚拟主机模块(simple_vhost等)。只需使用正则表达式匹配:

或者通过IP和端口:

$SERVER["socket"] == "127.0.0.2:80" { 
    fastcgi.server = (
     ".php" => (
      "username" => (
       "socket" => "/tmp/user_php.fastcgi", 
      ) 
     ) 
    ) 
) 

或者通过主机名:

$HTTP["host"] =~ "example\.com" { 
    # ... 
} 

您可能会需要修改初始化脚本也执行spawn_fcgi到为每个用户启动php进程。

1

每个用户需要有自己的Linux用户帐户。然后,您需要使用SuPHP+LightHTTPD以确保php代码以该用户的特权运行。接下来,您应该确保所有文件都归正确的用户所有,并且chmod 700chmod 500(最适合.php文件)。 chmod中的最后2个零以及suphp使得用户不能在每个其他文件中使用file_get_contents()

+0

我可能会这样做,因为每个用户都有一个对应于他的uid,但似乎suPHP只能用于CGI,而不是FastCGI(这很有意义,因为FCGI子进程是持久的,并且1600个子进程将是恶梦...) – susmits 2010-07-06 19:40:38