授予www-data own / 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
“拥有”的文件。 我有什么方法可以做到这一点吗?
如果我们检查site1的所有权,我们会发现这样的事情,
ls -ld /var/www/site1/ drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/
这意味着该目录由用户root,group root拥有。 虽然用户root具有对目录的写入权限(以及读取和执行权限),但组root只具有读取和执行权限。
我们希望将组所有权更改为另一个(新)组,并将user1添加到该特定组。 我们也将授予该特定组的写入权限。
创建一个新组,
sudo addgroup site1
将user1添加到新创建的组中,
sudo adduser user1 site1
检查user1是否真的在该组中,
groups user1
输出应该是一个类似的列表,
user1 : 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
创建两个组: site1grp
和site2grp
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
在两个站点上都拥有用户和组权限,每个用户都拥有各自站点的组权限。
您必须为所谓的“新用户”创建一个新组,然后将www-data和“新用户”添加到该组:
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的/阿帕奇
-
将您的用户添加到www-data组:
CREDIT 向www-data组授予写入权限
您想要为您的用户调用
usermod
。 那就是:sudo usermod -aG www-data yourUserName
假设存在
www-data
组 -
检查您的用户是否在
www-data
组中:groups yourUserName
你应该得到类似的东西:
yourUserName : yourUserGroupName www-data
yourUserGroupName通常类似于您的用户名
-
递归更改文件夹的组所有权,保持用户所有权
chown yourUserName:www-data -R yourWebSiteFolder/*
-
将目录更改为yourWebSiteFolder
cd yourWebSiteFolder
-
递归更改文件夹和子文件夹的组提交以启用写入权限:
find . -type d -exec chmod -R 775 {} \;
模式
/home/yourUserName/yourWebSiteFolder/'
从0755 (rwxr-xr-x)
更改为0775 (rwxrwxr-x)
-
递归更改文件和子文件的组提交以启用写入权限:
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。
假设所有文件都属于www-data
用户(您可以使用ls -slah
命令检查)属于www-data
组(文件列表中的用户名之后的下一列),您只需将用户添加到相同的www-data
组允许编辑这些文件
# usermod -aG www-data username
对于现有用户,或
# adduser username www-data
对于新创建的