如果我们检查site1的所有权,我们会发现类似这样的内容,
ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/
这意味着该目录的所有者是用户root,组root。虽然用户root对该目录具有写权限(以及读和执行权限),但组root仅具有读和执行权限。
我们将希望将组所有权更改为另一个(新)组,并将user1添加到该特定组中。我们还将向该特定组授予写权限。
创建一个新的组,
sudo addgroup site1
将user1添加到新创建的组中。
sudo adduser user1 site1
检查user1是否真的在该组内。
groups user1
输出应该是一个类似的列表,
user1 : <other-groups> site1
现在我们可以更改您想要的目录的群组所有权。
sudo chown -vR :site1 /var/www/site1/
changed ownership of `/var/www/site1/' from root:root to :site1
授予此新组所有者写入权限。
sudo chmod -vR g+w /var/www/site1/
mode of `/var/www/site1/' changed from 0755 (rwxr-xr-x) to 0775 (rwxrwxr-x)
检查所有的更改是否确实存在,
ls -ld /var/www/site1/
drwxrwxr-x 2 root site1 4096 Oct 24 21:06 /var/www/site1/
所以,目录现在由用户root拥有,组site1。用户root和组site1都具有对该目录的写权限(以及读和执行权限)。属于组site1的任何用户都将享受该组授予的所有特权。
现在以user1身份登录,进入site1目录并尝试在该目录中创建一个文件,
echo "My User1 Site" > index.html
bash: index.html: Permission denied
这个失败是因为很可能user1的主要组不是site1。所以,请改成那个组。
newgrp - site1
尝试重新创建文件(注意,在更改组后,您已被移动到user1的主目录),现在应该可以正常工作。
由于创建的文件将具有全局读取权限,Apache(或您的Web服务器)在访问它们时不会遇到任何问题。
编辑
此外,正如
dan08在评论中指出的那样,您需要将www-data添加到site1组中。
sudo adduser www-data site1
在许多(但不是所有)发行版中,www-data 是 Apache Web 服务器运行的用户。这也意味着 Apache 所做的一切(尤其是包括 PHP 脚本)默认情况下都将使用用户 www-data(以及组 www-data)的权限来执行。WordPress 使用用户 www-data 来写入文件。
如果您想查看 Apache Web 服务器的运行方式,请执行以下命令:
ps aux | grep apache2 | less
newgrp - site1
)。 - 0b10011www-data
添加到site1
中并给予www-data
组写权限有何不同? - Matt Borjawww-data' 的组赋予写权限有什么问题吗?如果是这个问题,
www-data' 不是一个组,而是一个用户。请告诉我是否误解了你的问题。 - Masroor