## 🛡️ ایمنسازی فایلها و پوشهها با ACL (Access Control Lists) در لینوکس
در سیستمهای لینوکسی، بهصورت پیشفرض مجوزهای دسترسی به فایلها محدود به **مالک (user)، گروه (group) و سایر کاربران (others)** است. اما در بسیاری از سناریوها نیاز داریم **مجوز دسترسی خاص برای کاربران متعدد و متفاوت تعریف کنیم**. اینجاست که **ACL (Access Control List)** وارد میدان میشود.
---
## 📌 ACL چیست؟
ACL یک مکانیزم **کنترل دسترسی پیشرفته** است که اجازه میدهد به بیش از یک کاربر یا گروه خاص مجوزهایی مانند **خواندن (r)، نوشتن (w)** و **اجرا (x)** داده شود، بدون اینکه نیاز به تغییر مالک فایل یا گروه آن باشد.
---
## 🧰 فعالسازی ACL در پارتیشن
ابتدا باید مطمئن شوید فایلسیستم از ACL پشتیبانی میکند. بسیاری از فایلسیستمها مانند **ext3/ext4** و **xfs** از ACL پشتیبانی دارند.
### بررسی فعال بودن ACL:
```bash
mount | grep acl
```
اگر فعال نیست، پارتیشن را با گزینه `acl` در `/etc/fstab` ویرایش کنید:
```
/dev/sda1 / ext4 defaults,acl 0 1
```
سپس پارتیشن را مجدد mount کنید:
```bash
sudo mount -o remount /
```
---
## 🔧 دستورات مدیریت ACL
### 1. **دادن مجوز ACL به کاربر خاص**
```bash
setfacl -m u:ali:r-- myfile.txt
```
📌 معنی: کاربر `ali` فقط اجازه خواندن فایل `myfile.txt` را دارد.
---
### 2. **دادن مجوز به گروه خاص**
```bash
setfacl -m g:designers:rw- myfile.txt
```
📌 گروه `designers` میتواند فایل را بخواند و بنویسد.
---
### 3. **مشاهده مجوزهای ACL فایل**
```bash
getfacl myfile.txt
```
---
### 4. **حذف یک ACL خاص**
```bash
setfacl -x u:ali myfile.txt
```
---
### 5. **حذف تمام ACLها و بازگردانی به مجوزهای سنتی**
```bash
setfacl -b myfile.txt
```
---
### 6. **دادن ACL پیشفرض به پوشهها**
اگر میخواهید همه فایلهایی که در یک دایرکتوری ساخته میشوند یک ACL پیشفرض داشته باشند:
```bash
setfacl -d -m u:ali:rw- myfolder/
```
---
## 🧪 مثال عملی
فرض کنید یک تیم شامل کاربران `ali`، `zahra` و `reza` روی پروژهای مشترک کار میکنند. بهجای تغییر مالک فایل، میتوانید:
```bash
setfacl -m u:ali:rw- project.doc
setfacl -m u:zahra:r-- project.doc
setfacl -m u:reza:rw- project.doc
```
---
## 🧠 نکات امنیتی و مدیریتی
* ACLها با مجوزهای سنتی POSIX تداخل ندارند بلکه **تکمیلکننده آنها هستند**.
* اگر کاربر هم در گروه باشد و هم ACL خاصی داشته باشد، **ACL ارجحیت دارد**.
* ابزارهای `rsync` و `tar` هنگام پشتیبانگیری باید با گزینه حفظ ACL اجرا شوند:
```bash
rsync -a --acls source/ dest/
```
---
## ✅ جمعبندی
ACL راهکاری قدرتمند برای تعریف **دسترسیهای انعطافپذیر و دقیقتر** نسبت به مجوزهای سنتی لینوکس است. استفاده از ACL مخصوصاً در محیطهای چندکاربره و سرورهای اشتراکی کاربرد فراوان دارد.