【问题标题】:Can PHP move around and edit root system files on a server?PHP 可以在服务器上移动和编辑根系统文件吗?
【发布时间】:2012-01-05 09:35:55
【问题描述】:

这似乎是一个愚蠢的问题,但我用谷歌搜索无济于事。

我一直认为 PHP 是一种用于创建动态数据库驱动网站的语言,但我从未想过使用它来移动实际服务器上的系统文件(因为我从来没有需要这样做)。我的问题是:

  1. 标准的 PHP 5.3.x.x 安装能否在 /bin 或 /etc 中移动、复制或编辑系统文件(我以 Linux 服务器为例)?
  2. 这是个好主意/做法吗?

我从来没有想过,如果恶意黑客能够将一些 PHP 注入网站,他们将有效地被授予访问整个 Linux 服务器(及其所有系统文件)的权限。我只认为 PHP 是在 /vhosts 目录中运行的东西(也许很天真)。

对不起,如果这听起来像一个愚蠢的问题,但我无法真正测试我的理论,就好像我的老板要看到我编写/上传/执行一个在 Linux 文件系统中移动内容的脚本我会死的。

感谢你们的帮助! :)

【问题讨论】:

  • suphp 是一个有用的工具,用于控制 PHP 运行时以 suphp.org 执行的用户

标签: php linux security apache


【解决方案1】:

无论它运行的用户帐户的权限允许它做什么,PHP 都可以访问你的服务器。 PHP 作为一种语言不受任何限制(至少在权限方面),受限制的是用户帐户。

这就是为什么人们通常会在这里为 Apache/nginx/insert web 服务器创建一个用户来运行,并且只授予它操作与 web 服务器相关的文件和目录的权限。如果您不授予此用户对/bin/etc 的访问权限,则无法执行任何会影响他们的操作。

这是一个好主意/做法吗?

通常不会。将系统管理留给您的系统管理员,而不是请求您的 PHP 脚本的用户。

【讨论】:

  • 好的,谢谢,有点偏差,但是服务器(我再次以 Linux 为例)通常会有一个 root 用户用于管理员,然后一个普通用户用于运行 Apache 和 PHP?这会有效降低风险吗?
  • 为了争论,假设我们使用的是 Apache。在大多数 Web 服务器上,您会发现有一个名为 apache 或偶尔称为 web 的用户。这个用户可能也有它自己的组——它肯定不会是root 组的一部分。这意味着除非它尝试访问的文件明确属于它或完全公开,否则它将无法对它做任何事情。就像您以受限用户身份登录一样,它不会让您做任何事情。
  • 建议 Linux,还有 SELinux 将其提升到一个新的水平。如果由 httpd 调用的进程正在访问文件,那么在 SELinux 的上下文中,httpd 必须可以访问该文件,旁边是标准 Linux 用户/组权限。
【解决方案2】:

PHP 可以尝试调用许多系统命令来移动或直接编辑硬盘上的文件。是否成功取决于安全设置。

假设您通过 apache 和 apache 运行的 PHP 设置为以用户 www-data 运行所有进程 - 像 Debian 这样的操作系统的默认设置。如果您授予用户 www-data 编辑 /etc 的权限,那么是的,PHP 可以读取和写入 /etc 中的文件

您发现只有一个主要缺点;安全,安全和安全。您还最好确保您的 PHP 正常工作,因为 1 个错误写入的文件现在可以关闭整个服务器。

我也绝对不会背着你的老板在你的服务器上练习。考虑购买便宜的虚拟机,可以托管在其他地方,也可以托管在您自己的虚拟机机器上

【讨论】:

  • 是的,我不想练习在我们公司的服务器上测试我的问题/理论。虽然可能会看一个便宜的虚拟机,但我不确定它是否违反 SO 条款,但任何人都可以推荐一个 DIRT 便宜的虚拟服务器来学习吗?
  • 如果你有一台中规中矩的台式机,virtualbox.org虚拟化软件
【解决方案3】:

可以。它是一种编程语言,它可以做任何事情

这完全取决于谁在运行它。如果它的root 它可以做任何事情。如果它只是一个普通用户bob。它不能在家之外做很多事情/home/bob。 Apache 也类似于 bobApache 通常在 www-datawwwapache 用户名下运行。

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 2015-02-01
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多