在我的 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/