我正在为 WordPress 设置一个网络服务器。
WordPress 要求其内容归 www 用户所有,否则在安装插件和主题时会出现问题(要求提供服务器 FTP 凭证,我知道这很愚蠢)。
这不会是个问题,但我想给一个 ssh 用户一个空的 WWW 目录,以便他们可以自己下载/解压/设置 WordPress(放手法)。
在他们下载并解压 WordPress 档案后,所有文件都归该特定用户所有,并且由于前面提到的原因,他们在管理插件/主题安装或更新时遇到了问题。
实现这两个目标最方便、最安全的方法是什么,让用户有宾至如归的感觉,并拥有功能齐全的 WordPress 安装?
似乎 setfacl 可能是一个不错的解决方案,可以使一个目录下的所有新内容继承我设置的权限。
有人能就如何实现我的目标提供提示或建议,甚至指导我其他方向吗?
我正在使用带有 PHP-FPM 的 Nginx。
谢谢!
答案1
另一个选择是,您可以创建一个脚本,更改他们在某个目录中上传的文件的所有权。您可以设置 sudoers 文件,这样他们就只能以 root 身份运行该脚本,而无需密码。
如果操作不当,这可能会造成安全漏洞,但如果你操作正确,那就没什么大不了的。需要确保以下几点
- 除了 root 之外,没有人可以写入脚本或包含脚本的目录。我建议将其放在 /root 中,并为
chattr +i
它设置不可变属性 ( )。 - 确保它的编码非常严格,以确保它只能执行您想要的操作并且不会被滥用。
- 理想情况下,不要让任何人有读取权限,以减少发现#2 中的错误的机会。
答案2
在您的 wp-config.php 中将常量添加/更新FS_METHOD
为“direct”,您可能无需提供任何 FTP 详细信息即可进行更新。
define('FS_METHOD', 'direct');
FS_METHOD 强制文件系统方法。它只能是“direct”、“ssh2”、“ftpext”或“ftpsockets”。通常,只有在遇到更新问题时才应更改它。如果更改它但没有帮助,请将其改回/删除。在大多数情况下,如果自动选择的方法不起作用,则将其设置为“ftpsockets”将起作用。
(主要偏好)“直接”强制它使用 PHP 内部的直接文件 I/O 请求,这可能会导致配置不当的主机出现安全问题,在适当的时候会自动选择此选项。
(第二首选项)“ssh2”表示如果安装了 SSH PHP 扩展,则强制使用它(第三首选项)“ftpext”表示强制使用 FTP PHP 扩展进行 FTP 访问,最后。
(第四偏好)“ftpsockets”利用 PHP 套接字类进行 FTP 访问。
答案3
我找到了解决方案。是我太愚蠢了。
我从其他主机复制了 php-fpm 池配置,但忘记定义用户:用户权限,因此 php 进程以该用户身份运行。
更改这一点并将 nginx 用户(www)添加到用户组即可解决问题。