심볼릭 링크 /etc/my.cnf -> /app/program/my.cnf의 SElinux 구성

심볼릭 링크 /etc/my.cnf -> /app/program/my.cnf의 SElinux 구성

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.

!includeUPD: 또한 다른 구성 파일을 포함하기 위해 지시문을 사용해 보았지만 /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_tmysql_t

파일 경로의 일부인 기호 링크 chcon에 명령을 적용해 보십시오 . 기호 링크가 참조하는 대상이 아닌 기호 링크 자체에 적용할 매개 변수를 지정합니다 .cfg.cnf-hchcon

그건:

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보다 사용자 정의된 구성을 제공 할 수 있습니다.

관련 정보