请告诉我是否可以以 MariaDB 会选择的方式配置 SElinux 上下文。
当前配置:
ls -lZ /etc/my.cnf
lrwxrwxrwx. root root system_u:object_r:mysqld_etc_t:s0 /etc/my.cnf -> /app/program/cfg/mysql/etc/my.cnf
ls -lZ /app/program/cfg/mysql/etc/my.cnf
-rw-r--r--. root root system_u:object_r:default_t:s0 /app/program/cfg/mysql/etc/my.cnf
ls -l /app/program/cfg
lrwxrwxrwx. 1 user user 26 Jun 12 16:25 /app/program/cfg -> cfg-ver1
(我多次尝试更改第二个文件的上下文,但没有成功)
目前 MariaDB 无法使用 来获取它enforcing
,但可以很好地使用permissive
.
UPD:我还尝试使用!include
指令来/etc/my.cnf
包含不同的配置文件,但如果路径包含如上所述的符号链接,MariaDB 不会提取它。
type=AVC msg=audit(1560419317.130:75): avc: denied { read } for pid=4359 comm="mysqld" name="cfg" dev="xvda1" ino=205 scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=lnk_file permissive=0
Was caused by:
Missing type enforcement (TE) allow rule.
并且cfg
是一个符号链接。 /etc/my.cnf 中的这一行确实有效(具有目标文件的正确 Selinux 上下文):
!include /app/program/cfg-ver1/mysql/etc/my.cnf
运行后:
sudo chcon -t mysqld_etc_t /app/program/cfg/mysql/etc/my.cnf
导致:
[root@ip-172-31-60-102 etc]# ls -lZ my.cnf
lrwxrwxrwx. root root system_u:object_r:mysqld_etc_t:s0 my.cnf -> /app/program/cfg/mysql/etc/my.cnf
[root@ip-172-31-60-102 etc]# ls -lZ /app/program/cfg/mysql/etc/my.cnf
-rw-r--r--. root root system_u:object_r:mysqld_etc_t:s0 /app/program/cfg/mysql/etc/my.cnf
mariadb 重新启动,但配置文件未被遵守。
答案1
为了使进程能够访问文件,全部通向该文件的路径的目录必须具有适当的权限,以允许尝试读取该文件的进程。对于传统 UNIX 权限和 SELinux 上下文都是如此。
对于传统UNIX,“适当的权限”仅指x
目录的位,而不考虑符号链接的权限。
但对于 SELinux 上下文,您需要符号链接的“读取”权限,就像您需要目录的“搜索”权限一样。
您的摘录audit.log
说您的cfg
符号链接具有default_t
类型,这对于您在其类型下运行的 MariaDB 是不允许的mysql_t
。
尝试将chcon
命令应用于cfg
符号链接,该符号链接是通向.cnf
文件的路径的一部分。指定-h
要chcon
应用于符号链接本身而不是符号链接引用的目标的参数。
那是:
sudo chcon -ht mysqld_etc_t /app/program/cfg
如果一切按预期工作,您可能需要制作一个(一系列)与您的目录匹配的正则表达式,以使 SELinux 始终将这些目录视为 MariaDB 配置的一部分,以免在您或SELinux 最终执行一些(自动)重新标记。
因此,例如:
semanage fcontext -a -t mysqld_etc_t '/app/program/cfg.*(/.*)?'
包括以下名称的所有cfg*
内容/app/program
。
根据您想要的安全严格程度,您可能希望通过缩小正则表达式的范围或semanage fcontext
为该目录下的文件提供其他命令来提供更定制的配置。