2014-11-22 546 views
1

我在第一次配置我的web服务器。NGINX - 防止目录遍历攻击

  • Ubuntu的,NGINX,PHP,上海社会科学院等最新更新的安装
  • 创建自己的用户帐户,所以我没有使用root到处
  • 检查发现我没有开
  • 不必要的端口
  • 创建自己的文件夹到各个领域
  • 每个域上PHP5-FPM池自己的袜子运行,以自己的用户名

我的文件夹结构就像THI S:

/无功/网络/网站/ exampledomain1 /公/

/无功/网络/网站/ exampledomain2 /公/

/无功/网络/网站/ exampledomain2 /公/

我对每个公用文件夹和/ var /,/ var/www /制作了“test.txt”文件。然后我做了一个简单的php文件,试图包含来自不同地方的test.txt文件,并且我还试图包含/ etc/passwd。我很高兴地注意到,我可以将所有文件包含在我的公共PHP文件中,甚至是/ etc/passwd文件中。

我创建了“域”用户,并将它们仅限于www数据组。除www/..之外的所有内容都未改动,所以/ var/passwd等是root:root。

在/ var/WWW/755 WWW的数据:WWW的数据

/无功/网络/网站/ 755 WWW的数据:WWW的数据

/无功/网络/网站/ exampledomain1/711 exampledomain1:www数据

/无功/网络/网站/ exampledomain2/711 exampledomain2:www数据

/无功/网络/网站/ exampledomain3/711 exampledomain3:www数据

在/ var/WWW /网站/为例edomain1 /大众711 exampledomain1:www数据

/无功/网络/网站/ exampledomain2 /大众711 exampledomain2:www数据

/无功/网络/网站/ exampledomain3 /大众711 exampledomain3:www数据

目前所有的index.php文件都是701.所有者可以读,写和执行,同一组的用户不能做任何事情,公众可以执行。

我的目标是不能包含其他文件夹中的任何内容。因此,如果我的某个域名被利用并被黑客入侵,破解者可以运行自己的代码,所以它不能包含来自其他域名或来自更深层的任何文件。

回答

3

要创建绝对孤立的环境中,应该

一)使用Apache后端+的suexec + mod_php,并且因为PHP-FPM不支持 “的suexec” 尽可能全面Apache不

二)建立不仅个人用户也按你的域个别团体

C)配置一对夫妇的名字,基本虚拟主机,每个服务域(希望一个,你已经完成),并设置单独的用户名作为参数的suexec

在这种情况下,您可以为您的域DocumentRoots设置0700权限,并且文件系统权限一定会将您的域\用户与其他域分开。

+0

感谢您的快速回答!我编辑了php.ini,行“open_basedir”,并写了所有好的目录。然后,我添加了fastcgi_param PHP_VALUE open_basedir =“/ var/www/sites/exampledomain1/public”;到每个php5-fpm池服务器块。我尝试了我的“安全测试”php文件,现在它不能包含任何我不希望它包含的内容。 – Jamma 2014-11-22 22:20:04

0

我强烈推荐PHP-FPM和chrooting。它完全隔离Apache/suexec永远不可能的方式,每个站点都有它自己的用户和它自己的chroot。这是大型ISP /托管公司使用的原因。

最好的部分是PHP-FPM与NginX一起也很轻松。