我的 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
,允许您指定文件类型,如模式字段所示ls
(d用于目录、--
用于常规文件、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
请参阅手册页。