我试图在Debian 8系统上build立一个安全的WordPress站点,并具有以下要求:
我确定这是一个非常标准的设置。 不过,我找不到一个教程如何适合在一起。
首先,使用FS_method“直接”工作进行自动核心更新,大多数WordPress都必须由www-data拥有,即:
chown -R www-data.www-data /var/www/wordpress
此外,我有一个本地帐户“sftp-wordpress”,我把它放在“www-data”组中。
我制作了wp-content和组内可写的所有内容(group是www-data,见上面),所以sftp-wordpress能够编写,并且 – 为了安全起见,我制作了“wp-content”及其子目录setgid的:
chmod -R g+w /var/www/wordpress/wp-content find /var/www/wordpress/wp-content -type d -exec chmod g+s {} \;
第一个问题:要设置chroot,我把以下内容放在/ etc / ssh / sshd_config中:
Match User sftp_wordpress ChrootDirectory /var/www/wordpress/wp-content ForceCommand internal-sftp -u 0002 AllowTcpForwarding no
这是行不通的,因为OpenSSH不喜欢ChrootDirectory的权限和所有者:
fatal: bad ownership or modes for chroot directory "/var/www/wordpress/wp-content"
所以我现在通过禁用ChrootDirectory指令取消了chroot的需求。
在这一点上,我可以上传文件到wp-content。 这些文件将显示为拥有者“sftp-wordpress”(这可能是WordPress更新的问题 ?)和组“www-data”。
另外一个问题是,上传的文件和目录不能被分组写入,这样Apache进程将无法修改它们。 而这是一个问题,如果WordPress想修改它们。
“umask 0002”不会帮助,因为(不像其他问题在这里说的),它不会强制组写入权限。
事实上,上传的文件在服务器上是可以分组写的, 如果它们在客户端上是可以分组写的的 – 这远非一个解决scheme,因为你不能期望SFTP能够解决这个问题。
我想听听是否有一个一致的解决scheme这个WordPress的设置。
chroot目录需要由root拥有,以便openssh接受它,这是出于安全目的。
有关详细解释,请参阅: chroot目录组件的所有权或模式错误
ChrootDirectory
指定要validation后chroot(2)的目录的path名。 path名的所有组件都必须是不能由任何其他用户或组写入的根拥有的目录 。 在chroot之后,sshd(8)将工作目录更改为用户的主目录。
我认为解决scheme可能是将上传位置与wordpress可以查看的位置分开。
您可以创build一个临时区域,用户可以通过chroot位置的openssh sftp服务器上载文件。 然后你的系统有一个cronjob,它会定期运行一个脚本,它将检查上传的位置,并对上传的文件做适当的处理。
它可能只是发送一封电子邮件询问人为干预,或者它做一些自动化的文件检查,病毒扫描,无论你认为值得的。 然后将文件复制或移动到wordpress可以处理的位置。
我认为没有一个一致的解决scheme,因为许多情况是非常独特的。 但是,用于上传文件的临时区域在许多用途中并不罕见。 它增加了一个安全级别。
一个可能的答案似乎是这个设置确实是不可能的(没有一个混乱的各种组件的重新configuration)。
另一种方法可能是放弃FS_METHOD'直接',转而使用'ssh','ftpext'或'ftpsocket'等替代方法。 这将放弃Web服务器能够更改WordPress文件的要求。 相反,你会告诉WordPress如何通过FTP或SSH访问和更改自己的文件。