【发布时间】:2012-02-26 07:53:50
【问题描述】:
所以我在 /var/www 中有一个目录(称为 cake),我需要允许 www-data 写入它,但我也想写入它(不必使用 sudo)。我害怕将权限更改为 777,以防我机器上的其他用户(或黑客)尝试修改该目录中的文件。如何只允许我自己和 Apache 的 www-data 访问?
【问题讨论】:
标签: apache permissions sudo
所以我在 /var/www 中有一个目录(称为 cake),我需要允许 www-data 写入它,但我也想写入它(不必使用 sudo)。我害怕将权限更改为 777,以防我机器上的其他用户(或黑客)尝试修改该目录中的文件。如何只允许我自己和 Apache 的 www-data 访问?
【问题讨论】:
标签: apache permissions sudo
假设你想 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 {} +
【讨论】:
sudo chown -R yourname:www-data cake
然后
sudo chmod -R g+s cake
第一个命令更改所有者和组。
第二个命令添加 s 属性,这将使 cake 中的新文件和目录具有相同的组权限。
【讨论】:
用户设置
让我们先将主用户添加到 Apache 用户组:
sudo usermod -a -G www-data demo这会将用户“demo”添加到“www-data”组中。请确保您使用 上面显示的 usermod 命令的 -a 和 -G 选项。
您需要退出并重新登录才能启用该群组 改变。
现在检查组:
groups ... # demo www-data所以现在我是两个组的成员:我自己的(演示)和 Apache 组 (www-数据)。
文件夹设置
现在我们需要确保 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 文件夹,那么 小心该命令,因为它将遵循符号链接。在那些 工作 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权限只需要设置一次,因为新文件会 自动分配正确的所有权。
【讨论】: