Konfigurasi SELinux dengan Web Server Nginx. Saya melihat beberapa tutorial yang membahas tentang instalasi Nginx di CentOS menyarankan pengguna untuk menonaktifkan selinux. Menurut saya menonaktifkan fitur pengamanan default yang disediakan oleh sistem bukan praktik yang bagus. Jika kalian memang tidak bisa "menangani" selinux, pakailah distro lain seperti Ubuntu.
Mengaktifkan SELinux secara Global
Secara global disini maksudnya agar rule dari SELinux ini aktif dan berlaku untuk seluruh service yang berjalan.
Pertama, pastikan selinux kalian sudah aktif. Cek dengan perintah
Jika statusnya belum enable, kita aktifkan terlebih dahulu selinux secara global dengan perintah
Install sealert
Kedua tool ini berguna untuk memeriksa kesalahan kesalahan konfigurasi dari aplikasi.
Atur Mode Permissive di Nginx
Selanjutnya adalah mengubah (sementara) mode selinux di Nginx ke permissive. Tujuannya agar kita bisa memeriksa apakah rule dari SELinux berbenturan dengan konfigurasi yang kita tetapkan di Nginx. Di mode permissive saat ada kesalahan konfigurasi atau ada konfigurasi di Nginx yang tidak memenuhi standar keamanan menurut SELinux, SELinux tidak akan mentrigger firewall yang menyebabkan Nginx menjadi error, namun hanya akan mencatat seluruh kesalahan tersebut dalam file log. Gunakan semanage untuk mengatur mode permissive di selinux Nginx.
Melihat Peletakan Konfigurasi yang Benar
Maksud dari peletakan konfigurasi yang benar disini adalah tempat tempat file ataupun direktori nginx yang sesuai dengan selinux. Misal direktori standard untuk web server adalah di /usr/share/nginx/html.
Memeriksa Kesalahan Konfigurasi
Gunakan perintah
Well, error tersebut disebabkan karena saya menggunakan direktori Nginx yang non standard. Saya menggunakan lokasi file web di /server/labs-server yangmana menyalahi aturan dari SELinux.
Solusinya adalah mengubah direktori web server ke lokasi default di /usr/share/nginx, atau mengijinkan SELinux menggunakan direktori non standard. Untuk opsi kedua, gunakan perintah
Jika semuanya sudah oke, tidak ada yang error lagi, jalankan perintah berikut untuk menjalankan mode enforcing di Nginx.
Referensi:
sestatus
Jika statusnya belum enable, kita aktifkan terlebih dahulu selinux secara global dengan perintah
sudo setenforce EnforcingAtau aktifkan secara permanen dengan cara mengedit file /etc/selinux/config dan ubah baris Ubah baris SELINUX, ubah nilainya menjadi menjadi SELINUX=enforcing.
Install sealert
Kedua tool ini berguna untuk memeriksa kesalahan kesalahan konfigurasi dari aplikasi.
sudo yum install policycoreutils-python setroubleshoot-server
Atur Mode Permissive di Nginx
Selanjutnya adalah mengubah (sementara) mode selinux di Nginx ke permissive. Tujuannya agar kita bisa memeriksa apakah rule dari SELinux berbenturan dengan konfigurasi yang kita tetapkan di Nginx. Di mode permissive saat ada kesalahan konfigurasi atau ada konfigurasi di Nginx yang tidak memenuhi standar keamanan menurut SELinux, SELinux tidak akan mentrigger firewall yang menyebabkan Nginx menjadi error, namun hanya akan mencatat seluruh kesalahan tersebut dalam file log. Gunakan semanage untuk mengatur mode permissive di selinux Nginx.
sudo semanage permissive -a httpd_tOk, sekarang seluruh kesalahan konfigurasi akan dicatat dalam file log, namun Nginx masih bisa berjalan normal tanpa diblokir oleh selinux.
Melihat Peletakan Konfigurasi yang Benar
Maksud dari peletakan konfigurasi yang benar disini adalah tempat tempat file ataupun direktori nginx yang sesuai dengan selinux. Misal direktori standard untuk web server adalah di /usr/share/nginx/html.
sudo semanage fcontext -l | grep nginx
Memeriksa Kesalahan Konfigurasi
Gunakan perintah
sudo sealert -a /var/log/audit/audit.logContoh output:
Well, error tersebut disebabkan karena saya menggunakan direktori Nginx yang non standard. Saya menggunakan lokasi file web di /server/labs-server yangmana menyalahi aturan dari SELinux.
Solusinya adalah mengubah direktori web server ke lokasi default di /usr/share/nginx, atau mengijinkan SELinux menggunakan direktori non standard. Untuk opsi kedua, gunakan perintah
sudo semanage fcontext -a -t httpd_sys_content_t "/server(/.*)?"
sudo restorecon -R -v /serverMengembalikan Nginx ke Mode Enforcing
Jika semuanya sudah oke, tidak ada yang error lagi, jalankan perintah berikut untuk menjalankan mode enforcing di Nginx.
sudo semanage permissive -d httpd_tUntuk beberapa perintah atau opsi yang bisa digunakan, kalian bisa cek dengan command
man httpd_selinuxOke mungkin sekian tutorial kali ini, semoga bermanfaat. Jika ada yang ingin ditanyakan silahkan tinggalkan komentar.
Referensi:
- https://www.getpagespeed.com/server-setup/nginx/nginx-selinux-configuration
- https://www.rootusers.com/how-to-enable-or-disable-selinux-in-centos-rhel-7/
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security-enhanced_linux/index
- https://www.nginx.com/blog/using-nginx-plus-with-selinux/