semanage 不改变文件上下文

semanage 不改变文件上下文

在我的 centos 7 机器上,我有以下信息:

[wmsodbc]> pwd
/WMSData1/tomcat/latest
[wmsodbc]> ls -lrt /WMSData1/tomcat/latest
lrwxrwxrwx. 1 tomcat tomcat 37 May  2 19:26 /WMSData1/tomcat/latest -> /WMSData1/tomcat/apache-tomcat-8.5.37
[wmsodbc]> ls -ltd logs
drwxr-xr-x. 2 tomcat tomcat 4096 May 10 13:05 logs
[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:default_t:s0   logs
[wmsodbc]> 

我尝试过多次将文件上下文设置为 var_log_t,但都没有成功。请参见下面的尝试。所有步骤均取自网上的各种网站。首先,尝试 1:

[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:default_t:s0   logs
[wmsodbc]> more /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

/WMSData1/tomcat/latest/logs(/.*)?    system_u:object_r:var_log_t:s0
[wmsodbc]> sudo restorecon -vR logs/
[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:default_t:s0   logs
[wmsodbc]> 

第二次尝试,使用稍微不同的方法:

[wmsodbc]> more /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:default_t:s0   logs
[wmsodbc]> sudo chcon system_u:object_r:var_log_t:s0 /WMSData1/tomcat/latest/logs/
[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:var_log_t:s0   logs
[wmsodbc]> more /etc/selinux/targeted/contexts/files/file_contexts.local
# This file is auto-generated by libsemanage
# Do not edit directly.

[wmsodbc]> sudo semanage fcontext -a -t var_log_t '/WMSData1/tomcat/latest/logs(/.*)?'
[wmsodbc]> ls -lZd logs
drwxr-xr-x. tomcat tomcat system_u:object_r:var_log_t:s0   logs
[wmsodbc]> sudo restorecon -v -R logs/
restorecon reset /WMSData1/tomcat/apache-tomcat-8.5.37/logs context system_u:object_r:var_log_t:s0->system_u:object_r:default_t:s0
[wmsodbc]> 

那么我做错了什么?显然,chcon 是临时的。但与 semanage 不同,它可以更改文件上下文。然后我们清楚地看到 restorecon 将其更改回“default_t”。所以第二个问题是它为什么要将其更改回“default_t”?

可能是因为“latest”是软链接,而 semanage 不喜欢完整路径中的软链接?我想我可能已经通过直接转到“latest”指向的目录并使用那个绝对路径让它工作了,但是等待看它是否能解决我的问题。如果有人能指出这是问题的证据,那就太好了。

答案1

可能是因为“latest”是一个软链接,而 semanage 不喜欢完整路径中的软链接?

是的,正是如此。

man 3 matchpathcon

NAME
       matchpathcon, matchpathcon_index - get the default SELinux security context for the specified path from the file contexts configuration
...
DESCRIPTION
...
       matchpathcon() matches the specified pathname, after transformation via realpath(3)...

只是为了澄清,realpath(3)扩展路径中的所有符号链接以尝试定义文件的绝对规范路径。

您可以指定 PCRE 来/WMSData1/tomcat/[^/]+/logs(/.*)?避免出现此问题,这样就不必不断添加新的文件上下文。

答案2

路径不匹配?符号链接?

/WMSData1/tomcat/latest/logs

对阵

/WMSData1/tomcat/apache-tomcat-8.5.37/logs

这:

/WMSData1/tomcat/latest/logs(/.*)?

是一个正则表达式,与路径不匹配apache-tomcat-8.5.37

有关正则表达式的更多详细信息,请参阅:https://regex101.com/

相关内容