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
.
!include
UPD: 또한 다른 구성 파일을 포함하기 위해 지시문을 사용해 보았지만 /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
에 따르면 귀하의 심볼릭 링크 에는 실행중인 유형이 MariaDB에서 허용되지 않는 유형이 cfg
있습니다 .default_t
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
보다 사용자 정의된 구성을 제공 할 수 있습니다.