MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Cara mengkonfigurasi SELinux untuk sistem berbasis MySQL (Replikasi MySQL/MariaDB + Galera)

Di era yang kita jalani sekarang, apa pun dengan lingkungan yang kurang aman dengan mudah menjadi sasaran serangan dan menjadi hadiah bagi penyerang. Dibandingkan dengan 20 tahun terakhir, hacker saat ini lebih maju tidak hanya dengan keterampilan tetapi juga dengan alat yang mereka gunakan. Tidak mengherankan mengapa beberapa perusahaan raksasa diretas dan data berharga mereka bocor.

Pada tahun 2021 saja, sudah ada lebih dari 10 insiden terkait pelanggaran data. Insiden terbaru dilaporkan oleh BOSE, pembuat audio terkenal yang terjadi pada bulan Mei. BOSE menemukan bahwa beberapa informasi pribadi karyawan saat ini dan mantan karyawannya diakses oleh para penyerang. Informasi pribadi yang diekspos dalam serangan tersebut termasuk nama, Nomor Jaminan Sosial, informasi kompensasi, dan informasi terkait SDM lainnya.

Menurut Anda apa tujuan dari serangan semacam ini dan apa yang memotivasi peretas untuk melakukannya? Ini jelas semua tentang uang. Karena data yang dicuri juga sering dijual, dengan menyerang perusahaan besar, peretas dapat memperoleh uang. Tidak hanya data penting yang dapat dijual ke pesaing bisnis, tetapi para peretas juga dapat meminta uang tebusan yang sangat besar pada saat yang bersamaan.

Jadi bagaimana kita bisa menghubungkan ini dengan database? Karena basis data adalah salah satu aset besar bagi perusahaan, disarankan untuk menjaganya dengan keamanan yang ditingkatkan agar data berharga kita selalu terlindungi. Dalam posting blog terakhir saya, kami telah membahas beberapa pengenalan tentang SELinux, cara mengaktifkannya, jenis mode apa yang dimiliki SELinux dan cara mengkonfigurasinya untuk MongoDB. Hari ini, kita akan melihat cara mengkonfigurasi SELinux untuk sistem berbasis MySQL.

5 Manfaat Teratas SELinux

Sebelum melangkah lebih jauh, mungkin sebagian dari Anda bertanya-tanya apakah SELinux memberikan manfaat positif karena agak repot untuk mengaktifkannya. Berikut adalah 5 manfaat SELinux teratas yang tidak boleh Anda lewatkan dan harus Anda pertimbangkan:

  • Menegakkan kerahasiaan dan integritas data sekaligus melindungi proses

  • Kemampuan untuk membatasi layanan dan daemon agar lebih dapat diprediksi

  • Mengurangi risiko serangan eskalasi hak istimewa

  • Kebijakan ini diterapkan di seluruh sistem, tidak disetel atas kebijaksanaan pengguna dan ditentukan secara administratif

  • Menyediakan kontrol akses yang halus

Sebelum kita mulai mengonfigurasi SELinux untuk instans MySQL kita, mengapa tidak mempelajari cara mengaktifkan SELinux dengan ClusterControl untuk semua penerapan berbasis MySQL. Meskipun langkahnya sama untuk semua sistem manajemen basis data, menurut kami sebaiknya menyertakan beberapa tangkapan layar untuk referensi Anda.

Langkah Mengaktifkan SELinux untuk Replikasi MySQL

Di bagian ini, kita akan menerapkan Replikasi MySQL dengan ClusterControl 1.8.2. Langkah-langkahnya sama untuk MariaDB, Galera Cluster atau MySQL:dengan asumsi semua node sudah siap dan SSH tanpa kata sandi dikonfigurasi, mari kita mulai penerapan. Untuk mengaktifkan SELinux untuk pengaturan kita, kita perlu menghapus centang “Disable AppArmor/SELinux” yang berarti SELinux akan ditetapkan sebagai “permisif” untuk semua node.

Selanjutnya kita akan memilih Percona sebagai vendor (bisa juga pilih MariaDB , Oracle atau MySQL 8 juga), lalu tentukan kata sandi "root". Anda dapat menggunakan lokasi default atau direktori lain tergantung pada pengaturan Anda.

Setelah semua host ditambahkan, kita dapat memulai penerapan dan membiarkannya selesai sebelum kita dapat mulai dengan konfigurasi SELinux.

Langkah Mengaktifkan SELinux untuk Replikasi MariaDB

Di bagian ini, kita akan menerapkan Replikasi MariaDB dengan ClusterControl 1.8.2.

Kita akan memilih MariaDB sebagai vendor dan versi 10.5 serta menentukan kata sandi "akar". Anda dapat menggunakan lokasi default atau direktori lain tergantung pada pengaturan Anda.

Setelah semua host ditambahkan, kita dapat memulai penerapan dan membiarkannya selesai sebelum kita dapat melanjutkan dengan konfigurasi SELinux.

Langkah Mengaktifkan SELinux untuk Galera Cluster

Di bagian ini, kita akan menerapkan Galera Cluster dengan ClusterControl 1.8.2. Sekali lagi, hapus centang “Disable AppArmor/SELinux” yang berarti SELinux akan ditetapkan sebagai “permisif” untuk semua node:

Selanjutnya kita akan memilih Percona sebagai vendor dan MySQL 8 serta tentukan kata sandi "root". Anda dapat menggunakan lokasi default atau direktori lain tergantung pada pengaturan Anda. Setelah semua host ditambahkan, kita dapat memulai penerapan dan menyelesaikannya.


 

Seperti biasa, kami dapat memantau status penerapan di bagian "Aktivitas" pada UI.

Cara Mengkonfigurasi SELinux Untuk MySQL

Mengingat semua cluster kami berbasis MySQL, langkah-langkah untuk mengkonfigurasi SELinux juga sama. Sebelum kita mulai dengan pengaturan dan karena ini adalah lingkungan pengaturan yang baru, kami sarankan Anda menonaktifkan mode pemulihan otomatis untuk cluster dan node sesuai tangkapan layar di bawah ini. Dengan melakukan ini, kita dapat menghindari cluster yang mengalami failover saat kita melakukan pengujian atau memulai ulang layanan:

Pertama, mari kita lihat apa konteks untuk "mysql". Silakan dan jalankan perintah berikut untuk melihat konteksnya:

$ ps -eZ | grep mysqld_t

Dan contoh outputnya seperti di bawah ini:

system_u:system_r:mysqld_t:s0       845 ?        00:00:01 mysqld

Definisi untuk output di atas adalah:

  • system_u - Pengguna

  • system_r - Peran

  • mysqld_t - Ketik

  • s0 845 - Tingkat sensitivitas

Jika Anda memeriksa status SELinux, Anda dapat melihat statusnya "permisif" yang belum sepenuhnya diaktifkan. Kita perlu mengubah mode menjadi "enforcing" dan untuk mencapai itu kita harus mengedit file konfigurasi SELinux agar permanen.

$ vi /etc/selinux/config
SELINUX=enforcing

Lanjutkan untuk mem-boot ulang sistem setelah perubahan. Saat kami mengubah mode dari "permisif" menjadi "menegakkan", kami perlu memberi label ulang pada sistem file lagi. Biasanya, Anda dapat memilih apakah akan memberi label ulang seluruh sistem file atau hanya untuk satu aplikasi. Alasan mengapa pelabelan ulang diperlukan karena fakta bahwa mode "penegakan" membutuhkan label atau fungsi yang benar untuk berjalan dengan benar. Dalam beberapa kasus, label tersebut diubah selama mode "permisif" atau "dinonaktifkan".

Untuk contoh ini, kami hanya akan melabel ulang satu aplikasi (MySQL) menggunakan perintah berikut:

$ fixfiles -R mysqld restore

Untuk sistem yang telah digunakan cukup lama, sebaiknya beri label ulang pada seluruh sistem file. Perintah berikut akan melakukan pekerjaan tanpa me-reboot dan proses ini mungkin memakan waktu cukup lama tergantung pada sistem Anda:

$ fixfiles -f -F relabel

Seperti banyak database lainnya, MySQL juga menuntut untuk membaca dan menulis banyak file. Tanpa konteks SELinux yang benar untuk file-file itu, akses tidak diragukan lagi akan ditolak. Untuk mengonfigurasi kebijakan SELinux,  “semanage” diperlukan. "semanage" juga memungkinkan konfigurasi apa pun tanpa perlu mengkompilasi ulang sumber kebijakan. Untuk sebagian besar sistem Linux, alat ini sudah diinstal secara default. Adapun kasus kami, itu sudah diinstal dengan versi berikut:

$ rpm -qa |grep semanage
python3-libsemanage-2.9-3.el8.x86_64
libsemanage-2.9-3.el8.x86_64

Untuk sistem yang belum terinstal, perintah berikut akan membantu Anda menginstalnya:

$ yum install -y policycoreutils-python-utils

Sekarang, mari kita lihat apa konteks file MySQL:

$ semanage fcontext -l | grep -i mysql

Seperti yang mungkin Anda perhatikan, ada banyak file yang terhubung ke MySQL setelah perintah di atas dijalankan. Jika Anda ingat di awal, kami menggunakan "Direktori Data Server" default. Jika instalasi Anda menggunakan lokasi direktori data yang berbeda, Anda perlu memperbarui konteks untuk “mysql_db_t” yang merujuk ke /var/lib/mysql/

Langkah pertama adalah mengubah konteks SELinux dengan menggunakan salah satu opsi berikut:

$ semanage fcontext -a -t mysqld_db_t /var/lib/yourcustomdirectory
$ semanage fcontext -a -e /var/lib/mysql /var/lib/yourcustomdirectory

After the step above, run the following command:

$ restorecon -Rv /var/lib/yourcustomdirectory

Dan terakhir, restart layanan:

$ systemctl restart mysql

Dalam beberapa penyiapan, kemungkinan lokasi log yang berbeda diperlukan untuk tujuan apa pun. Untuk situasi ini, "mysqld_log_t" perlu diperbarui juga. “mysqld_log_t” adalah konteks untuk lokasi default /var/log/mysqld.log dan langkah-langkah di bawah ini dapat dijalankan untuk memperbaruinya:

$ semanage fcontext -a -t mysqld_log_t "/your/custom/error.log"
$ restorecon -Rv /path/to/my/custom/error.log
$ systemctl restart mysql

Akan ada situasi ketika port default dikonfigurasi menggunakan port lain selain 3306. Misalnya, jika Anda menggunakan port 3303 untuk MySQL, Anda perlu mendefinisikan konteks SELinux dengan perintah berikut :

$ semanage port -a -t mysqld_port_t -p tcp 3303

Dan untuk memverifikasi bahwa port telah diperbarui, Anda dapat menggunakan perintah berikut:

$ semanage port -l | grep mysqld

Menggunakan audit2allow Untuk Membuat Kebijakan

Cara lain untuk mengonfigurasi kebijakan adalah dengan menggunakan "audit2allow" yang sudah disertakan selama instalasi "semanage" tadi. Apa yang dilakukan alat ini adalah dengan menarik peristiwa log dari audit.log dan menggunakan informasi itu untuk membuat kebijakan. Terkadang, MySQL mungkin memerlukan kebijakan non-standar, jadi ini adalah cara terbaik untuk mencapainya.

Pertama, mari atur mode ke permisif untuk domain MySQL dan verifikasi perubahannya:

$ semanage permissive -a mysqld_t
$ semodule -l | grep permissive
permissive_mysqld_t
permissivedomains

Langkah selanjutnya adalah membuat kebijakan menggunakan perintah di bawah ini:

$ grep mysqld /var/log/audit/audit.log | audit2allow -M {yourpolicyname}
$ grep mysqld /var/log/audit/audit.log | audit2allow -M mysql_new

Anda akan melihat output seperti berikut (akan berbeda tergantung pada nama kebijakan yang Anda tetapkan):

********************* PENTING ******************** **

Untuk mengaktifkan paket kebijakan ini, jalankan:

semodule -i mysql_new.pp

Seperti yang dinyatakan, kita perlu menjalankan “semodule -i mysql_new.pp” untuk mengaktifkan kebijakan. Silakan dan jalankan:

$ semodule -i mysql_new.pp

Langkah terakhir adalah mengembalikan domain MySQL ke mode “enforcing”:

$ semanage permissive -d mysqld_t

libsemanage.semanage_direct_remove_key:Menghapus modul permissive_mysqld_t terakhir (tidak ada modul permissive_mysqld_t lain pada prioritas lain).

Apa yang Harus Anda Lakukan Jika SELinux Tidak Bekerja?

Sering kali, konfigurasi SELinux membutuhkan begitu banyak pengujian. Salah satu cara terbaik untuk menguji konfigurasi adalah dengan mengubah mode menjadi "permisif". Jika Anda ingin mengaturnya hanya untuk domain MySQL, Anda bisa menggunakan perintah berikut. Ini adalah praktik yang baik untuk menghindari konfigurasi seluruh sistem menjadi "permisif":

$ semanage permissive -a mysqld_t

Setelah semuanya selesai, Anda dapat mengubah mode kembali ke "menegakkan":

$ semanage permissive -d mysqld_t

Selain itu, /var/log/audit/audit.log menyediakan semua log yang terkait dengan SELinux. Log ini akan banyak membantu Anda dalam mengidentifikasi akar penyebab dan alasannya. Yang harus Anda lakukan adalah memfilter “ditolak” menggunakan “grep”.

$ more /var/log/audit/audit.log |grep "denied"

Sekarang kita telah selesai mengonfigurasi kebijakan SELinux untuk sistem berbasis MySQL. Satu hal yang perlu disebutkan adalah bahwa konfigurasi yang sama perlu dilakukan pada semua node cluster Anda, Anda mungkin perlu mengulangi proses yang sama untuk mereka.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pencadangan Basis Data - Membandingkan MariaDB Mariabackup dan Percona Xtrabackup

  2. Menggunakan Replikasi Cluster Galera MySQL untuk Membuat Cluster Geo-Distributed:Bagian Kedua

  3. Laravel:Kunci yang ditentukan terlalu panjang; panjang kunci maksimal adalah 767 byte

  4. Cara Mengatasi Data Terhapus Secara Tidak Sengaja di MySQL &MariaDB

  5. Cara Memantau Kontainer MySQL dengan Prometheus - Penerapan di Standalone dan Swarm::Bagian Satu