如何使用 semanage 将 SELinux 标签分配给符号链接,使其在重新标记后仍然存在?

Ste*_*der 14 linux permissions selinux symbolic-link apache-2.2

我的 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
Run Code Online (Sandbox Code Playgroud)

我需要用 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
Run Code Online (Sandbox Code Playgroud)

但是,这在重新标记后无法生存:

[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
Run Code Online (Sandbox Code Playgroud)

使用 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
Run Code Online (Sandbox Code Playgroud)

semanage 没有 -h 选项。

如何让 semanage 设置链接本身的标签,以便在重新标记后保持为 httpd_sys_content_t?

Ste*_*der 11

我想到了:

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
Run Code Online (Sandbox Code Playgroud)

请参阅semanage-fcontext手册页。

  • 这个答案正确使用了`-f -l`,因为这是编写时有效的语法。更高版本的 semanage (EL7) 使用 `-fl`。 (5认同)