## 🔐 اصول کنترل دسترسی اجباری با SELinux (نسخه بهروزشده)
**SELinux** (Security-Enhanced Linux) یک سیستم **کنترل دسترسی اجباری (Mandatory Access Control - MAC)** است که به منظور افزایش امنیت در سیستمهای لینوکسی طراحی شده است. این سیستم توسط NSA توسعه یافت و در توزیعهایی مثل **RHEL, CentOS, Fedora** و مشتقات آن به صورت پیشفرض فعال است.
---
## 📌 تفاوت SELinux با مجوزهای سنتی لینوکس
در لینوکس سنتی، مجوزها فقط بین مالک، گروه و دیگران قابل تعریف است. اما با SELinux، **سیاستهای دقیقتری در سطح کاربر، پردازه، پورت و حتی فایلها** اعمال میشود که مانع اجرای عملیاتهای غیرمجاز حتی توسط کاربر ریشه (root) میشود.
---
## 🧰 حالات عملکرد SELinux
```bash
getenforce
```
### سه حالت عملکرد:
* **Enforcing**: سیاستها اعمال میشوند.
* **Permissive**: فقط گزارش (log) تولید میشود ولی محدودیتی اعمال نمیشود.
* **Disabled**: SELinux غیرفعال است.
برای تغییر حالت به صورت موقت:
```bash
sudo setenforce 0 # Permissive
sudo setenforce 1 # Enforcing
```
---
## 🔎 بررسی وضعیت SELinux
```bash
sestatus
```
---
## 🗂 ساختار برچسبهای SELinux
هر فایل یا پروسه دارای یک **context** است مثل:
```bash
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
```
برچسبها شامل:
* **user**
* **role**
* **type** ← مهمترین
* **level**
---
## 🛠 دستورات کلیدی SELinux
### 1. **تغییر برچسب فایلها:**
```bash
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
```
### 2. **بازنشانی برچسبها به حالت پیشفرض:**
```bash
sudo restorecon -Rv /var/www/html
```
### 3. **مدیریت سیاستهای Boolean:**
```bash
getsebool -a
setsebool -P httpd_can_network_connect on
```
---
## 📚 رفع مشکلات رایج SELinux
اکثر مواقع SELinux باعث مشکلاتی مانند **اجرا نشدن سرویسها** یا **محدود شدن دسترسی به فایلها** میشود. در این مواقع، لاگ SELinux را بررسی کنید:
```bash
sudo ausearch -m avc -ts recent
# یا
sudo journalctl | grep AVC
```
برای پیشنهاد خودکار رفع مشکل:
```bash
sudo sealert -a /var/log/audit/audit.log
```
---
## 🔐 نکات امنیتی مهم
* هرگز SELinux را کاملاً **غیرفعال نکنید**، بلکه آن را در حالت Permissive بگذارید تا مشکلات احتمالی را شناسایی کنید.
* از ابزار **audit2why** و **audit2allow** برای تحلیل لاگها و ساخت policy استفاده کنید.
---
## ✅ نتیجهگیری
**SELinux** یکی از قویترین سیستمهای کنترل دسترسی در لینوکس است. اگرچه در ابتدا ممکن است پیچیده به نظر برسد، اما یادگیری آن نقش مهمی در **افزایش سطح امنیت سرورها** دارد. با بهروزرسانیهای جدید، مدیریت آن سادهتر شده و ابزارهای بیشتری برای تحلیل و رفع خطا در دسترس قرار گرفتهاند.