کنترل دسترسی اجباری (MAC) با SELinux – راهنمای کامل و به‌روز پرینت


## 🔐 کنترل دسترسی اجباری (MAC) با SELinux – راهنمای کامل و به‌روز

**SELinux** یا **Security-Enhanced Linux** یک چارچوب امنیتی قدرتمند برای پیاده‌سازی **کنترل دسترسی اجباری (Mandatory Access Control)** است که توسط NSA توسعه یافته و امروزه در توزیع‌هایی مثل **RHEL، CentOS، Fedora و Rocky Linux** به‌صورت پیش‌فرض فعال است.

در این مقاله، به زبان ساده ولی دقیق با مفاهیم، ابزارها، سیاست‌ها و مثال‌های عملی SELinux آشنا می‌شوید.

---

## 🧠 SELinux چیست و چرا اهمیت دارد؟

برخلاف کنترل دسترسی سنتی لینوکس (مثل مجوزهای فایل و مالکیت)، **SELinux سطح دومی از امنیت را اعمال می‌کند** که حتی اگر مهاجم به root دسترسی پیدا کند، همچنان در اجرای بسیاری از عملیات‌ها محدود خواهد شد.

---

## 🔎 حالات SELinux

برای مشاهده وضعیت SELinux از دستور زیر استفاده کنید:

```bash
getenforce
```

سه حالت اصلی:

* `Enforcing`: فعال و در حال اجرا (پیش‌فرض در بسیاری از سیستم‌ها)
* `Permissive`: فقط گزارش می‌دهد ولی مسدود نمی‌کند.
* `Disabled`: غیرفعال

تغییر موقت وضعیت:

```bash
setenforce 0 # Permissive
setenforce 1 # Enforcing
```

تغییر دائمی در فایل زیر انجام می‌شود:

```bash
sudo nano /etc/selinux/config
```

---

## 🔒 سیاست‌های SELinux

SELinux رفتار فرآیندها و کاربران را بر اساس **سیاست‌های امنیتی (Policies)** محدود می‌کند.

### سه بخش اصلی:

| مورد | توضیح |
| ------------------------------------ | ------------------------------------------------ |
| **Type enforcement (TE)** | تعیین نوع منابع و فرآیندها |
| **Role-Based Access Control (RBAC)** | نقش‌های امنیتی برای کاربران |
| **Multi-Level Security (MLS)** | امنیت چند سطحی (در محیط‌های نظامی یا بسیار حساس) |

---

## 📁 برچسب‌ها در SELinux

هر فایل، پوشه، پورت یا فرآیند دارای برچسبی شبیه به زیر است:

```bash
ls -Z /var/www/html
```

خروجی:

```
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 index.html
```

ساختار برچسب:
**user\:role\:type\:level**

---

## 🧰 دستورات پرکاربرد SELinux

### 1. تغییر نوع برچسب (type)

```bash
sudo chcon -t httpd_sys_content_t /var/www/html/index.html
```

### 2. بازگردانی برچسب پیش‌فرض

```bash
sudo restorecon -Rv /var/www/html/
```

### 3. نمایش context کامل

```bash
ps -eZ | grep httpd
```

---

## 🔧 مدیریت پالیسی‌ها با ابزار semanage

### اضافه‌کردن context به پورت:

```bash
sudo semanage port -a -t http_port_t -p tcp 8081
```

### نمایش تمام پورت‌های تعریف‌شده:

```bash
sudo semanage port -l | grep http
```

---

## ⚠️ بررسی خطاهای SELinux

برای خطاهای ناشی از محدودیت‌های SELinux، لاگ‌ها را در فایل زیر بررسی کنید:

```bash
/var/log/audit/audit.log
```

یا استفاده از ابزار:

```bash
sudo ausearch -m avc -ts recent
```

---

## 🔍 تجزیه و تحلیل لاگ‌ها با `sealert`

ابزار `sealert` از بسته `setroubleshoot-server` کمک می‌گیرد:

```bash
sudo yum install setroubleshoot-server
sudo sealert -a /var/log/audit/audit.log
```

---

## ✅ نتیجه‌گیری

فعال نگه داشتن SELinux در حالت Enforcing، یکی از **مهم‌ترین راهکارهای امنیتی برای سرورهای لینوکسی** محسوب می‌شود. درک سیاست‌ها، برچسب‌ها و نحوه رفع خطاها، شما را قادر می‌سازد یک محیط کاملاً امن و کنترل‌شده ایجاد کنید.

 


آیا این پاسخ به شما کمک کرد؟

  • 0
« برگشت