توجه: قبل از مطالعه این مطلب باید به بحث "سطح دسترسی" در لینوکس مسلط باشید.
اولین سوالی که با خواندن عنوان مطلب به ذهنتان میرسید قطعا این است که ACL چیست؟
در تعریف ACL می توان گفت که مخفف access control list است که برای ایجاد دسترسی به کاربر خاصی است که بتواند فایلی رو ویرایش یا اجرا کند یا حتی فایل رو بتواند بخواند بدون این که کاربر رو عضو گروهی کنیم یا حتی گروه جدیدی را ایجاد کنیم. چون نمیخواهیم کاربر به اطلاعات کامل گروه مورد نظر دسترسی داشته باشد. برای مثال:
ls -l total 0 -rwx------ 1 root www-data 0 Oct 15 08:36 acl-test.php
میخواهیم کاربر vagrant به فایل acl-test.php دسترسی داشته باشد بدون اضافه کردن کاربر موردنظر به گروه www-data.
خب برای اینکار ما از دستور setfacl استفاده میکنیم:
sudo setfacl -m u:vagrant:rx acl-test.php
در دستور بالا ما دسترسی خواندن و اجرا کردن رو به کاربر vagrant دادیم.
که -m به معنی تغییر دسترسی هستش که پارمتر u:vagrant:rw رو بهش میدهیم که از سه بخش تشکیل شده است که هر بخش با : از هم جدا میشود. که u به معنی user است و بعد vagrant نام کاربری و در آخر rx سطح دسترسی مورد نظرمان است.
توجه: می توانیم بجای u از g استفاده کنیم برای دسترسی دادن به یک گروه خاصی برای مثال:
sudo setfacl -m g:mygroup:rwx acl-test.php
تشخیص فایل هایی که از دسترسی ACL دارند:
با استفاده از ls -l میتوانیم فایل هایی که ACL دارند را تشخص بدهیم:
-rwxr-x---+ 1 root www-data 0 Oct 15 08:36 acl-test.php
همانطور که میبینید بعد از مجوز ها یک + اضافه شده است. که به معنی داشتن دسترسی ACL است.
برای به دست آوردن جزئیات بیشتر در مورد دسترسی هایی که با ACL به فایل دادیم دستور زیر را اجرا کنید:
sudo getfacl acl-test.php
خروجی دستور بالا:
# file: acl-test.php # owner: root # group: www-data user::rwx user:vagrant:r-x group::--- mask::r-x other::---
همون طور که می بینید مجوز user:vagrant:r-x در این لیست اضافه شده است.
برای حذف همه ACL ها از فایل مورد نظر دستور زیر را اجرا کنید:
sudo setfacl -b acl-test.php
و برای حذف ACL خاص دستور زیر را اجرا کنید:
sudo setfacl -x vagrant acl-test.php
توجه: در دستور بالا بجای vagrant نام کاربری را خواهید نوشت.
نکته: ACL فقط برای فایل ها نیست بلکه میتوانید برای پوشهها هم استفاده کنید.