我为一些网站设置了一个简单的网络服务器,其布局如下:
站点1:/var/www/site1/public_html/
站点2:/var/www/site2/public_html/
我以前使用 root 用户来管理文件,然后在www-data
完成后将它们归还给用户(WordPress 网站,WP Uploads 需要它才能工作)。这可能不是最好的方法。
我正在尝试找到一种方法来创建另一个用户(我们称之为 user1),该用户有权编辑 site1 中的文件,但没有权限编辑 site2 中的文件,并且不会阻止文件被“拥有” www-data
。我有什么办法可以做到这一点吗?
答案1
如果我们检查 site1 的所有权,我们会发现类似这样的情况,
ls -ld /var/www/site1/
drwxr-xr-x 2 root root 4096 Oct 24 21:06 site1/
这意味着该目录的所有者是 root 用户和 root 组。root 用户对该目录具有写入权限(以及读取和执行权限),而 root 组仅具有读取和执行权限。
我们希望将集团所有权更改为其他(新的)组并将用户 1 添加到该特定组。我们还将授予该特定组写入权限。
创建新群组,
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
答案2
对于那些将 wordpress 根文件夹放在主文件夹下的用户:
Ubuntu/Apache
将您的用户添加到 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/*
将目录更改为你的网站文件夹
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。
答案3
创建两个组:site1grp
和site2grp
sudo groupadd site1grp && sudo groupadd site2grp
添加www-data
到两个组。
sudo adduser www-data site1grp && sudo adduser www-data site2grp
将用户 1 和用户 2 添加到适当的组
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
在两个站点上都有用户和组权限,并且每个用户都对其各自的站点都有组权限。
答案4
假设所有文件都已经属于www-data
某个用户(你可以用命令检查ls -slah
),而该用户又属于www-data
某个组(文件列表中用户名后的下一列),那么你只需将你的用户添加到同一www-data
组即可允许编辑这些文件
# usermod -aG www-data username
对于现有用户,或
# adduser username www-data
对于新创建的一个