CentOS 7 – 通过VSFTPD创建的目录不继承SELinux上下文

前端之家收集整理的这篇文章主要介绍了CentOS 7 – 通过VSFTPD创建的目录不继承SELinux上下文前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们公司有一个带有CentOS 7的网络服务器,我们的客户通过FTP(vsftpd)管理他们的网站. SE Linux处于执行模式.

问题是通过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加载来加载它.

猜你在找的CentOS相关文章