apache 和本地用户的用户权限

Or *_*r W 3 permissions file-permissions apache-2.2

我正在尝试user1www-data(apache)和/home/user1/public_html/ 文件夹中的文件授予权限。

我被指示运行这些命令:

sudo chown -R www-data:user1 /home/user1/public_html/
sudo chmod g+s /home/user1/public_html/
Run Code Online (Sandbox Code Playgroud)

现在,www-data 确实有权编辑/删除/添加文件到 /home/user1/public_html/ 但 user1 不能编辑任何内容。

我该如何解决这个问题?

谢谢,

Mat*_*Ife 10

实现这一目标的最佳方法是使用posix ACL。标准的 unix 文件权限并没有真正削减它。你可以用一些杂乱无章的方法来做到这一点,但它不仅仅是杂乱无章的,基本上它不是一个直接的解决方案。

使用 ACL 可以简洁地解决这个问题。为此,您可以使用以下命令:

setfacl -R -m www-user:rwx /home/user1/public_html
setfacl -R -d -m www-user:rwx /home/user1/public_html
setfacl -R -m user1:rwx /home/user1/public_html
setfacl -R -d -m user1:rwx /home/user1/public_html
Run Code Online (Sandbox Code Playgroud)

-d标志导致新的文件继承您在目录中设置的ACL。

有一些注意事项需要牢记。

  1. 您的文件系统必须支持它(现在大多数都支持,可以通过在大多数文件系统上重新挂载具有 ACL 支持的文件系统来启用它们)。NFS 之类的东西是行不通的。
  2. 标准的 Unix 组 ACL 成为一个掩码。IE 如果文件显示为g+x,则该文件可以使用上述命令执行。如果它的gx文件是不可执行的,无论权限集是否在 ACL 中是rwx。这可确保您避免必须将 acl 中的所有目录rwx和所有文件rw-标记为的情况。

这明智地解决了一个问题,并允许各种场景组合:

  • 它强制执行最低权限,因为您不需要开始修改用户的组成员身份。
  • user1 可以创建一个可以由 www1-user 稍后修改的文件(因此 user1 可以 SFTP 上传内容,这些内容稍后可以由 apache 中的 CMS 删除和/或修改),反之亦然。
  • Apache 保留在一个系统帐户中,这避免了必须使用 SetUID 解决方法来更改 apache 主题(用户)。
  • 修改仅适用于特定的目录结构,不会无意中允许 www-user 或 user1 访问您不希望他们访问的文件系统树的其他部分。
  • 更改或撤销权限是一个微不足道的更改。

这是我解决此类问题的首选方法。这是一个简单、无中断和微不足道的变化。

  • 在设置常规 ACL 时,我更喜欢使用“rwX”而不是“rwx”。例如:setfacl -R -m www-user:rwX /home/user1/public_html。至少在 Linux 上,这避免了将所有文件标记为可执行文件。 (2认同)

std*_*err 5

Apache不需要到处写,为此你可以指定tmp、upload等。文件夹。因此,您可以将 public_dir 的权限设置为 apache 用户可读和可执行:

sudo chown user1:www-data /home/user1/public_html
sudo chmod 0750 /home/user1/public_html
Run Code Online (Sandbox Code Playgroud)

dir下的所有其他文件都public_html可以在 user1 权限下,并且只能由“其他”(此处为 apache)读取。从安全角度来看这也更好。正如我所写,只有必要的文件/文件夹才可以由 apache 用户写入。

  • 是的,apache 现在无法写入目录,但正如我所写,从安全角度来看它更好。您可以指定 apache 必须写入的特殊目录,它只是 apache 目录(例如 uploads、images、tmp、i-dont-know。 `chown :www-data <some-dir>`、`chmod g+w <某些目录>`)。 (2认同)