如何使用 semanage 为符号链接分配 SELinux 标签,以便它在重新标记后仍然有效?

如何使用 semanage 为符号链接分配 SELinux 标签,以便它在重新标记后仍然有效?

我的 apache DocumentRoot /var/www 是指向另一个路径的符号链接。目标具有适当的文件上下文标签 (httpd_sys_content_t),因此 apache 可以在启用 SELinux 的情况下读取它。但是,符号链接本身用 var_t 标记。

[root@localhost var]# ls -lZ
lrwxrwxrwx. root root unconfined_u:object_r:var_t:s0 www -> /srv/www

我需要用 httpd_sys_content_t 重新标记符号链接。

使用 -h 选项运行 chcon 最初似乎有效:

[root@localhost var]# chcon -h -t httpd_sys_content_t /var/www
[root@localhost var]# ls -lZ
lrwxrwxrwx. root root unconfined_u:object_r:httpd_sys_content_t:s0 www -> /srv/www

然而,重新标记后,它就不存在了:

[root@localhost var]# restorecon -Rv .
restorecon reset /var/www context system_u:object_r:httpd_sys_content_t:s0->syst
em_u:object_r:var_t:s0

使用 semanage 不会重新标记链接本身;仅重新标记目标:

[root@localhost var]# semanage fcontext -a -t httpd_sys_content_t /var/www
[root@localhost var]# restorecon -Rv .
[root@localhost var]# ls -lZ
lrwxrwxrwx. root root unconfined_u:object_r:var_t:s0 www -> /srv/www

semanage 没有 -h 选项。

我怎样才能让 semanage 设置链接本身的标签,以便它在重新标记后仍然保留为 httpd_sys_content_t?

答案1

我想到了:

semanage 有一个选项-f,允许您指定文件类型,如模式字段所示lsd用于目录、--用于常规文件、l用于链接)。-f -l使用时,链接本身是目标。

[root@localhost var]# semanage fcontext -f -l -a -t httpd_sys_content_t /var/www
[root@localhost var]# restorecon -Rv .
restorecon reset /var/www context system_u:object_r:var_t:s0->system_u:object_r:httpd_sys_content_t:s0

查看semanage-fcontext请参阅手册页。

相关内容