我有一个在 /var/www 目录下的目录(名为cake),我需要允许 www-data 进行写入,但我也想自己能够写入它(而不必使用sudo)。我担心改变权限为777,因为这样其他用户(或黑客)可能尝试修改该目录中的文件。如何只允许我和Apache的www-data访问?
我有一个在 /var/www 目录下的目录(名为cake),我需要允许 www-data 进行写入,但我也想自己能够写入它(而不必使用sudo)。我担心改变权限为777,因为这样其他用户(或黑客)可能尝试修改该目录中的文件。如何只允许我和Apache的www-data访问?
sudo chown -R yourname:www-data cake
然后
sudo chmod -R g+s cake
第一条命令更改所有者和组。
第二条命令添加了"S"属性,这将使新文件和目录在蛋糕中具有相同的组权限。
正如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
只需要设置一次权限,因为新文件将自动分配正确的所有权。
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 {} +