SELinux가 시행될 때 MariaDB에서 tmpfs를 어떻게 사용합니까?

SELinux가 시행될 때 MariaDB에서 tmpfs를 어떻게 사용합니까?

AlmaLinux 9.2 및 MariaDB 10.11을 실행합니다.

my.cnf에서 사용해 보세요:

tmpdir = /dev/shm

이는 PHP-FPM이 TCP 포트를 사용하여 연결하는 경우 제대로 작동합니다.

이제 PHP-FPM(/var/lib/mysql/mysql.sock)에서 더 빠른 소켓을 사용해 보십시오.

이 방법은 기본적으로는 작동하지 않지만 설명된 해결 방법을 적용해야 합니다.https://jira.mariadb.org/browse/MDEV-30520:

chcon -t mysqld_exec_t /usr/sbin/mariadbd

그러면 /dev/shm에 액세스할 수 없기 때문에 MariaDB가 시작되지 않습니다.

그런 다음 mysqld_tmpfs.te 정책을 사용하여 tmpfs 파일 컨텍스트에 대한 액세스를 허용합니다.https://mariadb.com/kb/en/selinux/#allowing-access-to-the-tmpfs-file-context:

module mysqld_tmpfs 1.0;

require {
    type tmpfs_t;
    type mysqld_t;
    class dir { write search read remove_name open getattr add_name };
    class file { write getattr read lock create unlink open };
}

allow mysqld_t tmpfs_t:dir { write search read remove_name open getattr add_name };

allow mysqld_t tmpfs_t:file { write getattr read lock create unlink open };

현재 MariaDB가 실행 중이지만 다음 명령을 사용하여 임시 파일을 생성하려고 하면 다음 오류가 표시됩니다 ausearch -c 'mariadbd' --raw.

type=AVC msg=audit(1690215382.357:58492): avc:  denied  { map } for  pid=602807 comm="mariadbd" path="/dev/shm/#sql-temptable-932b7-22f-62.MAD" dev="tmpfs" ino=1183 scontext=system_u:system_r:mysqld_t:s0 tcontext=system_u:object_r:tmpfs_t:s0 tclass=file permissive=0 
type=SYSCALL msg=audit(1690215382.357:58492): arch=c000003e syscall=9 success=no exit=-13 a0=0 a1=7 a2=3 a3=4001 items=0 ppid=1 pid=602807 auid=4294967295 uid=986 gid=985 euid=986 suid=986 fsuid=986 egid=985 sgid=985 fsgid=985 tty=(none) ses=4294967295 comm="mariadbd" exe="/usr/sbin/mariadbd" subj=system_u:system_r:mysqld_t:s0 key=(null)ARCH=x86_64 SYSCALL=mmap AUID="unset" UID="mysql" GID="mysql" EUID="mysql" SUID="mysql" FSUID="mysql" EGID="mysql" SGID="mysql" FSGID="mysql"
type=PROCTITLE msg=audit(1690215382.357:58492): proctitle="/usr/sbin/mariadbd"

또는 사람이 읽을 수 있는 형식으로:

SELinux is preventing /usr/sbin/mariadbd from map access on the file /dev/shm/#sql-temptable-932b7-22f-62.MAD.

*****  Plugin restorecon_source (92.2 confidence) suggests   *****************

If you want to fix the label. 
/usr/sbin/mariadbd default label should be bin_t.
Then you can run restorecon.
Do
# /sbin/restorecon -v /usr/sbin/mariadbd

*****  Plugin catchall_boolean (7.83 confidence) suggests   ******************

If you want to allow domain to can mmap files
Then you must tell SELinux about this by enabling the 'domain_can_mmap_files' boolean.

Do
setsebool -P domain_can_mmap_files 1

*****  Plugin catchall (1.41 confidence) suggests   **************************

If you believe that mariadbd should be allowed map access on the #sql-temptable-932b7-22f-62.MAD file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'mariadbd' --raw | audit2allow -M my-mariadbd
# semodule -X 300 -i my-mariadbd.pp

조언해주세요.

관련 정보