Bagaimana cara saya mengizinkan koneksi MySQL melalui SELinux?

21

Saya ingin sekali meninggalkan SELinux berjalan di server karena dugaan peningkatan keamanan.
Saya biasanya menonaktifkan SELinux untuk membuat segala sesuatu bekerja.
Bagaimana saya memberi tahu SELinux untuk mengizinkan koneksi MySQL?
Yang paling banyak saya temukan dalam dokumentasi adalah baris ini dari mysql.com:

Jika Anda menjalankan Linux dan Linux-Enhanced Linux (SELinux) diaktifkan, pastikan Anda telah menonaktifkan perlindungan SELinux untuk proses mysqld.

wow ... itu sangat membantu.

xivix
sumber
1
Harap berikan semua informasi berikut ini agar kami dapat membantu Anda. 1. Linux Distro and Version, 2. Versi MySQL dan sumber instalasi, 3. Entri log AVC dari koneksi yang ditolak, 4. Log MySQL yang relevan, jika ada 5. Output dari getsebool -a | grep mysql6. Langkah-langkah tepat yang telah Anda ambil untuk mereproduksi ini
hobodave

Jawaban:

40

Untuk memeriksa SELinux

sestatus

Untuk melihat flag apa saja yang diatur pada proses httpd

getsebool -a | grep httpd

Untuk memungkinkan Apache terhubung ke basis data jauh melalui SELinux

setsebool httpd_can_network_connect_db 1

Gunakan opsi -P membuat perubahan permanen. Tanpa opsi ini, boolean akan diatur ulang ke 0 saat reboot.

setsebool -P httpd_can_network_connect_db 1
Punjab
sumber
3
tampaknya diperlukan saat menghubungkan melalui 127.0.0.1 loopback juga?
Devin Ceartas
@ David, pasti.
e18r
2
Jika Anda ingin mengizinkan pengguna untuk terhubung ke server mysql lokal, Anda juga harus mengaktifkan boolean selinuxuser_mysql_connect_enabled.
Anton Makovetsky
setsebool -P httpd_can_network_connect 1mungkin juga dibutuhkan. Ini disarankan di log saya dengan menjalankan ausearch -m avc -ts today | audit2whyseperti yang disarankan dalam komentar oleh vnix27.
situs
2

Apakah Anda mendapatkan kesalahan? Apa rasa linux yang Anda gunakan? Konteks keamanan adalah tempat yang baik untuk memulai jika Anda mendapatkan kesalahan. ls -Z akan memberikan konteks ... Tapi pertanyaan Anda sangat kabur.


sumber
Saya terhubung dari kotak windows. Tidak ada kesalahan ... koneksi ditolak dan halaman mati. Saya tahu jika saya mematikan selinux, semuanya akan baik-baik saja.
karena koneksi masuk dari kotak windows, ls -Z hanya memberi saya info tentang file di direktori apa pun yang saya gunakan di kotak linux.
Dalam pertanyaan saya di atas saya mengutip referensi mysql ... yang mengatakan untuk menonaktifkan perlindungan selinux untuk proses mysqld ... tetapi tidak mengatakan bagaimana melakukan itu :( Saya juga tidak bisa mengetahui caranya.
Ada yang ada di log di kotak linux? selinux dapat menghentikan httpd dari membuat koneksi soket ...
Tidak ada pesan atau log yang aman ... adakah log tertentu yang ada dalam pikiran Anda?
1

Tampaknya mengkonfigurasi selinux bukanlah hal sepele. Anda mungkin ingin memulai di sini .

setenforce 0

menempatkan selinux ke mode permisif, di mana memungkinkan apa pun kecuali mencatat apa yang diizinkan. A reboot atau

setenforce 1

kembali untuk memblokir apa pun yang tidak diizinkan oleh kebijakan.

Lihatlah dokumen kebijakan selinux ini untuk mySQL di Fedora .

Paul
sumber
1

The ausearchperintah dapat membantu menemukan error log.

vnix27
sumber
1
ausearch -m avc -ts hari ini | audit2why, perintah dapat menyarankan solusi
vnix27
1

Anda juga dapat membuat kebijakan lokal:

"Anda dapat membuat modul kebijakan lokal untuk memungkinkan akses ini. Izinkan akses ini untuk saat ini dengan mengeksekusi:"

grep httpd /var/log/audit/audit.log | audit2allow -M mypol

semodule -i mypol.pp

atau aktifkan secara global untuk sesi aktual:

setsebool httpd_can_network_connect_db 1

atau permanen:

setsebool -P httpd_can_network_connect_db 1
Raffaello
sumber