【问题标题】:PHP: Creating files and preserving file permissionsPHP:创建文件并保留文件权限
【发布时间】:2011-06-12 21:42:59
【问题描述】:

我现在有一个简单的架构,看起来有点像这样:

用户发送电子邮件 > Postfix > Procmail > PHP 脚本 > 写入第三方 Web 应用

第三方网络应用恰好是一个 CMS(我正在使用它的 API 来创建记录)。

我遇到的问题是用户正在向“支持”用户发送电子邮件,而 Web 服务器在用户“apache”上运行。

由于此设置,所有附件都是使用“support”用户和“support”组创建的,但是我需要将它们实际创建为“apache:apache”(以便 CMS 可以读取和在其模板中显示这些附件)。

我知道 PHP 有函数 chown 和 chmod,但是当我尝试从命令行运行这些命令时,我无法将文件的所有权移交给用户“apache”。

我是否有一种简单的方法可以根据创建目录保留文件权限?这是我需要从 php.ini 更改的内容吗?或者也许我需要重新考虑架构?

感谢您的帮助!

【问题讨论】:

    标签: php permissions file-permissions


    【解决方案1】:

    为了解决这个问题,我最终做了一些狡猾的事情。

    在以其他用户身份创建文件后,我运行了 chgrp 和 chmod 命令(使用 PHP API),一切正常。感谢您的回复。

    【讨论】:

      【解决方案2】:

      我认为也许您需要重新考虑您的架构,并想出一种方法,让第三方应用程序以 apache 运行来创建文件。一种方法是使用 setuid 脚本来调用 API。

      chown 通常除了 root 之外无法工作,因为让非 root 用户将文件所有权更改给其他人通常是一个安全漏洞。

      【讨论】:

        【解决方案3】:

        如果您正在运行 Linux,则可以通过执行以下操作在文件系统级别解决此问题:

        • chown 支持:apache foo
        • chmod 775 foo
        • chmod g+s foo

        其中 foo 是您保存文件的文件夹。

        现在所有(新创建的)文件都应该归 support:apache 所有。如果您确保将文件创建为 664,那么两个地方都可以读/写它。

        这不是解决问题的唯一(甚至可能不是最好的)方法,但它可能是最简单的。

        【讨论】:

          猜你喜欢
          • 2015-03-26
          • 2016-04-21
          • 1970-01-01
          • 2012-04-17
          • 1970-01-01
          • 2016-08-14
          • 1970-01-01
          • 2014-06-16
          • 2012-12-16
          相关资源
          最近更新 更多