SELINUX menyediakan lapisan keamanan tambahan selain file permission di linux. Hal ini kadang membingungkan untuk sysadmin yang baru saja belajar menggunakan system yang menerapkan SELINUX (seperti saya ini :p).
Skenarionya begini, saya perlu setting IOU di salah satu mesin lab yang menggunakan CENTOS 7. Direktori default instalasi IOU ada di /opt/iou . Port untuk IOU saya set 8000. Paket standar apache httpd, php, dan MySQL ( di Centos 7 defaultnya menggunakan MariaDB) sudah terinstall sempurna. Sebenarnya IOU tidak butuh MySQL, tapi siapa tahu nanti modul yang lain butuh. Mari kita mulai:
Instalasi IOU melalui rpm tidak ada hambatan berarti. Berdasarkan file konfigurasi di /etc/httpd/conf.d/iou.conf , ada beberapa direktori penting untuk IOU
- /opt/iou : direktori instalasi
- /opt/iou/html : direktori file html
- /opt/iou/data/ : direktori untuk unggah data
- /opt/iou/data/Logs/: direktori log
Untuk sistem tanpa SELINUX, yang perlu dilakukan adalah menambah listening port 8000 di file /etc/httpd/conf/httpd.conf dan selesai. Tapi ada langkah tambahan untuk mengijinkan httpd mengakses IOU di sistem dengan SELINUX. Pertama-tama perlu kita install tools untuk mengatur SELINUX:
1 2 |
[root@netlab]#yum install -y policycoreutils-python [root@netlab]#yum install -y setroubleshooting |
Defaultnya, apache memiliki beberapa konteks untuk SELINUX:
- httpd_sys_content_t : direktori read only untuk apache
- httpd_sys_rw_content_t : direktori read-write untuk apache, seperti untuk folder unggah
- httpd_log_t : direktori untuk menyimpan log
Untuk skenario yang lain bisa dilihat di halaman man Apache SELINUX
1 |
[root@netlab]# man httpd_selinux |
Contoh policy yang sudah diterapkan:
1 2 3 4 |
[root@netlab]# semanage fcontext -l | grep httpd_sys_content_t /var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 /var/www/icons(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 /var/www/svn/conf(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 |
Berarti yang perlu kita lakukan adalah:
1. Untuk direktori utama:
1 |
[root@netlab]# semanage fcontext -a -t httpd_sys_content_t "/opt/iou(/.*)?" |
2. Untuk direktori unggah data:
1 |
[root@netlab]# semanage fcontext -a -t httpd_sys_rw_content_t "/opt/iou/data(/.*)?" |
3. Untuk direktori log:
1 |
[root@netlab]# semanage fcontext -a -t httpd_log_t "/opt/iou/data/Logs(/.*)?" |
4. Port TCP 8000
1 |
[root@netlab]# semanage port -a -t http_port_t -p tcp 8000 |
Cek lagi untuk memastikan policy sudah diterapkan
1 2 3 4 |
[root@netlab]#semanage fcontext -l | grep /opt/iou /opt/iou(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 /opt/iou/data(/.*)? all files system_u:object_r:httpd_sys_rw_content_t:s0 /opt/iou/data/Logs(/.*)? all files system_u:object_r:httpd_log_t:s0 |
1 |
[root@netlab]# restorecon -Rv /opt/iou |
1 |
[root@netlab]# ls -lZ /opt/iou |
Oke, sekarang restart httpd.service dan cek ulang apakah port 8000 sudah bisa diakses.
1 |
[root@netlab]# systemctl restart httpd |
wah ini, pas banget, kebetulan pas harus nyetting centos dan bingung gara-gara selinux 😀
Mantab banged mas, makasih tutorialnya. Ini memang yang saya butuhkan. akhirnya ketemu juga 😀