当前位置: 首页>>技术教程>>正文


授予www-data拥有/var/www的用户权限

, , ,

问题描述

我为一些网站设置了一个简单的Web服务器,其布局类似于:

site1:/var/www/site1/public_html/

site2:/var/www/site2/public_html/

我以前使用root用户来管理文件,然后在我完成时将它们返回给www-data(WordPress站点,WP上传需要工作)。这可能不是最好的方法。

我正在尝试找到一种方法来创建另一个用户(让我们称之为user1),该用户有权编辑site1中的文件,但不能编辑site2,并且不会通过www-data停止文件’owned’。我有什么方法可以做到这一点吗?

最佳解决思路

如果我们检查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,group 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

次佳解决思路

创建两个组:site1grpsite2grp

sudo groupadd site1grp && sudo groupadd site2grp

www-data添加到两个组。

sudo adduser www-data site1grp && sudo adduser www-data site2grp

将user1和user2添加到适当的组

sudo adduser user1 site1grp && sudo adduser user2 site2grp

更改站点文件夹的权限,以便用户所有者为www-data,并且组所有者是相应的组

sudo chown -R www-data:site1grp /var/www/site1  && sudo chown -R www-data:site2grp /var/www/site2

现在,www-data在两个站点上都具有用户和组权限,并且每个用户都拥有其各自站点的组权限。

第三种解决思路

您必须为所谓的”new user”创建一个新组,然后将www-data和”new user”添加到该组:

sudo gpasswd -a new_user new_group

然后,您可以将所有者更改为new_user并将组更改为new_group

sudo chown -R new_user:new_group /var/www/site1

然后,您需要为site1提供组级访问权限。 www-data仍然可以访问该站点,因为它属于new_group,而new_user将无法访问site2,因为他不属于拥有site2的www-data组。

第四种思路

对于那些在其主文件夹下有wordpress根文件夹的人:

Ubuntu的/阿帕奇

  1. 将您的用户添加到www-data组:

    CREDIT Granting write permissions to www-data group

    您想要为您的用户调用usermod。那就是:

    sudo usermod -aG www-data yourUserName
    

    假设存在www-data

  2. 检查您的用户是否在www-data组中:

    groups yourUserName
    

    你应该得到类似的东西:

    yourUserName : yourUserGroupName www-data
    

    yourUserGroupName通常与您的用户名类似

  3. 递归更改文件夹的组所有权,保持用户所有权

    chown yourUserName:www-data -R yourWebSiteFolder/*
    
  4. 将目录更改为yourWebSiteFolder

    cd yourWebSiteFolder
    
  5. 递归更改文件夹和sub-folders的组提交以启用写入权限:

    find . -type d -exec chmod -R 775 {} \;
    

    /home/yourUserName/yourWebSiteFolder/'的模式从0755 (rwxr-xr-x)变为0775 (rwxrwxr-x)

  6. 递归更改文件的组提交和sub-files以启用写入权限:

    find . -type f -exec chmod -R 664 {} \;
    

    结果应该类似于:

    WAS:
    -rw-r--r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    CHANGED TO:
    -rw-rw-r--  1 yourUserName www-data  7192 Oct  4 00:03 filename.html
    

    相当于:

    chmod -R ug+rw foldername
    

    权限将是664或775。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2867.html,未经允许,请勿转载。