【问题标题】:How to give PHP write access to certain directories created by git?如何赋予 PHP 对 git 创建的某些目录的写入权限?
【发布时间】:2015-04-14 17:05:31
【问题描述】:

这里有几个类似的问题,such as this one,但这个问题(以及我读过的其他几个问题)的答案是:

首先让 PHP 自己创建目录。

我在我的网站上使用git,因此不可能允许 PHP “自行创建目录”。

为了进行更改,我在通过 SSH 登录到我的服务器时运行 git pull origin master 命令,这使文件的所有者成为我登录时使用的 cpanel 用户。

我需要 PHP 能够在某些目录中创建文件。是唯一的方法可以让chmod 文件夹到777,还是有更好的方法?

我对 Linux 权限没有很好的了解,但从我读到的内容来看,将目录和文件权限更改为 777 通常不是一个好主意。此外,如果我chmod777 的文件夹,我怀疑当我运行git pull origin master 时权限会被覆盖,虽然我还没有测试过。

【问题讨论】:

  • 使用shell_exec制作文件和目录
  • @Daan 如前所述,我使用的是git。它创建目录和文件。
  • 您可以将目录分配给运行网络服务器的用户。但我认为将任何内容写入 git checkout 的需求有点粗略。我建议将这些文件放在文档根目录之外,以便它们与 git 文件在物理上分开。
  • 好的,但是站点地图生成器并不是实时的(是吗?),并且可以从 cron 作为已经具有写入权限的用户运行——你不希望任何人在web 能够启动您的维护脚本。关于日志,如果您必须让它们可以通过网络访问,那么就不要将它们放在 git 已经创建的目录中 - 将它们放在新目录中,那么就不用担心冲突了。
  • 更好的是,将日志放在文档根目录之外的新目录中,从文档根目录中符号链接到它,然后确保您的 Web 服务器配置为从不从该目录执行 PHP。跨度>

标签: php linux git permissions chmod


【解决方案1】:
  1. Git 不会覆盖现有目录的权限。
  2. 您应该检查user apache(或您使用的任何http 服务器)正在运行。

对于 apache 来说很可能是 www-data

ps aux | grep http | cut -f 1 -d ' '
  1. 一旦您知道用户,https 服务器正在运行,请更改所有者。

这个shell命令很好:

chown -R www-data FOLDER_PHP_NEEDS_TO_WRITE_TO

上面将文件夹的所有者设置为www-data,显然给了https服务器写权限。

是否害怕失去对该目录的控制权,请通过group权限:

chgrp -R www-data FOLDER_PHP_NEEDS_TO_WRITE_TO
chmod -R g+w FOLDER_PHP_NEEDS_TO_WRITE_TO

现在您仍然是所有者,而 http 服务器可以在那里写入,因为它属于该组。您也可以采用其他方式,将自己添加到 www-data 组,然后将该组的写入权限授予所需文件夹。

另一种选择是将git 运行为www-data

sudo runuser -l  www-data -c 'git pull'

但我会建议使用组的解决方案。

【讨论】:

  • 如果我将文件夹chown 给另一个用户,这不会影响git 更新文件夹中文件的能力,以及我通过ftp 进行编辑的能力吗?
  • 注意:如果 FOLDER_PHP_NEEDS_TO_WRITE_TO 不为空,这是个坏主意,因为您的 Web 服务器进程现在有权修改其内容。
  • @AlexHowansky 我敢打赌,文件夹正在被制作为网络服务器可写,以便网络服务器写入这些文件夹:)
  • 是的,我理解其意图——但如果此文件夹已经包含(例如)来自 git 存储库的 PHP 代码,那么您刚刚让网站能够覆盖其自己的源代码。这就是为什么一般来说,您永远不希望文档根目录下的任何内容都可以被 Web 服务器进程写入。
【解决方案2】:

这可能是您可以使用的东西 - 我自己没有尝试过,所以我不知道它是否真的有效:

https://stackoverflow.com/a/3208143/609855

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 2023-03-23
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多