我们公司拥有一个带有CentOS 7的Web服务器,我们的客户通过FTP(vsftpd)管理其网站。SELinux处于强制模式。
问题是通过VSFTPD创建/上传的数据没有继承适当的SELinux上下文。让我解释。
例如,对于WordPress网站,服务器开箱即用地已经具有一些可以使用看到的规则semanage fcontext -l |grep '/var/www'
,它们是:
/var/www/html(/.*)?/uploads(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
/var/www/html(/.*)?/wp-content(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0
因此,当我将WordPress网站复制到另一台服务器时,/var/www/html/
通过SSH 将其复制到目录中,wp-content/
并wp-content/uploads/
具有适当的httpd_sys_rw_content_t
安全上下文。但是,当这些文件夹通过FTP创建时,它们获得的上下文是httpd_sys_content_t
(no rw)。这意味着我们的客户上载到服务器的站点即使将写权限授予apache用户/组也无法写入这些目录,因此WordPress管理员无法正常工作。因此,当他们上载网站时,他们必须请求我们的支持以解决此问题,这对于所有参与者来说都是浪费时间。
假设客户将其网站上传到中httpdocs
,如果通过SSH mv httpdocs/ httpdocs.2/ && cp -pr httpdocs.2/ httpdocs/ && rm httpdocs.2/ -fr
可以解决问题,那么数据没有问题。
我也restorecon -Rv httpdocs/
可以解决此问题。
因此,问题是:如何使通过VSFTPD创建/上传的目录继承正确的SELinux上下文,就像通过SSH创建/上传目录时继承它们一样?