Konfigurasi Selinux Untuk Apache
Selinux akan cukup merepotkan saat menggunakan Apache Web Server dan menggunakan Direktori kerja diluar default direktori Apache. Selinux tidak akan mengijinkan Apache mengakses konten dan log file diluar default direktori Apache.
Solusi termudah memang disable selinux, tapi ada baiknya membuat policies selinux sendiri untuk direktori kerja Apache agar apache dapat mengakses konten dan log file.
Sebelumnya dimulai untuk melakukan manahemen ke policy selinux dibutuhkan utility semanage
.
# dnf install -y policycoreutils-python-utils
Dan untuk membantu dalam memantau log dari selinux, opsional.
# dnf install setroubleshoot
Struktur Direktori dan FContext Selinux
Untuk penerapan selinux policy kali ini virtual direktori apache adalah sebagai berikut. Untuk tahu cara mebuat virtual direktori apache bisa membaca artikel sebelumnya “Cara Konfigurasi VirtualHost Apache di AlmaLinux 8, RockyLinux, RHEL dan CentOS“
/home/
└── web1
├── cache
├── log
└── public_html
├── wp-admin
├── wp-content
└── wp-includes
cache | direktori lokasi file cache |
log | direktori untuk Log file seperi access log |
public_html | direktori kontent website |
Ada beberapa policies selinux yang disebut fcontext menentukan hak akses dari apache terhadap direktori dan file. Umumnya ada 4 fcontext apache yang sering digunakan :
httpd_sys_content_t | direktori atau file dapat dibaca oleh apache (read-only) |
httpd_sys_rw_content_t | direktori atau file dapat dibaca dan ditulis oleh apache (read-write) |
httpd_log_t | direktori dan file dapat digunakan oleh apache untuk pencatatan log |
httpd_cache_t | direktori dan file dapat digunakan oleh apache untuk pencatatan cache |
untuk melihat lebih banyak fcontext apache bisa menggunakan perintah berikut ini.
# grep httpd /etc/selinux/targeted/contexts/files/file_contexts
Fungsi setroubleshoot / sealert
Sebagai contoh selinux akan memblok akses apache kedalam file sebelum label context diterapkan
[root@alma8 log]# grep sealert /var/log/messages
May 12 04:37:12 alma8 setroubleshoot[3106]: SELinux is preventing /usr/sbin/httpd from append access on the file error.log. For complete SELinux messages run: sealert -l 039e4ab8-b401-45d0-8db2-cd9a60953050
untuk lebih detailnya dapat dilihat menggunakan perintah sealert
tools dari setroubleshoot, dan akan memberikan masukan solusi
[root@alma8 log]# sealert -l 039e4ab8-b401-45d0-8db2-cd9a60953050
SELinux is preventing /usr/sbin/httpd from append access on the file error.log.
***** Plugin httpd_write_content (92.2 confidence) suggests ***************
If you want to allow httpd to have append access on the error.log file
Then you need to change the label on 'error.log'
Do
# semanage fcontext -a -t httpd_sys_rw_content_t 'error.log'
# restorecon -v 'error.log'
***** Plugin catchall_boolean (7.83 confidence) suggests ******************
If you want to allow httpd to unified
Then you must tell SELinux about this by enabling the 'httpd_unified' boolean.
Do
setsebool -P httpd_unified 1
Konfigurasi selinux fcontext apache
Pertama memberikan label httpd_sys_content_t pada direktori /home/web1/ berikut subdirektori dan file yang berisi cms wordpress.
semanage fcontext -a -t httpd_sys_content_t "/home/web1(/.*)?"
Kedua berikan label httpd_sys_rw_content_t pada direktori wp-content berikut subdirektori dan file. hal ini diperlukan agar dapat melakukan upload, install theme dan plugin.
semanage fcontext -a -t httpd_sys_rw_content_t "/home/web1/public_html/wp-content(/.*)?"
Ketiga berikan label httpd_sys_rw_content_t pada file wp-config.php
semanage fcontext -a -t httpd_sys_rw_content_t "/home/web1/public_html/wp-config.php"
Keempat berikan label httpd_log_t pada direktori log, file yang nantinya ada di direktori digunakan oleh apache hanya untuk log saja
# semanage fcontext -a -t httpd_log_t "/home/web1/log(/.*)?"
Kelima berikan label httpd_cache_t pada direktori cache, file yang nantinya ada di direktori digunakan oleh apache hanya untuk cache saja
# semanage fcontext -a -t httpd_cache_t "/home/web1/cache(/.*)?"
Agar policy selinux di perbarui dan bekerja gunakan perintah.
# restorecon -Rv /home/web1/
Untuk melihat hasil perubahan dari selinux context.
[root@alma8 web1]# ls -lZ /home/web1/
total 4
drwxr-xr-x. 2 web1 web1 unconfined_u:object_r:httpd_cache_t:s0 6 May 11 05:19 cache
drwxr-xr-x. 2 web1 web1 unconfined_u:object_r:httpd_log_t:s0 24 May 11 05:19 log
drwxr-x---. 5 web1 nobody unconfined_u:object_r:httpd_sys_content_t:s0 4096 Apr 28 09:28 public_html
Dengan begini Apache sudah mendapatkan izin melakukan Read and Write ke direktori apache. Tapi jangan lupa untuk permission file dan direktori haruslah tetap mengijinkan dimana direktori adalah 755 dan file 644.
Sekian artikel Konfigurasi Selinux Untuk Apache, Salam.