问题是通过VSFTPD创建/ uploadad的数据不会继承相应的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创建/上传目录时一样继承它们?
你在这里注意到了什么:
/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
是贴标签政策.
您在问题中讨论的内容实际上与运行时策略有关.
当使用SELinux在目录中创建条目时,管理文件或目录最终标签的规则不是由您引用的正则表达式决定的,而是其他规则如下(我相信这是正确的顺序,但可能遗漏了某些内容) .
>有一个明确的命名type_transition规则.
>有一个明确的非命名type_transition规则.
>继承与父目录相同的上下文.
>应用default_context.
So,when I copy a wordpress site let’s say from another server into a
directory in /var/www/html/ by SSH,the folders wp-content/ and
wp-content/uploads/ have the proper httpd_sys_rw_content_t security
context.
所以,是的,它确实这样做了,但不是因为你认为它的原因.当然不是因为贴标签政策.
发生这种情况是因为存在提供此行为的特定命名type_transition规则.
$sesearch -C -T -s unconfined_t -t httpd_sys_content_t -c dir Found 4 named file transition filename_trans: type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "wp-content"; type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "smarty"; type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "uploads"; type_transition unconfined_t httpd_sys_content_t : dir httpd_sys_rw_content_t "upgrade";
这基本上是在说.
>如果你是unconfined_t和
>如果您在目标类型httpd_sys_content_t和中执行操作
>如果新条目的类是目录而且
>如果新条目的名称是“上传”,那么
>新类型是httpd_sys_rw_content_t
这适用于SSHD的原因是因为在您登录后,您将获得适用此规则的unconfined_t的源上下文.
这对FTP服务不起作用,因为此服务的源上下文很可能是ftpd_t,它没有匹配规则.
因此,您需要修改策略以更改SELinux的行为,以便也遵守您在FTP的其他条目中看到的命名文件规则.
至少在Fedora 23中,存在允许这样的接口,像这样的策略模块会这样做.
policy_module(local_ftpd,7.2.0) require { type ftpd_t; } apache_filetrans_named_content(ftpd_t)
您可以通过确保安装selinux-policy-devel软件包并运行make -f /usr/share / selinux / devel / Makefile加载来加载它.