我在装有 apache-2.4 和 joomla-3.9 的 fedora28 系统上遇到了权限和所有权问题。我希望能够只拥有 apache 所需的最少数量的文件,并让 ssh/sftp 用户有权读取和写入文档根目录中的每个文件。
我正在尝试解决两个问题:
- 为 ssh/sftp 用户提供在文档根目录中写入文件的能力
- 仅向 Apache 提供写入/删除文件所需的最小能力,但不限制读取
问题是,创建具有 664 所有权的文件会导致许多扩展(如 Akeeba Backup)抱怨文件太宽松并坚持必须是 644。
我已经加载了 mod_suexec 并使用“Suexec on”启用它,并将 SuexecUserGroup 配置为 ssh/sftp 用户的名称和“apache”:
SuexecUserGroup ftpuser apache
然后将所有文件和目录的所有权更改为 ftpuser.apache,但这仅在文件由 ftpuser 创建或修改时才有效。
然后,我仔细检查并将所有权设置为 Apache 正常运行所需的读/写访问权限的几个特定文件。
#!/bin/bash
PLACES='
administrator/backups
administrator/components
administrator/modules
administrator/templates
administrator/language
administrator/cache
cache
components
images
images/banners
images/stories
language
media
modules
templates
tmp
'
for i in $PLACES; do chown -R apache:apache $i; chmod g+w $i; done
chmod g+w tmp components language language/en-GB logs modules
administrator/components administrator/language \
administrator/language/en-GB
即使以这种方式配置了 suexec,apache 也无法删除 ftpuser 拥有的具有权限 644 的文件。Apache 在进行升级或扩展更新时需要具有写入超出列出的内容的能力。
问题是 apache 服务器以用户 apache 身份运行,因此它写入的任何文件都必须归 apache 用户所有,假设权限为 644 或 755。
我考虑在这里使用 sgid,将所有目录的权限更改为 2775,这样 apache 用户创建的任何文件都将保留 apache 组所有权和 664 权限,但这无助于安全性,也无法让 Akeeba Backup 对 644 权限问题感到满意。
大多数服务提供商(如 SiteGround)会做什么?他们是否只是将所有内容的所有权更改为运行 apache 的用户,然后为所有 sftp 用户提供相同的 UID?
有没有办法将所有权更改为 apache.apache,将 ssh/sftp 用户添加到 apache 组,并设置所有内容 sgid?