所以我在/ var / www(称为cake)中有一个目录,我需要允许www-data写入它,但我也想写它(不必使用sudo)。如果我机器上的其他用户(或黑客)试图修改该目录中的文件,我害怕将权限更改为777。我如何只允许访问自己和Apache的www-data?
答案 0 :(得分:145)
sudo chown -R yourname:www-data cake
然后
sudo chmod -R g+s cake
第一个命令更改所有者和组 第二个命令添加了s属性,该属性将使蛋糕中的新文件和目录保持相同的组权限
答案 1 :(得分:42)
用户设置
让我们首先将主用户添加到Apache用户组:
sudo usermod -a -G www-data demo
将用户'demo'添加到'www-data'组。确保你使用 -a和-G选项都带有上面显示的usermod命令。
您需要退出并重新登录才能启用该群组 变化
立即检查群组:
groups ... # demo www-data
所以现在我是两个小组的成员:我自己的(演示)和Apache小组 (WWW的数据)。
文件夹设置
现在我们需要确保public_html文件夹归主要用户所有 (演示)并且是Apache组(www-data)的一部分。
让我们设置一下:
sudo chgrp -R www-data /home/demo/public_html
当我们谈论权限时,我会添加一个快速注释 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
这将确保任何新文件都被赋予组'www-data'。如果 你有子目录,你想要为每个子目录运行该命令 子目录(此类权限不适用于'-R')。 幸运的是,将使用'setgid'位创建新的子目录 自动设定。
如果我们需要允许对Apache的写访问权限,则需要上传目录 例如,然后设置该目录的权限,如下所示:
sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads
只需将新文件设置为权限即可 自动分配正确的所有权。
答案 2 :(得分:0)
假设您想通过 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 {} +