دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
دانشنامه مارال هاست دانشنامه مارال هاست
دانشنامه مارال هاست دانشنامه مارال هاست
  • صفحه اصلی
  • مقالات
    • هاست اشتراکی
    • دامنه
    • سرور مجازی
    • کنترل پنل سی‌پنل
    • کنترل پنل پلسک
    • کنترل پنل دایرکت ادمین
    • ایمیل
    • CloudLinux
    • Cloudflare
  • تماس با ما
لینوکس
  • Folder icon closed Folder open iconآشنایی با لینوکس (Linux Fundamentals)
  • Folder icon closed Folder open iconتوزیع‌های مختلف لینوکس (Linux Distributions)
  • Folder icon closed Folder open iconFHS؛ آشنایی با ساختار فایل‌ و پوشه‌های لینوکسی
  • Folder icon closed Folder open iconمهم‌ترین دستورات پایه‌ای برای هر sysadmin
  • Folder icon closed Folder open iconمدیریت فایل و پوشه (file & directory management) در لینوکس
  • Folder icon closed Folder open iconآموزش ویرایش فایل‌های متنی در لینوکس با Nano و Vim
  • Folder icon closed Folder open iconآشنایی با users، groups و ساختار مدیریت کاربران در لینوکس
  • Folder icon closed Folder open iconآموزش Permission و Ownership در لینوکس
  • Folder icon closed Folder open iconآشنایی با Root و sudo
  • Folder icon closed Folder open iconآشنایی با Processها در لینوکس
  • Folder icon closed Folder open iconتغییر Hostname در لینوکس
  • Folder icon closed Folder open iconتنظیم Timezone در لینوکس
  • Folder icon closed Folder open iconتنظیم NTP در لینوکس
  • Folder icon closed Folder open iconبروزرسانی سیستم در لینوکس
  • Folder icon closed Folder open iconساخت کاربر جدید در لینوکس
  • Folder icon closed Folder open iconایجاد کاربران و گروه ها در لینوکس
  • Folder icon closed Folder open iconآموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها
  • Folder icon closed Folder open iconآموزش umask در لینوکس؛ تعیین مجوز پیش‌فرض فایل‌ها و پوشه‌های جدید
  • Folder icon closed Folder open iconآموزش فایل sudoers؛ مدیریت دسترسی کاربران به دستورات مدیریتی در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chown در لینوکس
  • Folder icon closed Folder open iconآموزش دستور chmod در لینوکس
  • Folder icon closed Folder open iconSticky Bit در لینوکس چیست؟ آموزش افزایش امنیت پوشه‌های اشتراکی
  • Folder icon closed Folder open iconآموزش SUID در لینوکس؛ اجرای برنامه‌ها با دسترسی مالک فایل
  • Folder icon closed Folder open iconآموزش SGID در لینوکس؛ مدیریت دسترسی گروه‌ها و اجرای برنامه‌ها
لینوکس

آموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها

آموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها

مقدمه

در لینوکس، مجوزهای معمولی فایل‌ها و پوشه‌ها براساس سه سطح اصلی مدیریت می‌شوند:

  • مالک فایل یا پوشه
  • گروه مالک
  • سایر کاربران

این ساختار برای بسیاری از سناریوها کافی است؛ اما زمانی که بخواهید به چند کاربر یا گروه مختلف، دسترسی‌های متفاوتی بدهید، محدودیت‌های آن مشخص می‌شود.

برای مثال، ممکن است یک فایل متعلق به کاربر root و گروه developers باشد، اما بخواهید:

File owner: root
File group: developers

Owner: Read and Write
Group: Read Only
ali: Read Only
reza: Read and Write
auditors: Read Only
Other users: No Access

در مجوزهای معمولی لینوکس نمی‌توان این دسترسی‌ها را بدون تغییر مالکیت، گروه فایل یا ساخت گروه‌های اضافی به‌سادگی پیاده‌سازی کرد.

در چنین شرایطی می‌توان از ACL استفاده کرد. ACL به مدیر سیستم اجازه می‌دهد برای کاربران و گروه‌های مشخص، مجوزهای جداگانه و دقیق‌تری تعریف کند.

در این مقاله نحوه نصب، بررسی، تنظیم، حذف، ارث‌بری، پشتیبان‌گیری و عیب‌یابی ACL در لینوکس را آموزش می‌دهیم.


ACL چیست؟

ACL مخفف Access Control List است و برای مدیریت پیشرفته مجوزهای دسترسی به فایل‌ها و پوشه‌ها استفاده می‌شود.

در مجوزهای معمولی لینوکس، هر فایل یا پوشه فقط می‌تواند موارد زیر را داشته باشد:

  • یک مالک
  • یک گروه مالک
  • مجوز برای سایر کاربران

اما ACL امکان تعریف مجوز برای چند کاربر و گروه مشخص را فراهم می‌کند.

برای مثال:

File owner: root
File group: developers

ali: Read Only
reza: Read and Write
auditors: Read Only
Other users: No Access

در این حالت، نیازی نیست کاربر ali یا reza مالک فایل باشند یا گروه اصلی فایل تغییر کند.

ACL جایگزین کامل مجوزهای معمولی لینوکس نیست، بلکه در کنار مالکیت، گروه و مجوزهای rwx کار می‌کند.


ACL چه کاربردی دارد؟

ACL در سناریوهای زیر کاربرد دارد:

  • اشتراک یک پوشه میان چند تیم
  • تعیین دسترسی اختصاصی برای یک کاربر
  • دادن دسترسی موقت بدون تغییر گروه اصلی
  • ایجاد پوشه پروژه با دسترسی‌های متفاوت
  • اعطای دسترسی فقط خواندنی به تیم مانیتورینگ
  • دادن دسترسی نوشتن به سرویس Backup
  • مدیریت دسترسی کاربران FTP و SFTP
  • مدیریت دسترسی فایل‌های وب‌سایت
  • کنترل دسترسی پوشه‌های اشتراکی سازمانی
  • تعریف مجوز خودکار برای فایل‌های جدید

تفاوت ACL با مجوزهای معمولی لینوکس

مجوزهای معمولی لینوکس با دستورهایی مانند chmod، chown و chgrp مدیریت می‌شوند.

برای مثال:

chmod 640 report.txt

مجوز عددی 640 به این معنا است:

Owner: Read and Write
Group: Read Only
Other users: No Access

اما با این ساختار نمی‌توان مشخص کرد که:

ali: Read Only
reza: Read and Write
auditors: Read Only
Other users: No Access

ACL این محدودیت را برطرف می‌کند و اجازه می‌دهد برای کاربران و گروه‌های مشخص، مجوزهای متفاوت تعریف شود.


انواع ACL در لینوکس

در لینوکس دو نوع اصلی ACL وجود دارد:

  • Access ACL
  • Default ACL

Access ACL

Access ACL مجوز فعلی فایل یا پوشه را مشخص می‌کند.

برای مثال، دستور زیر به کاربر ali دسترسی خواندن روی فایل می‌دهد:

sudo setfacl -m u:ali:r-- report.txt

این مجوز بلافاصله روی فایل فعلی اعمال می‌شود.


Default ACL

Default ACL فقط روی پوشه‌ها تعریف می‌شود و مشخص می‌کند فایل‌ها و پوشه‌هایی که در آینده داخل آن پوشه ساخته می‌شوند، چه مجوزی دریافت کنند.

برای مثال:

sudo setfacl -m d:u:ali:rw- /srv/project

این دستور مشخص می‌کند فایل‌های جدید داخل /srv/project برای کاربر ali مجوز خواندن و نوشتن داشته باشند.

Default ACL روی فایل‌های قبلی داخل پوشه اعمال نمی‌شود و فقط روی فایل‌ها و پوشه‌هایی اثر می‌گذارد که بعداً ساخته می‌شوند.


مفهوم مجوزهای ACL

ACL نیز مانند مجوزهای معمولی لینوکس از سه مجوز اصلی استفاده می‌کند:

r = Read
w = Write
x = Execute
- = No Permission

مجوزها روی فایل

در فایل‌های معمولی:

r = Read file contents
w = Modify file contents
x = Execute the file

مجوزها روی پوشه

روی پوشه‌ها، مفهوم این مجوزها کمی متفاوت است:

r = List directory contents
w = Create, delete, or rename entries
x = Enter or traverse the directory

برای استفاده عملی از یک پوشه، معمولاً مجوز x ضروری است.

برای مثال:

r-x = List and enter the directory
--x = Enter the directory without listing contents
rwx = Full directory access

پیش‌نیازهای استفاده از ACL

برای استفاده از ACL باید موارد زیر فراهم باشد:

  • دسترسی root یا sudo
  • نصب بسته acl
  • پشتیبانی فایل‌سیستم از ACL
  • وجود کاربر یا گروه موردنظر

برای بررسی وجود یک کاربر:

id ali

برای بررسی وجود یک گروه:

getent group developers

اگر کاربر یا گروه وجود نداشته باشد، ابتدا باید آن را ایجاد کنید.


نصب ACL در لینوکس

ابزارهای setfacl و getfacl معمولاً داخل بسته‌ای با نام acl ارائه می‌شوند.

نصب ACL در Ubuntu و Debian

sudo apt update
sudo apt install acl -y

نصب ACL در AlmaLinux، Rocky Linux و RHEL

sudo dnf install acl -y

پس از نصب، وجود دستورها را بررسی کنید:

command -v setfacl
command -v getfacl

نمونه خروجی:

/usr/bin/setfacl
/usr/bin/getfacl

برای مشاهده نسخه نصب‌شده:

setfacl --version

بررسی پشتیبانی فایل‌سیستم از ACL

فایل‌سیستم‌های رایجی مانند Ext4 و XFS از ACL پشتیبانی می‌کنند.

برای بررسی نوع فایل‌سیستم مسیر موردنظر:

findmnt -T /srv/project -o TARGET,FSTYPE,OPTIONS

نمونه خروجی:

TARGET FSTYPE OPTIONS
/      ext4   rw,relatime

اگر در گزینه‌های Mount عبارت زیر وجود داشته باشد، ACL غیرفعال شده است:

noacl

در بیشتر فایل‌سیستم‌های جدید، ACL به‌صورت پیش‌فرض فعال است و نیازی به اضافه‌کردن گزینه acl نیست.


آزمایش عملی ACL

یک فایل آزمایشی ایجاد کنید:

sudo touch /tmp/acl-test

برای کاربر ali دسترسی خواندن تعریف کنید:

sudo setfacl -m u:ali:r-- /tmp/acl-test

سپس ACL فایل را بررسی کنید:

getfacl /tmp/acl-test

نمونه خروجی:

# file: tmp/acl-test
# owner: root
# group: root
user::rw-
user:ali:r--
group::r--
mask::r--
other::r--

اگر دستور بدون خطا اجرا شود، فایل‌سیستم از ACL پشتیبانی می‌کند.

در پایان فایل آزمایشی را حذف کنید:

sudo rm -f /tmp/acl-test

مشاهده ACL فایل یا پوشه

برای مشاهده ACL از دستور getfacl استفاده می‌شود:

getfacl report.txt

نمونه خروجی:

# file: report.txt
# owner: root
# group: developers
user::rw-
user:ali:r--
group::r--
mask::r--
other::---

توضیح خروجی getfacl

مالک فایل

user::rw-

خالی‌بودن نام کاربر نشان می‌دهد این Entry مربوط به مالک اصلی فایل است.

کاربر مشخص

user:ali:r--

این Entry مشخص می‌کند کاربر ali فقط مجوز خواندن دارد.

گروه مالک

group::r--

این Entry مجوز گروه اصلی فایل را مشخص می‌کند.

ACL Mask

mask::r--

Mask حداکثر دسترسی مؤثر برای کاربران و گروه‌های ACL را تعیین می‌کند.

سایر کاربران

other::---

کاربرانی که با هیچ‌کدام از Entryهای قبلی مطابقت ندارند، هیچ دسترسی ندارند.


نمایش خلاصه ACL

برای حذف اطلاعات Header مانند نام فایل، مالک و گروه:

getfacl -c report.txt

نمونه خروجی:

user::rw-
user:ali:r--
group::r--
mask::r--
other::---

برای نمایش UID و GID به‌صورت عددی:

getfacl -n report.txt

برای نمایش ACL به‌صورت جدولی:

getfacl -t report.txt

برای نمایش فقط فایل‌هایی که ACL توسعه‌یافته دارند:

getfacl -R -s /srv/project

تشخیص وجود ACL با دستور ls

پس از تعریف ACL توسعه‌یافته، معمولاً علامت + در انتهای مجوز فایل نمایش داده می‌شود:

ls -l report.txt

نمونه خروجی:

-rw-r-----+ 1 root developers 2048 Jul 25 10:20 report.txt

علامت + نشان می‌دهد فایل دارای ACL توسعه‌یافته است.

برای مشاهده جزئیات باید از دستور زیر استفاده کنید:

getfacl report.txt

تعریف ACL برای یک کاربر

ساختار اصلی دستور:

setfacl -m u:USERNAME:PERMISSIONS FILE

گزینه -m برای افزودن یا تغییر یک ACL Entry استفاده می‌شود.

دسترسی فقط خواندن

sudo setfacl -m u:ali:r-- report.txt

دسترسی خواندن و نوشتن

sudo setfacl -m u:ali:rw- report.txt

دسترسی کامل روی پوشه

sudo setfacl -m u:ali:rwx /srv/project

قطع دسترسی کاربر

sudo setfacl -m u:ali:--- report.txt

این دستور Entry کاربر را حذف نمی‌کند، بلکه مجوز آن را به حالت بدون دسترسی تغییر می‌دهد.


تعریف ACL برای یک گروه

ساختار دستور:

setfacl -m g:GROUP:PERMISSIONS FILE

دسترسی خواندن برای گروه

sudo setfacl -m g:auditors:r-- report.txt

دسترسی خواندن و نوشتن

sudo setfacl -m g:developers:rw- report.txt

دسترسی کامل روی پوشه

sudo setfacl -m g:developers:rwx /srv/project

نتیجه را بررسی کنید:

getfacl /srv/project

تعریف چند ACL در یک دستور

برای تعریف چند Entry می‌توان آن‌ها را با کاما جدا کرد:

sudo setfacl -m u:ali:r--,u:reza:rw-,g:auditors:r-- report.txt

نتیجه:

ali: Read Only
reza: Read and Write
auditors: Read Only

برای مشاهده ACL:

getfacl report.txt

نمونه خروجی:

# file: report.txt
# owner: root
# group: developers
user::rw-
user:ali:r--
user:reza:rw-
group::r--
group:auditors:r--
mask::rw-
other::---

استفاده از UID و GID در ACL

می‌توان به‌جای نام کاربر یا گروه، از شناسه عددی استفاده کرد.

برای مشاهده UID:

id -u ali

نمونه خروجی:

1001

تعریف ACL با UID:

sudo setfacl -m u:1001:r-- report.txt

برای مشاهده GID گروه:

getent group developers

نمونه خروجی:

developers:x:1500:ali,reza

تعریف ACL با GID:

sudo setfacl -m g:1500:rw- report.txt

استفاده از نام کاربر یا گروه معمولاً خواناتر و قابل مدیریت‌تر است.


اهمیت مجوز پوشه‌های والد

ممکن است ACL یک فایل صحیح باشد، اما کاربر همچنان نتواند به آن دسترسی پیدا کند.

برای مثال، فایل زیر را در نظر بگیرید:

/srv/private/reports/report.txt

کاربر برای رسیدن به این فایل باید روی تمام پوشه‌های مسیر، مجوز x داشته باشد:

/srv
/srv/private
/srv/private/reports

برای بررسی تمام اجزای مسیر:

namei -l /srv/private/reports/report.txt

نمونه خروجی:

f: /srv/private/reports/report.txt
drwxr-xr-x root root       /
drwxr-xr-x root root       srv
drwx------ root root       private
drwxr-x--- root auditors   reports
-rw-r----- root developers report.txt

در این مثال، کاربر غیرمجاز نمی‌تواند از پوشه private عبور کند.

برای دادن فقط مجوز عبور:

sudo setfacl -m u:ali:--x /srv/private

برای دادن دسترسی خواندن و ورود به پوشه مقصد:

sudo setfacl -m u:ali:r-x /srv/private/reports

روی پوشه‌های والد فقط کمترین دسترسی موردنیاز را تعریف کنید.


مفهوم ACL Mask

Mask یکی از مهم‌ترین بخش‌های ACL است.

Mask حداکثر مجوز مؤثر برای موارد زیر را مشخص می‌کند:

  • گروه مالک
  • کاربران نام‌گذاری‌شده در ACL
  • گروه‌های نام‌گذاری‌شده در ACL

Mask روی موارد زیر اثر ندارد:

  • مالک اصلی فایل
  • مجوز other

ساختار Mask:

mask::rwx

نمونه محدودشدن دسترسی توسط Mask

ابتدا برای کاربر ali دسترسی کامل تعریف می‌کنیم:

sudo setfacl -m u:ali:rwx /srv/project

سپس Mask را محدود می‌کنیم:

sudo setfacl -m m::r-x /srv/project

ACL را بررسی کنید:

getfacl /srv/project

نمونه خروجی:

# file: srv/project
# owner: root
# group: developers
user::rwx
user:ali:rwx
group::r-x
mask::r-x
other::---

برای مشاهده مجوز مؤثر:

getfacl -e /srv/project

نمونه خروجی:

user::rwx
user:ali:rwx                 #effective:r-x
group::r-x
mask::r-x
other::---

اگرچه ACL کاربر ali برابر rwx است، دسترسی مؤثر او به‌دلیل Mask فقط r-x خواهد بود.


تغییر Mask

برای تعیین Mask فایل:

sudo setfacl -m m::rw- report.txt

برای تعیین Mask پوشه:

sudo setfacl -m m::rwx /srv/project

به‌صورت پیش‌فرض، setfacl پس از تغییر Entryها، Mask را دوباره محاسبه می‌کند.

برای جلوگیری از محاسبه خودکار Mask:

sudo setfacl -n -m u:ali:rwx /srv/project

از گزینه -n فقط زمانی استفاده کنید که عملکرد Mask را دقیقاً می‌دانید.


تأثیر chmod روی ACL

در فایل‌هایی که ACL توسعه‌یافته دارند، بیت‌های گروه در خروجی ls -l معمولاً نمایانگر ACL Mask هستند.

برای مثال:

chmod g-w report.txt

ممکن است این دستور مجوز نوشتن کاربران یا گروه‌های ACL را نیز محدود کند.

پس از اجرای chmod روی فایل دارای ACL، وضعیت را مجدداً بررسی کنید:

getfacl -e report.txt

نمونه خروجی:

user::rw-
user:reza:rw-                #effective:r--
group::r--
mask::r--
other::---

در این مثال، مجوز نوشتن کاربر reza توسط Mask حذف شده است.


تعریف Default ACL

Default ACL روی پوشه تنظیم می‌شود و برای فایل‌ها و پوشه‌های آینده استفاده می‌شود.

Default ACL برای یک کاربر

sudo setfacl -m d:u:ali:rw- /srv/project

Default ACL برای یک گروه

sudo setfacl -m d:g:developers:rwx /srv/project

تعریف Default Mask

sudo setfacl -m d:m::rwx /srv/project

تعریف کامل Default ACL

sudo setfacl -m d:u::rwx,d:u:ali:rwx,d:g::r-x,d:g:developers:rwx,d:m::rwx,d:o::--- /srv/project

مشاهده Default ACL

getfacl /srv/project

نمونه خروجی:

# file: srv/project
# owner: root
# group: developers
user::rwx
group::rwx
other::---
default:user::rwx
default:user:ali:rwx
default:group::r-x
default:group:developers:rwx
default:mask::rwx
default:other::---

برای نمایش فقط Default ACL:

getfacl -d /srv/project

نمونه خروجی:

user::rwx
user:ali:rwx
group::r-x
group:developers:rwx
mask::rwx
other::---

آزمایش ارث‌بری ACL

یک فایل جدید ایجاد کنید:

sudo touch /srv/project/new-file.txt

سپس ACL آن را بررسی کنید:

getfacl /srv/project/new-file.txt

نمونه خروجی:

# file: srv/project/new-file.txt
# owner: root
# group: root
user::rw-
user:ali:rw-
group::r-x                  #effective:r--
group:developers:rwx        #effective:rw-
mask::rw-
other::---

یک پوشه جدید ایجاد کنید:

sudo mkdir /srv/project/new-directory

ACL پوشه را بررسی کنید:

getfacl /srv/project/new-directory

نمونه خروجی:

# file: srv/project/new-directory
# owner: root
# group: root
user::rwx
user:ali:rwx
group::r-x
group:developers:rwx
mask::rwx
other::---
default:user::rwx
default:user:ali:rwx
default:group::r-x
default:group:developers:rwx
default:mask::rwx
default:other::---

پوشه جدید علاوه بر Access ACL، Default ACL را نیز برای فایل‌های آینده به ارث می‌برد.


تفاوت Access ACL و Default ACL

Access ACL روی فایل یا پوشه فعلی اثر می‌گذارد:

Access ACL: Applies to the current file or directory

Default ACL روی فایل‌ها و پوشه‌های آینده اثر می‌گذارد:

Default ACL: Applies to newly created entries

اگر فقط Default ACL تعریف شود، فایل‌های قدیمی داخل پوشه تغییر نمی‌کنند.

برای مدیریت صحیح یک پوشه موجود باید:

  1. روی فایل‌ها و پوشه‌های فعلی Access ACL اعمال شود.
  2. روی پوشه‌ها Default ACL تعریف شود.

اعمال ACL روی فایل‌ها و پوشه‌های موجود

فرض کنید کاربر ali باید:

Directories: Read, Write, and Execute
Files: Read and Write

اعمال ACL روی پوشه‌ها

sudo find /srv/project -type d -exec setfacl -m u:ali:rwx {} +

اعمال ACL روی فایل‌ها

sudo find /srv/project -type f -exec setfacl -m u:ali:rw- {} +

این روش بهتر از اعمال rwx روی تمام فایل‌ها است؛ زیرا فایل‌های معمولی بدون نیاز Executable نمی‌شوند.


تعریف Default ACL روی تمام پوشه‌ها

sudo find /srv/project -type d -exec setfacl -m d:u:ali:rwx,d:m::rwx {} +

اکنون کاربر ali روی فایل‌ها و پوشه‌های موجود دسترسی دارد و موارد جدید نیز ACL مناسب دریافت می‌کنند.


اعمال بازگشتی ACL

برای اعمال ACL روی تمام فایل‌ها و زیرپوشه‌ها:

sudo setfacl -R -m u:ali:rwx /srv/project

برای جلوگیری از دنبال‌کردن Symbolic Linkها:

sudo setfacl -R -P -m u:ali:r-x /srv/project

استفاده مستقیم از rwx به‌صورت Recursive می‌تواند تمام فایل‌ها را Executable کند.

روش بهتر این است که فایل‌ها و پوشه‌ها جداگانه مدیریت شوند:

sudo find /srv/project -type d -exec setfacl -m u:ali:rwx {} +
sudo find /srv/project -type f -exec setfacl -m u:ali:rw- {} +

حذف ACL یک کاربر

برای حذف Entry مربوط به کاربر:

sudo setfacl -x u:ali report.txt

برای حذف Default ACL کاربر:

sudo setfacl -x d:u:ali /srv/project

برای بررسی نتیجه:

getfacl report.txt

حذف ACL یک گروه

برای حذف ACL گروه:

sudo setfacl -x g:developers report.txt

برای حذف Default ACL گروه:

sudo setfacl -x d:g:developers /srv/project

حذف تمام ACLهای توسعه‌یافته

برای حذف تمام ACLهای اضافی فایل:

sudo setfacl -b report.txt

پس از اجرای دستور، فقط ACLهای پایه باقی می‌مانند:

user::rw-
group::r--
other::---

برای حذف Default ACL پوشه:

sudo setfacl -k /srv/project

برای حذف ACLهای توسعه‌یافته به‌صورت بازگشتی:

sudo setfacl -R -P -b /srv/project

برای حذف Default ACL از تمام پوشه‌ها:

sudo find /srv/project -type d -exec setfacl -k {} +

جایگزینی کامل ACL

گزینه --set تمام ACL موجود را با ACL جدید جایگزین می‌کند:

sudo setfacl --set u::rw-,u:ali:r--,g::r--,m::r--,o::--- report.txt

قبل از استفاده از این گزینه، ACL فعلی را ذخیره کنید:

getfacl report.txt > /root/report-acl.backup

کپی ACL از یک فایل به فایل دیگر

برای کپی Access ACL:

getfacl --access source.txt | setfacl --set-file=- destination.txt

برای کپی ACL کامل یک پوشه، شامل Default ACL:

getfacl source-directory | setfacl --set-file=- destination-directory

سپس نتیجه را بررسی کنید:

getfacl destination-directory

تهیه Backup از ACL

قبل از تغییرات گسترده، از ACLها Backup تهیه کنید:

sudo getfacl -R -p /srv/project > /root/project-acl-$(date +%F).backup

برای مشاهده فایل Backup:

less /root/project-acl-$(date +%F).backup

نمونه بخشی از Backup:

# file: /srv/project
# owner: root
# group: developers
user::rwx
user:ali:rwx
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:ali:rwx
default:group::rwx
default:mask::rwx
default:other::---

بازیابی ACL

برای بازیابی ACL:

sudo setfacl --restore=/root/project-acl-2026-07-25.backup

برای آزمایش Restore بدون اعمال تغییر:

sudo setfacl --test --restore=/root/project-acl-2026-07-25.backup

حفظ ACL هنگام کپی یا Backup

روش کپی یا Backup باید از ACL پشتیبانی کند.

کپی با cp

sudo cp -a /srv/project /backup/

کپی با rsync

sudo rsync -aA /srv/project/ /backup/project/

برای حفظ Extended Attributeها نیز از گزینه -X استفاده کنید:

sudo rsync -aAX /srv/project/ /backup/project/

تهیه آرشیو با tar

sudo tar --acls --xattrs -cpf project-backup.tar /srv/project

بازیابی آرشیو:

sudo tar --acls --xattrs -xpf project-backup.tar

بعد از انتقال یا Restore، ACL مقصد را بررسی کنید:

getfacl /backup/project

مثال عملی ساخت پوشه اشتراکی

فرض کنید کاربران ali و reza اعضای تیم توسعه هستند و کاربر auditor فقط باید فایل‌ها را مشاهده کند.

دسترسی موردنظر:

developers group: Read, Write, and Execute
auditor user: Read and Execute
Other users: No Access

مرحله اول: ایجاد گروه

sudo groupadd developers

مرحله دوم: افزودن کاربران به گروه

sudo usermod -aG developers ali
sudo usermod -aG developers reza

عضویت‌ها را بررسی کنید:

id ali
id reza

کاربران باید از سیستم خارج و دوباره وارد شوند تا عضویت جدید اعمال شود.


مرحله سوم: ایجاد پوشه پروژه

sudo mkdir -p /srv/team-project

تنظیم مالک و گروه:

sudo chown root:developers /srv/team-project

تنظیم مجوز پایه همراه با SetGID:

sudo chmod 2770 /srv/team-project

بررسی:

ls -ld /srv/team-project

نمونه خروجی:

drwxrws--- 2 root developers 4096 Jul 25 12:00 /srv/team-project

SetGID باعث می‌شود فایل‌ها و پوشه‌های جدید، گروه developers را به ارث ببرند.


مرحله چهارم: دسترسی کاربر auditor

sudo setfacl -m u:auditor:r-x /srv/team-project

مرحله پنجم: تعریف Default ACL

sudo setfacl -m d:u::rwx,d:u:auditor:r-x,d:g::rwx,d:m::rwx,d:o::--- /srv/team-project

وضعیت نهایی:

Owner: Full Access
developers group: Full Access
auditor user: Read and Execute
Other users: No Access

مرحله ششم: بررسی ACL

getfacl /srv/team-project

نمونه خروجی:

# file: srv/team-project
# owner: root
# group: developers
# flags: -s-
user::rwx
user:auditor:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:auditor:r-x
default:group::rwx
default:mask::rwx
default:other::---

مرحله هفتم: آزمایش دسترسی

ایجاد فایل توسط کاربر ali:

sudo -u ali touch /srv/team-project/ali-file.txt

نوشتن داخل فایل:

sudo -u ali bash -c 'echo "Project data" > /srv/team-project/ali-file.txt'

مشاهده فایل با کاربر auditor:

sudo -u auditor cat /srv/team-project/ali-file.txt

نمونه خروجی:

Project data

آزمایش ایجاد فایل توسط auditor:

sudo -u auditor touch /srv/team-project/auditor-file.txt

خروجی موردانتظار:

touch: cannot touch '/srv/team-project/auditor-file.txt': Permission denied

بررسی دسترسی مؤثر یک کاربر

برای نمایش مجوزهای مؤثر:

getfacl -e /srv/project

برای آزمایش خواندن فایل:

sudo -u ali cat report.txt

برای آزمایش نوشتن:

sudo -u ali bash -c 'echo "Test" >> report.txt'

برای آزمایش مشاهده پوشه:

sudo -u ali ls -la /srv/project

برای آزمایش ایجاد فایل:

sudo -u ali touch /srv/project/acl-test.txt

آزمایش عملی با sudo -u قابل‌اعتمادتر از بررسی ظاهری ACL است.


رفع خطاهای رایج ACL

خطای setfacl: command not found

نمونه خطا:

setfacl: command not found

در Ubuntu:

sudo apt update
sudo apt install acl -y

در AlmaLinux:

sudo dnf install acl -y

خطای Operation not supported

نمونه خطا:

setfacl: file: Operation not supported

نوع فایل‌سیستم و گزینه‌های Mount را بررسی کنید:

findmnt -T /path/to/file -o TARGET,FSTYPE,OPTIONS

دلایل احتمالی:

  • فایل‌سیستم از ACL پشتیبانی نمی‌کند.
  • فایل‌سیستم با گزینه noacl Mount شده است.
  • فایل‌سیستم Read-only است.
  • فایل روی NFS یا CIFS قرار دارد.
  • Storage از POSIX ACL پشتیبانی نمی‌کند.

ACL صحیح است اما دسترسی وجود ندارد

ابتدا ACL را بررسی کنید:

getfacl -e /path/to/file

سپس پوشه‌های والد را بررسی کنید:

namei -l /path/to/file

دلایل رایج:

  • نبود مجوز x روی پوشه والد
  • محدودشدن دسترسی توسط Mask
  • اعمال‌شدن فقط Default ACL
  • اعمال‌نشدن ACL روی فایل‌های قدیمی
  • اشتباه‌بودن نام کاربر یا گروه
  • Login نکردن مجدد پس از تغییر گروه
  • محدودیت SELinux یا AppArmor
  • Read-only بودن فایل‌سیستم

نمایش effective در خروجی

نمونه:

user:ali:rwx                 #effective:r-x

این خروجی نشان می‌دهد Mask دسترسی را محدود کرده است.

برای بررسی:

getfacl /path/to/file

برای اصلاح Mask:

sudo setfacl -m m::rwx /path/to/file

قبل از افزایش Mask، اثر آن روی تمام کاربران و گروه‌های ACL را بررسی کنید.


ACL روی فایل‌های جدید اعمال نمی‌شود

Default ACL را بررسی کنید:

getfacl -d /srv/project

اگر خروجی خالی بود، Default ACL تعریف نشده است.

برای تعریف:

sudo setfacl -m d:u:ali:rw- /srv/project

توجه کنید Default ACL فقط روی فایل‌های جدید اثر می‌گذارد.


کاربر نمی‌تواند وارد پوشه شود

روی پوشه مجوز x لازم است:

sudo setfacl -m u:ali:r-x /srv/project

پوشه‌های والد را نیز بررسی کنید:

namei -l /srv/project/report.txt

کاربر فایل را می‌بیند اما نمی‌تواند حذف کند

حذف یا تغییر نام فایل به مجوز پوشه والد بستگی دارد.

برای حذف فایل، کاربر معمولاً به مجوزهای w و x روی پوشه والد نیاز دارد:

sudo setfacl -m u:ali:rwx /srv/project

این دسترسی به کاربر اجازه ایجاد، حذف و تغییر نام فایل‌ها را می‌دهد و باید با احتیاط استفاده شود.


ACL پس از chmod تغییر کرده است

ACL را بررسی کنید:

getfacl -e report.txt

اگر Mask محدود شده است:

sudo setfacl -m m::rw- report.txt

پس از هر تغییر chmod روی فایل ACLدار، مجوز مؤثر را دوباره بررسی کنید.


SELinux مانع دسترسی می‌شود

در AlmaLinux و RHEL وضعیت SELinux را بررسی کنید:

getenforce

نمونه خروجی:

Enforcing

Context فایل را بررسی کنید:

ls -Z /srv/project

خطاهای اخیر SELinux:

sudo ausearch -m AVC -ts recent

ACL و SELinux دو لایه امنیتی جداگانه هستند. صحیح‌بودن ACL به این معنا نیست که SELinux نیز دسترسی را مجاز می‌داند.

برای رفع مشکل، Context و Policy صحیح را تنظیم کنید و SELinux را بدون بررسی غیرفعال نکنید.


نکات امنیتی و بهترین روش‌ها

  • ACL را فقط برای نیازهای مشخص استفاده کنید.
  • قبل از تغییرات گسترده Backup تهیه کنید.
  • برای دسترسی تیمی ابتدا از گروه‌ها استفاده کنید.
  • ACL اختصاصی را برای استثناها به کار ببرید.
  • روی فایل‌های معمولی بدون نیاز مجوز x ندهید.
  • از اعمال بازگشتی rwx روی تمام فایل‌ها خودداری کنید.
  • Mask را پس از هر تغییر بررسی کنید.
  • دسترسی واقعی را با sudo -u USER آزمایش کنید.
  • روی پوشه‌های والد کمترین مجوز لازم را تعریف کنید.
  • برای فایل‌های جدید از Default ACL استفاده کنید.
  • فایل‌های موجود را با Access ACL مدیریت کنید.
  • قبل از setfacl --set از ACL فعلی Backup بگیرید.
  • در Backup از rsync -A یا tar --acls استفاده کنید.
  • ACL را جایگزین مالکیت و گروه‌بندی اصولی نکنید.
  • SELinux یا AppArmor را در عیب‌یابی بررسی کنید.
  • ACL مسیرهای حساس مانند /etc و /root را بدون ضرورت تغییر ندهید.
  • ACLهای پیچیده را مستندسازی کنید.

اشتباهات رایج

موارد زیر از اشتباهات متداول هنگام استفاده از ACL هستند:

  • تعریف ACL بدون بررسی Mask
  • تصور اینکه Default ACL روی فایل‌های قدیمی اثر دارد
  • ندادن مجوز x روی پوشه‌های والد
  • دادن rwx بازگشتی به تمام فایل‌ها
  • استفاده از ACL به‌جای گروه‌بندی صحیح
  • حذف ACL بدون تهیه Backup
  • اجرای chmod بدون بررسی اثر آن روی Mask
  • نادیده‌گرفتن SELinux یا AppArmor
  • انتظار حفظ ACL در تمام روش‌های Backup
  • استفاده از tar بدون گزینه --acls
  • استفاده از rsync بدون گزینه -A
  • تعریف دسترسی نوشتن روی پوشه بدون توجه به امکان حذف فایل‌ها
  • تنظیم فقط Access ACL و فراموش‌کردن Default ACL
  • تنظیم فقط Default ACL و فراموش‌کردن فایل‌های موجود

چک‌لیست نهایی ACL

پس از انجام تنظیمات، موارد زیر را بررسی کنید:

  • بسته acl نصب شده است.
  • دستورات setfacl و getfacl در دسترس هستند.
  • فایل‌سیستم از ACL پشتیبانی می‌کند.
  • فایل‌سیستم با گزینه noacl Mount نشده است.
  • کاربر یا گروه موردنظر وجود دارد.
  • Access ACL صحیح تعریف شده است.
  • Default ACL در صورت نیاز تنظیم شده است.
  • فایل‌ها و پوشه‌های قدیمی جداگانه اصلاح شده‌اند.
  • Mask دسترسی را محدود نمی‌کند.
  • مجوز x روی تمام پوشه‌های والد وجود دارد.
  • دسترسی واقعی با کاربر مقصد آزمایش شده است.
  • SELinux یا AppArmor مانع دسترسی نیست.
  • روش Backup از ACL پشتیبانی می‌کند.
  • Backup قبل از تغییرات گسترده تهیه شده است.
  • مجوز اضافه و غیرضروری به کاربران داده نشده است.

دستورات پرکاربرد ACL

نمایش ACL:

getfacl file

دسترسی خواندن برای کاربر:

setfacl -m u:ali:r-- file

دسترسی خواندن و نوشتن:

setfacl -m u:ali:rw- file

دسترسی گروه:

setfacl -m g:developers:rw- file

Default ACL کاربر:

setfacl -m d:u:ali:rwx directory

حذف ACL کاربر:

setfacl -x u:ali file

حذف تمام ACLهای اضافی:

setfacl -b file

حذف Default ACL:

setfacl -k directory

تهیه Backup:

getfacl -R -p directory > acl.backup

بازیابی Backup:

setfacl --restore=acl.backup

جمع‌بندی

ACL یکی از ابزارهای مهم مدیریت پیشرفته مجوزها در لینوکس است. با استفاده از ACL می‌توان بدون تغییر مالک یا گروه اصلی فایل، برای کاربران و گروه‌های مختلف مجوزهای جداگانه تعریف کرد.

دستور setfacl برای ایجاد، تغییر و حذف ACL و دستور getfacl برای مشاهده و بررسی آن استفاده می‌شود.

Access ACL روی فایل یا پوشه فعلی اثر می‌گذارد، در حالی که Default ACL مجوز اولیه فایل‌ها و پوشه‌های جدید را تعیین می‌کند.

هنگام استفاده از ACL باید به موارد زیر توجه شود:

  • ACL Mask
  • مجوز پوشه‌های والد
  • تفاوت مجوز فایل و پوشه
  • تأثیر دستور chmod
  • تفاوت Access ACL و Default ACL
  • پشتیبانی ابزار Backup از ACL
  • محدودیت‌های SELinux و AppArmor

استفاده صحیح از ACL باعث می‌شود دسترسی کاربران دقیق‌تر، امن‌تر و متناسب با نیاز واقعی هر سرویس یا تیم تعریف شود.

هنوز نیاز به کمک دارید؟

آیا سوالی دارید؟

آیا این مقاله برای شما مفید بود؟ بله خیر

مطالب اخیراً بازدیدشده

  • آموزش تغییر Hostname سرور در لینوکس
  • آموزش نصب و راه‌اندازی SSH Key Authentication در لینوکس
  • آموزش نصب، پیکربندی و استفاده از Auditd در لینوکس
  • بعد از خرید سرور مجازی لینوکس(VPS)، اولین کارهایی که باید انجام دهید
  • آموزش کامل UFW در لینوکس؛ راه‌اندازی، مدیریت و ایمن‌سازی فایروال سرور
  • آموزش محدود کردن کاربران مجاز SSH در لینوکس
  • آموزش تنظیم MaxAuthTries در SSH؛ محدود کردن تعداد تلاش‌های ورود ناموفق
  • آموزش نصب Nextcloud با Docker Compose
  • عیب‌یابی تفاوت نتیجه DNS بین سرور و کامپیوتر شخصی
  • مشاهده بیشتر

نظرات خود را بنویسید... لغو پاسخ

اشتراک گذاری این مقاله

آموزش ACL در لینوکس؛ مدیریت سطح دسترسی پیشرفته برای کاربران و گروه‌ها

کپی کردن لینک

Clipboard Icon

جدیدترین مقالات

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی ...
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

تقویم

آگوست 2026
شیدسچپج
1234567
891011121314
15161718192021
22232425262728
293031 
« جولای    

عضویت

جدیدترین پست‌ها

آموزش نصب و راه‌اندازی RustDesk Server با Docker
آموزش نصب و راه‌اندازی RustDesk Server با Docker
2 minutes جولای 2, 2026
آموزش نصب و راه‌اندازی Matrix Synapse + Element Web + Coturn با Docker روی Ubuntu 24.04
4 minutes جولای 2, 2026
CXS چیست و چگونه کار می‌کند
1 minute می 3, 2026
ساخت سرور چت المنت بروی لینوکس
5 minutes آوریل 25, 2026
Geo Routing و Geo DNS
2 minutes آوریل 22, 2026

سلام