所以我在/var/www (称为 cake)中有一个目录,我需要允许 www-data 写入它,但是我也想写入它(不必使用 sudo)。如果我机器上的其他用户(或黑客)试图修改该目录中的文件,我不敢将权限更改为777。如何只允许自己和 Apache 的 www-data 访问?
sudo chown -R yourname:www-data cake
那么
sudo chmod -R g+s cake
第一个命令更改所有者和组。
第二个命令添加 s 属性,该属性将使新文件和目录保持在具有相同组权限的 cake 中。
如 Slicehost 的一篇文章所述:
用户设置 因此,让我们从将主用户添加到 Apache 用户组开始: sudo usermod -a -G www-data demo 这将用户“ demo”添加到“ www-data”组 使用上面显示的 usermod 命令的 -a 和 -G 选项。 您需要注销并重新登录才能启用该组 改变。 Check the groups now: groups ... # demo www-data So now I am a member of two groups: My own (demo) and the Apache group (www-data). 文件夹设置 现在我们需要确保 public _ html 文件夹为主用户所有 (demo)并且是 Apache 组(www-data)的一部分。 我们来安排一下: sudo chgrp -R www-data /home/demo/public_html 在我们讨论权限时,我将添加一个关于 Sudo 命令: 使用绝对路径是一个好习惯 (/home/demo/public _ html) ,而不是相对路径 (~/public _ html) 位置。 如果您有一个带有符号链接的 public _ html 文件夹,那么 请小心使用该命令,因为它将遵循符号链接 例如,一个可工作的 public _ html 文件夹,手动更改每个文件夹。 赛吉德 目前为止一切正常,但是请记住我们刚刚下达的命令只是影响 现有的文件夹,有什么新的吗? We can set the ownership so anything new is also in the 'www-data' 小组。 第一个命令将更改 public _ html 的权限 目录中包含“ setgid”位: sudo chmod 2750 /home/demo/public_html 这将确保任何新文件都被分配给组“ www-data” 如果你有子目录,你需要为每个子目录运行命令 子目录(此类权限不适用于’-R’)。 幸运的是,新的子目录将使用“ setgid”位创建 自动设定。 如果我们需要允许对 Apache 的写访问,那么就需要对上传目录进行写访问 for example, then set the permissions for that directory like so: sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads The permissions only need to be set once as new files will 自动分配正确的所有权。
因此,让我们从将主用户添加到 Apache 用户组开始:
sudo usermod -a -G www-data demo
这将用户“ demo”添加到“ www-data”组 使用上面显示的 usermod 命令的 -a 和 -G 选项。
您需要注销并重新登录才能启用该组 改变。
Check the groups now:
groups ... # demo www-data
So now I am a member of two groups: My own (demo) and the Apache group (www-data).
现在我们需要确保 public _ html 文件夹为主用户所有 (demo)并且是 Apache 组(www-data)的一部分。
我们来安排一下:
sudo chgrp -R www-data /home/demo/public_html
在我们讨论权限时,我将添加一个关于 Sudo 命令: 使用绝对路径是一个好习惯 (/home/demo/public _ html) ,而不是相对路径 (~/public _ html) 位置。
如果您有一个带有符号链接的 public _ html 文件夹,那么 请小心使用该命令,因为它将遵循符号链接 例如,一个可工作的 public _ html 文件夹,手动更改每个文件夹。
目前为止一切正常,但是请记住我们刚刚下达的命令只是影响 现有的文件夹,有什么新的吗?
We can set the ownership so anything new is also in the 'www-data' 小组。
第一个命令将更改 public _ html 的权限 目录中包含“ setgid”位:
sudo chmod 2750 /home/demo/public_html
这将确保任何新文件都被分配给组“ www-data” 如果你有子目录,你需要为每个子目录运行命令 子目录(此类权限不适用于’-R’)。 幸运的是,新的子目录将使用“ setgid”位创建 自动设定。
如果我们需要允许对 Apache 的写访问,那么就需要对上传目录进行写访问 for example, then set the permissions for that directory like so:
sudo chmod 2770 /home/demo/public_html/domain1.com/public/uploads
The permissions only need to be set once as new files will 自动分配正确的所有权。
假设您想要 sftp 进入一个共享使用 www-data 的读取、写入和执行权限的目录,您应该这样做:
1-加入 www-data 组
sudo usermod -a -G www-data <your_user>
递归地设置所需用户: 文件夹和文件的组所有权
sudo chown -R <your_user>:www-data <your_folder>
3-为所有用户添加权限(读写执行)(a + rwx) ; 限制来自其他用户的权限(o-rwx) ; 为在该目录下创建的每个新文件(ug + s)设置相同的(继承的文件夹) user: group。这将递归地并且只在文件夹中执行(可能正是您想要的)
sudo find <folder_name> -type d -exec chmod a+rwx,o-rwx,ug+s {} +