www-data权限?

q3d*_*q3d 96 apache permissions sudo

所以我在/ var/www(称为cake)中有一个目录,我需要允许www-data写入它,但我也想写它(不必使用sudo).如果我机器上的其他用户(或黑客)试图修改该目录中的文件,我害怕将权限更改为777.我如何只允许访问自己和Apache的www-data?

小智 156

sudo chown -R yourname:www-data cake
Run Code Online (Sandbox Code Playgroud)

然后

sudo chmod -R g+s cake
Run Code Online (Sandbox Code Playgroud)

第一个命令更改所有者和组第二个命令添加s属性,该属性将保留具有相同组权限的蛋糕中的新文件和目录

  • 为什么chmod g + s是递归的? (3认同)
  • @BenRogmans这是-R使它递归. (2认同)
  • 用户可以如何处理由 www-data 创建的文件在 cake 本身中,以及由 www-data 创建的文件在由 www-data 创建的目录中?例如,关于编辑、重命名、删除操作?据我了解,在 www-data 创建的目录中无法重命名和删除,用户根本无法编辑由 www-data 创建的文件。 (2认同)

Kwa*_*adz 42

正如Slicehost的一篇文章所述:

用户设置

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

sudo usermod -a -G www-data demo
Run Code Online (Sandbox Code Playgroud)

这会将用户"演示"添加到"www-data"组.确保使用-a和-G选项以及上面显示的usermod命令.

您需要注销并重新登录才能启用组更改.

立即检查组:

groups
...
# demo www-data
Run Code Online (Sandbox Code Playgroud)

所以现在我是两个小组的成员:我自己的(演示)和Apache小组(www-data).

文件夹设置

现在我们需要确保public_html文件夹由主用户(demo)拥有,并且是Apache组(www-data)的一部分.

我们设置一下:

sudo chgrp -R www-data /home/demo/public_html
Run Code Online (Sandbox Code Playgroud)

当我们谈论权限时,我将添加关于sudo命令的快速注释:如上所示使用绝对路径(/ home/demo/public_html)而不是相对路径(〜/ public_html)是一个好习惯.它确保sudo正在正确的位置使用.

如果你有一个带有符号链接的public_html文件夹,那么请注意该命令,因为它将遵循符号链接.在工作的public_html文件夹的情况下,手动更改每个文件夹.

SETGID

好到目前为止,但请记住我们刚给出的命令只影响现有文件夹.什么新东西呢?

我们可以设置所有权,因此"www-data"组中也有新内容.

第一个命令将更改public_html目录的权限以包含"setgid"位:

sudo chmod 2750 /home/demo/public_html
Run Code Online (Sandbox Code Playgroud)

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

如果我们需要允许对Apache的写访问权限,例如上传目录,则设置该目录的权限,如下所示:

sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads
Run Code Online (Sandbox Code Playgroud)

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


D.S*_*nap 5

假设您想通过 sftp 进入一个与 www-data 共享读取、写入和执行权限的目录,您应该这样做:

1 - 将您自己添加到 www-data 组

sudo usermod -a -G www-data <your_user>
Run Code Online (Sandbox Code Playgroud)

2 - 递归设置文件夹和文件的所需用户:组所有权

sudo chown -R <your_user>:www-data <your_folder>
Run Code Online (Sandbox Code Playgroud)

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

sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +
Run Code Online (Sandbox Code Playgroud)