Creating Custom Policy Modules SELinux

Jika Anda mengaktifkan selinux pada server CentOS atau disto RHEL lain, maka sering terjadi akses pada service FTP atau Webserver dan lainnya mengalami masalah atau ditolak karena konfig permission pada selinux yang belum disesuaikan.

Contoh log dari tail -F /var/log/audit/audit.log | grep httpd

type=AVC msg=audit(1688415689.387:108): avc:  denied  { read } for  pid=1500 comm="httpd" name="public_html" dev="dm-0" ino=46140891 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:httpd_user_content_t:s0 tclass=dir permissive=0
type=SYSCALL msg=audit(1688415689.387:108): arch=c000003e syscall=257 success=no exit=-13 a0=ffffff9c a1=7f45b00053f0 a2=90800 a3=0 items=0 ppid=931 pid=1500 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)ARCH=x86_64 SYSCALL=openat AUID="unset" UID="apache" GID="apache" EUID="apache" SUID="apache" FSUID="apache" EGID="apache" SGID="apache" FSGID="apache"

Install utilitas SELinux

yum install policycoreutils-python-utils

Create policy

Pada log diatas ambil bagian httpd_t pada scontext lalu buat custom policy dengan perintah audit2allow

grep httpd_t /var/log/audit/audit.log  | audit2allow -M webserver
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i webserver.pp

Lalu load policy

semodule -i httpd.pp

Terkahir coba kembali akses webserver Anda.

Untuk menghapus policy

semanage module -r httpd