SELinux برای هر فایل، پروسه و پورت یک برچسب دارد و فقط ترکیبهای مجاز اجازهی دسترسی دارند. حتی اگر مهاجم کنترل یک سرویس را بگیرد، SELinux جلوی دسترسیاش به بقیهی سیستم را میگیرد. خاموش کردنش یعنی از دست دادن این لایهی محافظ.
۱. وضعیت
getenforce
sestatus۲. برچسب فایلها
ls -Z /var/www/htmlاگر محتوای سایت را در مسیر غیرپیشفرض گذاشتهاید، برچسب درست را به آن مسیر بدهید:
sudo semanage fcontext -a -t httpd_sys_content_t "/data/www(/.*)?"
sudo restorecon -Rv /data/wwwchconبرچسب را موقتاً عوض میکند و باrestoreconبعدی از بین میرود. همیشهsemanage fcontextرا ترجیح دهید.
۳. booleanها
برای رفتارهای رایج، کلیدهای آماده وجود دارد:
getsebool -a | grep httpd
sudo setsebool -P httpd_can_network_connect on # وبسرور به برنامه یا پایگاه داده وصل شود
sudo setsebool -P httpd_can_sendmail on # وبسرور ایمیل بفرستد-P تغییر را دائمی میکند.
۴. برچسب پورت
اگر سرویسی را روی پورت غیراستاندارد اجرا میکنید، مثلاً SSH روی 2222:
sudo semanage port -l | grep ssh
sudo semanage port -a -t ssh_port_t -p tcp 2222۵. پیدا کردن علت خطا
sudo ausearch -m AVC -ts recent
sudo dnf install -y setroubleshoot-server
sudo sealert -a /var/log/audit/audit.log | lesssealert معمولاً دقیقاً میگوید کدام دستور مشکل را رفع میکند.
۶. حالت Permissive فقط برای یک سرویس
برای عیبیابی، بهجای خاموش کردن کل SELinux، فقط دامنهی یک سرویس را موقتاً Permissive کنید:
sudo semanage permissive -a httpd_t
# ... عیبیابی ...
sudo semanage permissive -d httpd_t