Apa itu Konteks SELinux
Ketika SELinux diterapkan di sistem, ia memeriksa aturan tentang proses mana yang dapat mengakses file, direktori, dan port mana. Setiap file, proses, direktori, dan port memiliki label keamanan khusus yang dikenal sebagai konteks SELinux, yaitu nama yang digunakan untuk menentukan apakah suatu proses dapat mengakses file, direktori, atau port. Secara default, kebijakan tidak mengizinkan interaksi apa pun kecuali aturan eksplisit memberikan akses.
Label SELinux memiliki konteks yang berbeda:pengguna, peran, jenis, dan sensitivitas. Sebagian besar perintah Linux memiliki opsi -Z untuk menampilkan konteks SELinux. Misalnya, ps, ls, cp, dan mkdir semuanya menggunakan opsi -Z untuk menampilkan atau mengatur konteks SELinux dari sebuah file, direktori, proses, atau port.
Server MySQL membaca dari dan menulis ke berbagai file jika konteks SELinux tidak diatur dengan benar pada file-file ini, proses mysqld dapat diblokir dari mengakses file. Dalam beberapa kasus, ini dapat menghentikan mysqld dari kesalahan pencatatan.
Cara membuat daftar konteks MySQL saat ini
Anda dapat membuat daftar konteks saat ini menggunakan:
# semanage fcontext -l | grep -i mysql
Cara menyetel konteks direktori data
Lokasi default untuk direktori data adalah /var/lib/mysql/ , konteks SELinux yang digunakan adalah mysqld_db_t . Jika Anda mengedit file konfigurasi untuk menggunakan lokasi yang berbeda untuk direktori data, atau salah satu file yang biasanya ada di direktori data (misalnya log biner), Anda mungkin perlu menyetel konteks untuk lokasi baru menggunakan
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/datadir(/.*)?" # restorecon -Rv /path/to/my/custom/datadir
# semanage fcontext -a -t mysqld_db_t "/path/to/my/custom/logdir(/.*)?" # restorecon -Rv /path/to/my/custom/logdir
Cara menyetel konteks file log kesalahan
Lokasi default untuk RPM RedHat adalah /var/log/mysqld.log , konteks SELinux yang digunakan adalah mysqld_log_t . Jika Anda mengedit file konfigurasi untuk menggunakan lokasi yang berbeda, Anda mungkin perlu mengatur konteks untuk lokasi baru menggunakan:
# semanage fcontext -a -t mysqld_log_t "/path/to/my/custom/error.log" # restorecon -Rv /path/to/my/custom/error.log
Cara menyetel konteks file PID
Lokasi default untuk file PID adalah /var/run/mysqld/mysqld.pid , konteks SELinux yang digunakan adalah mysqld_var_run_t . Jika Anda mengedit file konfigurasi untuk menggunakan lokasi yang berbeda, Anda mungkin perlu mengatur konteks untuk lokasi baru menggunakan:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/pidfile/directory/.*?" # restorecon -Rv /path/to/my/custom/pidfile/directory
Cara menyetel konteks soket domain-unix
Lokasi default untuk soket domain unix adalah /var/lib/mysql/mysql.sock , konteks SELinux yang digunakan adalah mysqld_var_run_t . Jika Anda mengedit file konfigurasi untuk menggunakan lokasi yang berbeda, Anda mungkin perlu mengatur konteks untuk lokasi baru menggunakan:
# semanage fcontext -a -t mysqld_var_run_t "/path/to/my/custom/mysql.sock" # restorecon -Rv /path/to/my/custom/mysql.sock
Cara menyetel konteks port TCP
Port TCP default adalah 3306 , konteks SELinux yang digunakan adalah mysqld_port_t . Jika Anda mengedit file konfigurasi untuk menggunakan port TCP yang berbeda, atau Anda mengaktifkan Group Replication yang menggunakan port tambahan (biasanya port 13306), Anda mungkin perlu mengatur konteks untuk port baru menggunakan:
# semanage port -a -t mysqld_port_t -p tcp 13306 # restorecon
Cara menyetel konteks direktori secure_file_priv
Untuk versi MySQL sejak 5.5.53, 5.6.34 dan 5.7.16. Menginstal RPM server membuat direktori /var/lib/mysql-files/, tetapi tidak mengatur konteks SELinux pada direktori ini. Direktori ini dimaksudkan untuk digunakan untuk operasi seperti ‘SELECT … INTO OUTFILE '. Jika Anda mengaktifkan menggunakan direktori ini dengan menyetel secure_file_priv, Anda mungkin perlu menyetel konteks menggunakan:
# semanage fcontext -a -t mysqld_db_t "/var/lib/mysql-files/(/.*)?" # restorecon -Rv /var/lib/mysql-files
Jika Anda mengatur ini ke lokasi baru, Anda perlu mengedit jalurnya. Untuk informasi lebih lanjut tentang variabel ini, silakan lihat https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_secure_file_priv. Demi keamanan, direktori ini tidak boleh berada di dalam direktori data.
Alat yang Diperlukan
Biner semanage adalah bagian dari paket policycoreutils-python:
# yum install policycoreutils-python
Untuk menggunakan semanage dengan versi awal RHEL 6 dengan python 2.6, Anda mungkin perlu menginstal backport modul koleksi python OrderedDict menggunakan python-pip dari repositori EPEL.
Instal repositori EPEL:
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/$(uname -m)/epel-release-6-8.noarch.rpm
Instal python-pip:
# yum install python-pip
Jika menginstal python-pip mengembalikan kesalahan ini:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
Anda mungkin perlu memperbarui sertifikat CA SSL Anda menggunakan:
# yum --disablerepo=epel -y update ca-certificates