向用户授予对www数据拥有的/ var / www的权限


36

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

site1: /var/www/site1/public_html/

site2: /var/www/site2/public_html/

之前,我曾使用root用户来管理文件,然后将它们返回给www-data我完成操作(WordPress站点,WP上载才能正常工作)。这可能不是最好的方法。

我正在尝试找到一种方法来创建另一个用户(可以将其称为user1),该用户有权编辑site1中的文件,但不能编辑site2中的文件,并且不会阻止文件“归所有者” www-data。有什么办法可以做到吗?

Answers:


70

如果我们检查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的任何用户都将享受授予该组的所有特权。

现在以用户1身份登录,移至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网络服务器的运行方式,请发出命令,

ps aux | grep apache2 | less

1
您还需要将www-data添加到site1组。在Wordpress Web界面中上载和更改文件时。更改是由Apache使用www-data用户完成的。因此,大多数情况下,读取特权是不够的。
2013年

3
Permission denied消息并非归因于“主要组”,而是该用户尚未实际位于该组中(就操作系统而言)。如果您注销并重新登录,它将按预期运行(不运行newgrp - site1)。
0b10011 2014年

www-data如果最终还是要添加www-data,这与授予组写权限有site1什么不同?
马特

@MattBorja您的查询不是很清楚。您是否在问给名为www-data' write permissions? If that is the question, www-data 的组提供错误是不是一个组,而是一个用户。如果我误解了您的问题,请告诉我。
Masroor

我认为,这不是安全的配置,因为用户可以通过php脚本(例如php文件管理器)访问彼此的站点。
qdinar '17

7

创建两个组: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在两个站点上都具有用户和组权限,每个用户都在各自的站点上具有组权限。


4

对于其主目录下有其wordpress根文件夹的用户:

Ubuntu / Apache的

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

    信用授予写权限www数据组

    您想呼叫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. 递归更改文件夹和子文件夹的组权限,以启用写权限:

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

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

  6. 递归更改文件和子文件的组权限,以启用写权限:

    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

您必须为所谓的“新用户”创建一个新组,然后将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组。


您的答案令人困惑,因为“授予了对site1的组级别访问权限”,您的意思是“将site1的组更改为new_group”还是更改了模式(chmod)?您的答案没有提到任何可以使安全性(或破坏事物)产生差异的模式。
Lekensteyn

我的意思是chmod通过撤消OTHERS的所有权限来更改模式()。
errikos

1

假设所有文件已经属于www-data用户组(可以使用ls -slah命令检查),该用户属于www-data组(文件列表中用户名之后的下一个列),则只需将您的用户添加到同一www-data组即可编辑这些文件

# usermod -aG www-data username

对于现有用户,或

# adduser username www-data

对于新创建的

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.