【问题标题】:Secure chmod privileges?安全 chmod 权限?
【发布时间】:2011-03-25 16:55:10
【问题描述】:

标准的 chmod 权限是文件的“644”和目录的“755”,不是吗?

在大多数情况下,PHP 不需要写入文件或目录。那我就不能拿所有组的写权限吗?

我可以将“444”分配给所有文件,将“555”分配给所有目录。

这样不是更安全吗?

提前致谢!

注意:chmod() 在我的 PHP 的 disable_functions 列表中。

【问题讨论】:

    标签: php apache unix chmod


    【解决方案1】:

    新创建的文件和目录的默认权限由umask 环境变量设置。文件的所有者和 root 可以更改权限。

    如果您不需要在应用中使用 chmod,请将其保留在禁用列表中。他们看待安全性的方式是:许多比我聪明的人现在使 chmod 成为我的应用程序中更安全的部分之一。因此,我会花我的空闲时间来确保其他部分的安全。

    如果您将应用程序自动化,则可以在服务器上将您的应用程序设为只读。但是,当您对应用程序代码进行更改时,这会让您感到非常困难。在某些时候,您会反复进行一些代码更改并在服务器上测试它们......然后忘记将文件/目录权限重置为只读。

    如果您的生产机器上只有 1 个用户帐户,我会坚持使用默认权限 - 事情可能会为您管理。或者您可以删除组和“其他”权限,如下所述。

    典型的生产设置是拥有一个您所属的应用程序组。您还需要一个单独的用户来运行您的 php 应用程序。保留所有者和组的完全权限,并删除“其他”的所有权限。这样:

    • 开发者保留他们的个人登录信息 - 您可以跟踪谁在什么时间做了什么。
    • 您和其他开发人员可以将新代码复制到服务器。
    • 应用程序可以运行代码。
    • 应用程序无法访问代码之外的任何内容。
    • 其他用户无法看到您的代码。

    我猜管理您的生产服务器是别人的工作?他们会花时间确保没有人可以登录和四处闲逛。虽然您确实需要确保没有人可以运行操作系统命令,但我认为最好的起点是了解 xss。默认的php服务器设置应该没问题。应用程序中最不安全的部分,是只有你见过的部分。 如果有人要访问系统调用,很可能是通过表单。即使您消除了系统调用,表单仍然容易存储 javascript。除非您在应用程序中存储信用卡,否则更有可能的目标是用户浏览器中的密码/会话。

    【讨论】:

    • 感谢您的详细解答。你是对的,别人正在照顾我的服务器。但是我问这个问题是因为有人设法将远程文件上传到我的根目录,并且他通过调用这个远程脚本将恶意代码插入到其他几个文件中。如果您使目录和文件不可写,这种情况不应该再次发生,对吧?
    • 不幸的是,可能会再次发生某些事情。您将关闭一些功能,但不会阻止访问。在网站的某处,可以访问做某事。在根目录中创建文件在程序堆栈的下方。你需要消除它上面的差距。如果您还不能确定那是什么,那么更改您的文件权限可能会在短期内有所帮助。它可能会阻止某人自动化这种精确的黑客攻击。修复您的网站会很臭,只是让机器人监控并重做它。这将是向 disabled_functions (ty SirDarius) 添加更多内容的好时机
    【解决方案2】:

    这并不安全,因为 PHP 始终可以执行 chmod 777,即使在 000-chmoded 文件上(如果它们归 PHP 所有)。 但是,它更安全,因为您不能在不修改之前写入此文件。

    【讨论】:

    • 但是如果 chmod() 在 PHP 的 disable_functions 列表中,它是非常安全的,不是吗?
    • 通常如果禁用 chmod,您希望能够更改权限。检查umask功能是否开启。使用此功能,您可以更改文件的标准权限!!!
    • 请注意禁用任何允许执行系统命令的功能,例如 system,因为可以调用 system("chmod 777 $file");
    【解决方案3】:

    对不起我的英语。

    我在考虑三个可能的原因。

    1. 检查 php.ini 中的 safe_mod 标志,如果 safe_mod 为 ON,您可能会遇到该功能的一些问题。
    2. 如果您有 plesk,如果您与其他未使用 plesk 创建的用户创建文件夹或文件,则会遇到问题。
    3. 您可能缺少 php 库。

    【讨论】:

      【解决方案4】:

      chmod() 在我的 PHP 的 disable_functions 列表中。
      那不是更安全吗?

      使用disable_functions 可以禁用特定功能。
      如果chmod()出现在disable_functions指令中,使用起来并不安全;它只是被禁用,使用 chmod() 的 PHP 代码会发出警告。

      指令 disable_functions 不应与 Safe Mode 指令混淆。即使指令 safe_mode 设置为 0,disable_functions 仍处于活动状态;当safe_mode 被启用时,some functions 被禁用或被限制。

      注意安全模式在 PHP 5.3 中已被弃用;这意味着该指令在 PHP 5.3 中仍然被接受,但它可能不再被使用。

      【讨论】:

      • 这是一个很好的答案,但是对于错误的问题,不是吗? :P
      • OP 说chmod() 列在disable_functions 指令中,他问那不是更安全吗? 我回复了。
      • 在评论中,OP 还问 但是如果 chmod() 在 PHP 的 disable_functions 列表中,它是非常安全的,是吗?
      • 我可以分配 [...] 这样不是更安全吗?
      • 你的意思是这个问题是关于使用“444”作为目录和“555”作为文件的相关问题吗?我认为这个问题与前一句有关,而不是与前一句有关。我将在接下来的 12 小时内删除我的答案。
      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 2011-08-04
      • 2012-11-24
      • 2017-05-08
      相关资源
      最近更新 更多