Data adalah aset terpenting dalam sebuah perusahaan, jadi Anda harus mempertimbangkan semua pertimbangan keamanan dalam database Anda untuk menjaganya seaman mungkin. Salah satu fitur keamanan penting pada Sistem Operasi berbasis RedHat adalah SELinux. Di blog ini, kita akan melihat apa itu fitur dan bagaimana mengonfigurasinya untuk database PostgreSQL dan TimescaleDB.
Apa itu SELinux?
Security-Enhanced Linux (SELinux) adalah arsitektur keamanan untuk sistem Linux yang memungkinkan administrator memiliki kontrol lebih besar atas siapa yang dapat mengakses sistem. Ini mendefinisikan kontrol akses untuk aplikasi, proses, dan file pada sistem menggunakan kebijakan keamanan, yang merupakan seperangkat aturan yang memberi tahu SELinux apa yang dapat diakses.
Saat aplikasi atau proses, yang dikenal sebagai subjek, membuat permintaan untuk mengakses objek, seperti file, SELinux memeriksa dengan cache vektor akses (AVC), di mana izin di-cache untuk subjek dan objek . Jika SELinux tidak dapat membuat keputusan tentang akses berdasarkan izin yang di-cache, ia akan mengirimkan permintaan ke server keamanan. Server keamanan memeriksa konteks keamanan aplikasi atau proses dan file. Konteks keamanan diterapkan dari database kebijakan SELinux dan izin diberikan atau ditolak.
Ada berbagai cara untuk mengkonfigurasinya. Anda dapat melihat file konfigurasi SELinux utama di /etc/selinux/config untuk melihat bagaimana konfigurasinya saat ini.
$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Ada dua arahan dalam file ini. Arahan SELINUX menentukan mode SELinux dan dapat memiliki tiga kemungkinan nilai:Enforcing, Permissive, atau Disabled.
-
Menegakkan (Default):Ini akan mengaktifkan dan menegakkan kebijakan keamanan SELinux pada sistem, menolak upaya akses yang tidak sah oleh pengguna dan proses.
-
Permisif:Menggunakannya, SELinux diaktifkan tetapi tidak akan menerapkan kebijakan keamanan. Semua pelanggaran kebijakan dicatat dalam log audit. Ini adalah cara yang baik untuk menguji SELinux sebelum menerapkannya.
-
Dinonaktifkan:SELinux dimatikan.
Direktif SELINUXTYPE menentukan kebijakan yang akan digunakan. Nilai default ditargetkan dan dengan kebijakan ini, SELinux memungkinkan Anda untuk menyesuaikan dan menyempurnakan izin kontrol akses.
Bahkan ketika mode Enforcing adalah mode default, menonaktifkan SELinux telah menjadi praktik umum karena lebih mudah daripada mengatasinya. Tentu saja, ini tidak disarankan dan Anda harus mengonfigurasinya setidaknya dalam mode Permisif dan memeriksa log secara berkala untuk mencari perilaku yang tidak biasa.
Cara Mengonfigurasi SELinux
Jika SELinux dinonaktifkan di lingkungan Anda, Anda dapat mengaktifkannya dengan mengedit file konfigurasi /etc/selinux/config dan menyetel SELINUX=permissive atau SELINUX=enforcing.
Jika Anda belum pernah menggunakan SELinux, cara terbaik untuk mengkonfigurasinya adalah dengan menggunakan mode Permissive terlebih dahulu, periksa log untuk mencari pesan yang ditolak di file log pesan, dan perbaiki jika diperlukan:
$ grep "SELinux" /var/log/messages
Setelah semuanya ditinjau dan aman untuk melanjutkan, Anda dapat mengkonfigurasi SELinux untuk menerapkan menggunakan metode sebelumnya atau tanpa memulai ulang dengan menggunakan perintah berikut:
$ setenforce 1
Jika Anda perlu melakukan rollback, jalankan:
$ setenforce 0
Perintah ini dapat digunakan untuk beralih antara mode Penegakan dan Permisif dengan cepat, tetapi perubahan ini tidak bertahan jika Anda mem-boot ulang sistem. Anda perlu mengonfigurasi nilai dalam file konfigurasi agar tetap ada.
Anda dapat memeriksa status SELinux saat ini menggunakan perintah getenforce:
$ getenforce
Enforcing
Atau untuk informasi lebih detail, Anda dapat menggunakan sestatus sebagai gantinya:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 33
Cara Mengonfigurasi SELinux untuk PostgreSQL dan TimescaleDB
Jika Anda menginstal PostgreSQL/TimescaleDB menggunakan konfigurasi default dan direktori data default, dan SELinux juga dikonfigurasi secara default, kemungkinan besar Anda tidak akan mengalami masalah apa pun, tetapi masalahnya adalah jika Anda ingin gunakan, misalnya, lokasi tertentu untuk menyimpan database Anda, jadi mari kita lihat cara mengonfigurasi SELinux agar berfungsi. Untuk contoh ini, kita akan menginstal PostgreSQL 13 pada CentOS 8, dan akan menggunakan /pgsql/data/ sebagai direktori data.
Pertama, aktifkan modul postgresql:
$ dnf module enable postgresql:13
Instal paket PostgreSQL 13 yang sesuai:
$ dnf -y install postgresql-server postgresql-contrib postgresql-libs
Aktifkan layanan:
$ systemctl enable postgresql.service
Inisialisasi database PostgreSQL Anda:
$ postgresql-setup --initdb
Sekarang, jika Anda hanya memulai layanan tanpa mengubah apa pun, seperti direktori data, itu akan mulai dengan baik, jika tidak, Anda akan melihat kesalahan seperti:
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal postmaster[29116]: postmaster: could not access the server configuration file "/pgsql/data/postgresql.conf": Permission denied
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Jun 15 19:41:40 ip-172-31-24-90.us-east-2.compute.internal systemd[1]: postgresql.service: Failed with result 'exit-code'.
Jadi, mari kita lihat cara memperbaikinya. Pertama, ubah direktori data Anda di file dan layanan konfigurasi PostgreSQL Anda. Untuk ini, edit file layanan PostgreSQL dan ubah lokasi PGDATA:
$ vi /etc/systemd/system/multi-user.target.wants/postgresql.service
Environment=PGDATA=/pgsql/data
Edit file profil bash PostgreSQL dan ubah lokasi PGDATA:
$ vi /var/lib/pgsql/.bash_profile
PGDATA=/pgsql/data
Baca perubahannya:
$ systemctl daemon-reload
Inisialisasi database PostgreSQL baru:
$ postgresql-setup --initdb
* Initializing database in '/pgsql/data'
* Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Tidak perlu menentukan lokasi direktori data baru seperti yang Anda lakukan sebelumnya di file konfigurasi. Sekarang, sebelum memulai, Anda perlu mengubah label SELinux:
$ chcon -Rt postgresql_db_t /pgsql/data
Perintah ini akan mengubah konteks keamanan SELinux, dan tandanya adalah:
-
-R, --recursive:Beroperasi pada file dan direktori secara rekursif
-
-t, --type=TYPE:Setel jenis TYPE dalam konteks keamanan target
Kemudian, mulai layanan PostgreSQL:
$ systemctl start postgresql.service
Dan database Anda berjalan sekarang:
$ ps aux |grep postgres |head -1
postgres 28566 0.0 3.0 497152 25312 ? Ss 21:16 0:00 /usr/bin/postmaster -D /pgsql/data
Ini hanyalah contoh dasar tentang cara mengkonfigurasi SELinux untuk PostgreSQL/TimescaleDB. Ada berbagai cara untuk melakukan ini dengan batasan atau alat yang berbeda. Implementasi atau konfigurasi SELinux terbaik bergantung pada kebutuhan bisnis.
Cara menggunakan PostgreSQL dan TimescaleDB dengan ClusterControl dan SELinux
ClusterControl tidak mengelola modul keamanan kernel Linux seperti SELinux. Saat menerapkan cluster PostgreSQL atau TimescaleDB dengan menggunakan ClusterControl, Anda dapat menentukan apakah Anda ingin ClusterControl menonaktifkan SELinux untuk Anda selama proses penerapan untuk mengurangi risiko kesalahan:
Jika Anda tidak ingin menonaktifkannya, Anda dapat menggunakan Permisif mode dan pantau log di server Anda untuk memastikan bahwa Anda memiliki konfigurasi SELinux yang benar. Setelah itu, Anda dapat mengubahnya menjadi Enforcing dengan mengikuti petunjuk yang disebutkan di atas.
Anda dapat menemukan informasi lebih lanjut tentang konfigurasi SELinux di situs resmi RedHat atau CentOS.