我有一个用户“joe”,我想授予他权限/var/www/html/
以便我可以使用 ftp(使用 vsftpd)
因此我运行这个命令:
sudo chown -R joe /var/www/html/
一切顺利,我现在可以通过 ftp 读取、写入、删除等文件。
但是,现在我网站上的任何页面都会返回 403 Forbidden 错误。
这是因为我已将这些目录的所有权授予“joe”,因此,为了使我的网站再次可访问,我运行:
sudo chown -R www-data /var/www/html/
但这意味着“joe”无法通过 ftp 访问这些文件。
有什么方法可以让 joe 读取和写入文件,同时允许 www-data 访问这些文件,以便我的网页不会被 403 禁止?
我曾尝试创建一个群组:
sudo addgroup users
sudo add user joe users
sudo add user www-data users
但我不知道如何向整个组发送 chown,我只知道例如:
sudo chown -R joe:users /var/www/html
但这又存在同样的问题。
我正在使用带有 apache2 的 Ubuntu 14.04 x64,并且 joe 具有 root 权限(ALL=(ALL:ALL) ALL
)
答案1
如果您查看目录和文件的权限,您将看到拥有它们的帐户以及它们所属的组。例如:
$ ls -ld /var/www/html
drwxr-xr-x. 2 joe joe 23 Mar 12 11:08 /var/www/html
在上面的例子中,帐户 joe 拥有目录,并且目录属于组 joe;组是行中的第二个“joe”。组可能只包含一个帐户 joe,但我可以将其他帐户添加到该组。我可以users
像您一样创建一个名为的组并将目录与该组关联。您正在使用命令chown
,但还有一个chgrp
命令可以更改组。您可以使用该命令将文件和目录分配给组,也可以像使用一样更改组chown user:group
。例如,如果系统上有 www-data 组,则可以使用以下命令(您可以通过发出命令来查看组及其成员cat /etc/group
):
sudo chgrp www-data /var/www/html
然后我可能会看到类似下面的内容:
# ls -ld /var/www/html
drwxr-xr-x. 2 joe www-data 23 Mar 12 11:08 /var/www/html
或者,如果您愿意,您可以将目录的组设为users
您使用chown -R joe:users
命令创建的新组。
当我发出ls -ld
命令检查目录的权限时,我看到了以下内容:
drwxr-xr-x
“d” 告诉我这是一个目录。接下来的 3 个字符告诉我所有者的权限是读取、写入和执行。接下来的 3 个字符显示组的权限,在上面的示例中是读取和执行。我可以使用以下命令授予组写入权限:
chmod g+w /var/www/html
-R
您还可以使用或选项以递归方式更改上述目录的权限
--recursive
。
如果你调整组权限正确来说,您可以实现您想要做的事情,这样如果 Apache 以 www-data 的身份运行,并且 www-data 对目录及其中的文件和子目录具有适当的组权限,Apache 将能够根据需要读取和写入文件。看来您已经将所有者和组设置为可以工作的设置,因此您现在可能只需要使用命令为组设置users
权限chmod
。
答案2
我认为你可以尝试:
setfacl -R -m u:joe:rw /var/www/html
您可以通过执行以下操作来测试结果:
getfacl /var/www/html
您应该会看到类似以下内容的内容:
# file: var/www/html
# owner: root
# group: root
user::rwx
user:joe:rw-
group::r-x
mask::rwx
other::r-x