【问题标题】:NGINX - Prevent directory traversal attackNGINX - 防止目录遍历攻击
【发布时间】:2015-01-20 20:13:46
【问题描述】:

我是第一次自己配置我的网络服务器。

  • Ubuntu、NGINX、PHP、SASS 等已安装最新更新
  • 创建了自己的用户帐户,这样我就不必到处使用 root 了
  • 检查我没有打开不需要的端口
  • 为每个域创建自己的文件夹
  • 每个域都使用自己的用户名在 PHP5-fpm 池上的自己的 sock 上运行

我的文件夹结构是这样的:

/var/www/sites/exampledomain1/public/

/var/www/sites/exampledomain2/public/

/var/www/sites/exampledomain2/public/

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

我创建了“域”用户并将其仅放入 www-data 组。除了 www/.. 之外的所有内容都未触及,因此 /var/passwd 等是 root:root。

/var/www/ 755 www-data:www-data

/var/www/sites/ 755 www-data:www-data

/var/www/sites/exampledomain1/ 711 exampledomain1:www-data

/var/www/sites/exampledomain2/ 711 exampledomain2:www-data

/var/www/sites/exampledomain3/ 711 exampledomain3:www-data

/var/www/sites/exampledomain1/public 711 exampledomain1:www-data

/var/www/sites/exampledomain2/public 711 exampledomain2:www-data

/var/www/sites/exampledomain3/public 711 exampledomain3:www-data

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

我的目标是您不能包含其他文件夹中的任何内容。因此,如果我的某个域具有漏洞利用并且被黑/破解者可以运行自己的代码,那么它就不能包含来自其他域或更深层次的任何文件。

【问题讨论】:

    标签: php security nginx permissions


    【解决方案1】:

    要创建绝对隔离的环境,您应该

    a) 使用 Apache 后端 + suexec + mod_php,因为 php-fpm 不像 Apache 那样完全支持“suexec”

    b) 不仅可以创建个人用户,还可以为每个域创建个人组

    c) 配置几个基于名称的虚拟主机,每个服务域一个(希望您已经完成),并将单个用户名设置为 suexec 参数

    在这种情况下,您对域 DocumentRoots 设置了 0700 权限,并且文件系统权限肯定会将您的域\用户彼此分开。

    【讨论】:

    • 感谢您的快速答复!我编辑了 php.ini,行“open_basedir”,并在那里写了所有好的目录。然后我添加了 fastcgi_param PHP_VALUE open_basedir="/var/www/sites/exampledomain1/public";到每个 php5-fpm 池服务器块。我尝试了我的“安全测试”php 文件,现在它不能包含我不想包含的任何内容。
    【解决方案2】:

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

    最好的部分是 PHP-FPM 与 NginX 也很容易。

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2016-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多