在全新安装 Ubuntu 后,我试图弄清楚如何为 Apache2 执行权限。我使用我的设置对 CraftCMS 网站进行本地开发。这意味着 Apache 需要能够提供文件,我需要能够编辑文件,并且 CraftCMS php 命令行工具必须能够从终端运行。这必须适用于多个虚拟主机。
我已经建立了工作流程,但我不确定这是否是实现我想要的一切的正确方法。
所以我做了以下事情;
安装完所有内容后,我运行以下命令来设置权限:
sudo adduser $USER www-data
sudo chown $USER:www-data -R /var/www
sudo chmod 0774 -R /var/www
sudo chmod g+s -R /var/www
- 第一个命令将我添加到组 www-data(apache2 组)。
- 第二行将子文件夹的所有者和组更改
/var/www/
为我作为所有者,www-data 作为组。 - 第三行添加权限,以便所有者和组可以读写和执行。其他人只能读取。
- 第四行确保其中的任何新文件和文件夹
/var/www
都具有相同的权限。
到目前为止,一切都按计划进行。我可以编辑文件,apache 可以在本地运行网站。现在无法使用的一件事是命令行工具,./craft
因为它没有在那里运行的权限。为了解决这个问题,我想出了以下解决方案:
alias craft="sudo -u www-data php ./craft"
使用此别名,我可以./craft
以 www-data 的身份运行命令,使其始终运行,因为该组具有在文件/var/www
夹内执行所需的所有权限。 (我不确定这是否是解决这个问题的好方法。)
就是这样,一切都“正常”,但感觉像是一种“黑客”式的工作方式。我不确定这是否是它应该的工作方式。我很想听到改进。
答案1
sudo chmod 0774 -R /var/www
您应该将其设置为 2 个命令。1 表示文件。1 表示目录。对于其他命令,使用 0 更为安全:通常,您只希望用户和组能够对文件执行任何操作。最低限度的权限应设置为:
find . -type f -exec chmod 640 {} \
find . -type d -exec chmod 750 {} \
并不是说你必须这样做!644、755 或 774 稍微宽松一些,但也可以。低于 640/750 也是可能的:600 和 700 不需要组,但这种情况很少发生。我倾向于使用这两个命令,如果某些命令不起作用(即来自网络服务器的禁止通知),我会“提升”权限并重试。如果我最终得到一个正常运行的网站,而我需要“提升”其他网站,我知道有一个文件的所有者或权限不正确。
别名 craft="sudo -u www-data php ./craft"
这可行,但有必要吗?您说您使用了 774 作为权限,因此您的组应该能够执行它。使用以下命令检查用户
groups
你确实在群组里www-data
。