www-data 权限是什么?

130

我有一个在 /var/www 目录下的目录(名为cake),我需要允许 www-data 进行写入,但我也想自己能够写入它(而不必使用sudo)。我担心改变权限为777,因为这样其他用户(或黑客)可能尝试修改该目录中的文件。如何只允许我和Apache的www-data访问?

3个回答

211
sudo chown -R yourname:www-data cake

然后

sudo chmod -R g+s cake

第一条命令更改所有者和组。

第二条命令添加了"S"属性,这将使新文件和目录在蛋糕中具有相同的组权限。


3
为什么chmod g+s会递归应用? - Ben Rogmans
不知道 g+s,非常非常方便! - FRAGA
2
用户可以如何处理由cake内部的www-data创建的文件,以及由www-data创建的目录中的文件呢?例如,编辑、重命名、删除等操作?据我所知,在由www-data创建的目录中,重命名和删除是不可能的,而用户根本无法编辑由www-data创建的文件。 - qdinar

54

正如Slicehost的一篇文章所述:

用户设置

那么,让我们首先将主用户添加到Apache用户组中:

sudo usermod -a -G www-data demo

这将把用户“demo”添加到“www-data”组中。确保您在上面显示的usermod命令中同时使用-a和-G选项。

您需要注销并重新登录以启用组更改。

现在检查组:

groups
...
# demo www-data

现在我是两个组的成员:我的组(demo)和Apache组(www-data)。

文件夹设置

现在我们需要确保public_html文件夹归主用户(demo)所有并且属于Apache组(www-data)。

让我们进行设置:

sudo chgrp -R www-data /home/demo/public_html

关于权限,我想在sudo命令方面添加一条快速说明:最好使用绝对路径(/home/demo/public_html),而不是相对路径(~/public_html)。这可以确保sudo在正确的位置使用。

如果您有一个已经存在符号链接的public_html文件夹,请小心使用该命令,因为它将遵循符号链接。在这种情况下,手动更改每个文件夹。

Setgid

到目前为止还不错,但请记住我们刚才给出的命令只影响现有的文件夹。那么新创建的呢?

我们可以设置所有新内容的所有权都属于“www-data”组。

第一个命令将更改public_html目录的权限以包括“setgid”位:

sudo chmod 2750 /home/demo/public_html

这将确保任何新文件都会被赋予组 'www-data'。如果有子目录,您需要为每个子目录运行该命令(此类型的权限不适用于'-R')。幸运的是,新的子目录将自动设置'setgid'位。

如果我们需要允许Apache对上传目录进行写访问,那么可以将该目录的权限设置如下:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads

只需要设置一次权限,因为新文件将自动分配正确的所有权。


这个解决方案对我很有效。在此之前,我总是使用root用户从终端运行服务器。有了这个解决方案,我可以上传文件到具有770权限的目录中。这太棒了,因为在此之前我只能使用777权限上传文件。 - Ifan Iqbal

5
假设您想要通过sftp连接到一个目录,该目录具有与www-data共享的读取、写入和执行权限,则需要执行以下操作:
1- 将自己添加到www-data组。
sudo usermod -a -G www-data <your_user>

2 - 递归地设置文件夹和文件所属的用户组权限

sudo chown -R <your_user>:www-data <your_folder>

3 - 这将向所有用户(a+rwx)添加权限(读、写和执行);从其他人(o-rwx)那里限制权限;为在该目录下创建的每个新文件设置相同的用户:组(文件夹继承)(ug+s)。这将递归地执行,仅在文件夹中执行(可能正是您想要的)。

sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接