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.


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

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.


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 .



1

The ausearchperintah dapat membantu menemukan error log.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.