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
cachedirektori lokasi file cache
logdirektori untuk Log file seperi access log
public_htmldirektori 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_tdirektori atau file dapat dibaca oleh apache (read-only)
httpd_sys_rw_content_tdirektori atau file dapat dibaca dan ditulis oleh apache (read-write)
httpd_log_tdirektori dan file dapat digunakan oleh apache untuk pencatatan log
httpd_cache_tdirektori 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.

Similar Posts

4.3 4 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments