在 centos 7 上,我创建了具有根目录所有权的 wordpress 网站网站名称:网站组和目录权限755、文件权限644默认设置
当开发人员登录到 wordpress 仪表板并尝试将某些内容上传到媒体或安装插件时,wp 说没有写入权限,
然后我必须授予 wp 根目录的 g+w 权限,然后他才能安装插件或上传媒体。
上传媒体后,上传的插件/媒体权限更改为阿帕奇:阿帕奇从网站名称:网站组
如何避免?
- 我授予 wp 根目录 g+x 权限,以让开发人员安装插件/上传媒体
- 并且任何来自 wp dashboar 上传的所有权都不应更改为 apache:apache
我尝试过
目前我找不到其他方法来阻止这种情况,每次我都必须授予 g+w 权限,然后在开发人员工作后将其恢复
答案1
Web 服务器(或 PHP 进程,取决于您的设置)需要对该目录具有写入权限。唯一可行的方法是以用户身份运行该进程websitename
。
apache
原则上,另一种选择是通过 ACL 或将其添加到组来授予用户写入权限websitegroup
,但这也会导致上传的文件归apache
。 如果您希望所有文件和文件夹都归 ,websitename
则需要以该用户的身份运行 Web 服务器。
答案2
您对如何配置的描述毫无帮助。让我们从头开始。
用户:
- apache - PHP 运行时执行的 uid
- dev1、dev2、dev2 - 开发人员
- 备份 - 用于创建网站备份
- 支持[n] - 用于调查问题
由于 Wordpress 的设计方式,除非“apache”对该站点具有完全的读/写访问权限,否则很难操作。
如果所有管理都是通过 Web UI 完成的,那么开发人员确实需要任何访问文档根目录中的文件。但是,我见过开发人员经常使用 CLI 访问更新文件的网站。因此,我们假设他们需要读/写访问权限。
备份用户需要对文件具有只读访问权限。
支持需要对文件的只读访问权限。
那就只剩下网站用户了。这是你的构造。由于缺乏有关你如何使用它的附加信息,它似乎完全是多余的。
因此,唯一的访问类别是读写和只读。但为了好玩,我们假设还有一个无访问权限的类别 - 并将此用户称为“外星人”。
用户所有权始终由创建文件的 uid 决定 - 并且每个用户只有一个值。因此我们不能将其用作允许访问的机制。
但是用户可以属于多个组,每个组可以有多个用户。因此,我们可以将读写权限与特定组关联。将其命名为 webupdate。
剩下的是只读访问权限(备份和支持) - 可以通过“其他”权限位提供。
但你如何排除“外星人”呢?通过将网站放在外星人无法访问的目录中 - 这意味着我们需要另一个组来识别拥有一些访问。将其称为 webaccess。
因此小组成员资格:
- webupdate:apache,dev1,dev2…devn
- webaccess:apache,dev1,dev2…devn,备份,支持[n]
然后我们就有了目录、权限和所有权:
drwxr-x--- root:webaccess /var/www/SITENAME
drwxrwxr-x ????:webupdate /var/www/SITENAME/html (document root)
一切都很好,但是当“webupdate”中的某个人在文档根目录中创建新文件或目录时,组所有权将是他们的默认组 - 而不是 webupdate。您可以使用目录上的 setgid 位来更改此行为:
drwxrwSr-x ????:webupdate /var/www/SITENAME/html
难题的最后一部分是确保 webupdate 成员的 umask 设置为 00x,以便新文件和目录获得正确的权限)。不要忘记在 sshd_config 中为 sftp 服务器以及交互式 shell 设置此项。
因此,一旦您建立了组,您就可以运行:
chown -R apache:webupdate /var/www/SITENAME/html
chmod -r g+s /var/www/SITENAME/html
就是这样 - 您永远不必再修复权限。