AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 515938
Accepted
Rolf
Rolf
Asked: 2013-06-15 11:17:26 +0800 CST2013-06-15 11:17:26 +0800 CST 2013-06-15 11:17:26 +0800 CST

为共享主机 (WAMP) 保护 mod_php 的技术?[复制]

  • 772
这个问题在这里已经有了答案:
为什么不使用 WAMP 堆栈? (5 个答案)
7 年前关闭。

我已经设置了一个用于生产的网络服务器。操作系统是 Windows Server,它运行 Apache 2.0 和 PHP 5.3 作为 apache 模块(还有 MySQL ......)。它用于托管属于不同客户的多个虚拟主机(Apache vhosts)。

此时PHP是以系统用户身份运行的。将来可能会授予客户 FTP 访问权限,因此 - 默认情况下 - 每个客户都可以通过 PHP 访问整个系统。这显然是不能接受的。

我知道我可以在 PHP 中设置 open_basedir,但我不确定它是否包含和足够可靠以被视为一个解决方案 - 它是否限制对所有 PHP 函数的访问,例如 include...?PHP 流怎么样?

我也知道 IIS 提供了解决该问题的方法,但我更愿意保留 Apache。

我最想设置的是一个可以满足以下要求(主要)的解决方案:

  • 保持优雅并以某种方式自动。我正在手动管理服务器 - 我希望每个虚拟主机的设置都涉及尽可能少的设置和配置编辑。
  • 允许例外。大多数托管网站都是我自己开发的,我想将它们全部链接到一个库文件夹,因此应该允许对该文件夹进行只读访问,尽管它位于虚拟主机的根目录之外。

那么,有哪些可用选项(如果有)?我已经做了一些研究,似乎该领域的大部分工作都是在 Linux 系统上完成的。

php
  • 2 2 个回答
  • 1134 Views

2 个回答

  • Voted
  1. Best Answer
    voretaq7
    2013-06-15T13:32:50+08:002013-06-15T13:32:50+08:00

    PHP 和 FTP 彼此无关。
    FTP 是一种(糟糕的、不安全的、古老的)在机器之间移动文件的方式。
    PHP 是一种由您的 Web 服务器执行的脚本语言。

    您可以(并且可能应该)使用 IIS FTP 功能授予对您的服务器的 FTP 访问权限,同时拒绝您的用户访问诸如根卷 ( C:\) 和您的共享库目录之类的内容。

    安全问题的另一半是 PHP 本身——mod_php不擅长多租户安全,open_basedir 也不是包罗万象的解决方案(尽管总比没有好)。

    • 如果你想要真正的安全,你几乎需要在 chroot 中为每个人提供他们自己的 Apache。
      这令人不快(对于作为管理员的您而言),但安全。它也很灵活,因为您可以为每个站点修改 php.ini。

    • 下一个最佳选择是将 PHP 作为 CGI。
      您可以调用 PHP 的 CGI 解释器作为网站所有者的用户 ID - 这使您受益于操作系统的文件权限功能,并避免为每个站点维护单独的 Apache/PHP 实例。
      主要缺点是 PHP 必须作为 CGI 调用,因此您失去了依赖 PHP 作为 Web 服务器模块的任何功能。

    • 第三个最佳选择是open_basedirand disable_functions/disable_classes。
      open_basedir并没有真正保护任何东西,因为它只影响PHP:您的用户仍然可以上传/执行二进制文件来访问其他人的数据。
      php.ini中的disable_functions和disable_classes指令让您关闭某些不安全的功能(您需要自己获取可利用类的列表)。

      • 不过问题在于:那些是黑名单,而黑名单带来了可怕的安全性,因为如果您错过了可利用/易受攻击的功能,您仍然容易受到攻击。
        你可以用这种方式掩盖明显的洞,但你基本上就是那个手指插在堤坝上的荷兰小男孩。你的手指只有那么多,而且总会多出一个洞……

    您绝对不应该将 Apache 运行为Local System(或任何具有提升权限的帐户)。
    在将此服务器投入生产之前,请确保根据 Apache 文档中的最佳实践对其进行配置。

    • 2
  2. Rolf
    2013-06-16T08:21:34+08:002013-06-16T08:21:34+08:00

    我已经通过以下组合解决了这个问题:

    • 在 Apache 配置中使用 apache_admin_value 为每个 vhost 设置 open_basedir
    • 以具有有限权限的普通用户身份运行 Apache(@voretaq7:感谢提供链接)
    • 禁用 php.ini 中的一些函数:disable_functions = shell_exec, symlink, exec, system, passthu, popen, proc_open

    它绝不是最安全的解决方案,但通过定期备份,它应该足以托管一些低调的网站。

    更新(大约一年后):这个设置救了我——如果在这种情况下可以这么说的话。我的一个虚拟主机是一个过时的 Wordpress 安装,它被感染了。我可以看到在 PHP 日志中创建了奇怪的临时文件。vhost 通过 open_basedir 受到限制,我认为它包含问题 - 恐怕我的所有文件,而不仅仅是这个 vhost 的文件,如果不是因为这个,都会受到损害。

    • 0

相关问题

  • 用户特定的 Php.ini 当 php 作为模块运行时?

  • 使 php mail() 函数在 ubuntu-server 上工作的步骤是什么?

  • Web 服务器和数据库服务器位于完全不同的位置

  • PHP 作为 CGI 还是 Apache 模块?

  • 通过 VPN 连接什么是远程服务器 IP?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve