Назад | Перейти на главную страницу

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]> 

И попробуйте 2, используя немного другой метод:

[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?

Может быть дело в том, что "последняя" - это софтлинк, а semanage не любит софтлинк в полном пути? Я думаю, что МОЖНО заставить его работать, перейдя непосредственно в каталог «последние» указывает и используя ЭТО абсолютный путь, но ожидая, чтобы увидеть, исправит ли он мои проблемы. Если бы кто-нибудь мог указать мне на доказательство того, что проблема в этом, было бы здорово.

Может ли быть дело в том, что "последняя" - это софтлинк, а 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(/.*)? вместо этого, чтобы избежать проблемы таким образом, чтобы вам не приходилось постоянно добавлять новые контексты файлов.

Несоответствие пути? Симлинк?

/WMSData1/tomcat/latest/logs

vs.

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

Это:

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

это регулярное выражение, которое не соответствует apache-tomcat-8.5.37 дорожка.

Подробнее о регулярном выражении см .: https://regex101.com/