SETFACL(1) Access Control Lists SETFACL(1)

setfacl - تنظیم و ویرایش لیستهای کنترل دسترسی فایل

setfacl
[-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl
--restore={file|-}

این ابزار، لیست‌های کنترل دسترسی (ACL) فایل‌ها و پوشه‌ها را تنظیم می‌کند. در خط فرمان، دنباله‌ای از دستورات به‌همراه دنباله‌ای از فایل‌ها قرار می‌گیرد (که به‌نوبه خود می‌توانند با دنباله دیگری از دستورات همراه شوند، و به همین ترتیب...).

گزینه‌های -m و -x یک ACL را از خط فرمان دریافت می‌کنند. مدخل‌های چندگانه ACL با نویسه کاما (`,') از یکدیگر جدا می‌شوند. گزینه‌های -M و -X یک ACL را از یک فایل یا از ورودی استاندارد می‌خوانند. ساختار مدخل‌های ACL در بخش «مدخل‌های ACL» شرح داده شده است.

گزینه‌های --set و --set-file لیست کنترل دسترسی (ACL) یک فایل یا پوشه را تنظیم می‌کنند. ACL قبلی کاملاً جایگزین می‌شود. مدخل‌های ACL برای این عملیات باید الزاماً شامل مجوزها باشند.

گزینه‌های -m (--modify) و -M (--modify-file) لیست کنترل دسترسی (ACL) یک فایل یا دایرکتوری را ویرایش می‌کنند. مدخل‌های ACL برای این عملیات باید الزاماً شامل مجوزها باشند.

گزینه‌های -x (--remove) و -X (--remove-file) مدخل‌های ACL را حذف می‌کنند. حذف مدخلی که وجود ندارد خطا به شمار نمی‌آید. تنها مدخل‌های ACL فاقد فیلد perms به‌عنوان پارامتر پذیرفته می‌شوند، مگر اینکه متغیر محیطی POSIXLY_CORRECT تعریف شده باشد.

هنگام خواندن از فایل‌ها با استفاده از گزینه‌های -M و -X، ابزار setfacl خروجی تولیدشده توسط getfacl را می‌پذیرد. در هر خط حداکثر یک مدخل ACL قرار می‌گیرد. پس از علامت پوند یا هش (`#')، همه چیز تا انتهای خط به عنوان کامنت تلقی می‌شود.

اگر setfacl بر روی سیستم‌فایلی استفاده شود که از ACL پشتیبانی نمی‌کند، setfacl روی بیت‌های مجوز حالت فایل عمل می‌کند. چنانچه ACL به‌طور کامل در بیت‌های مجوز نگنجد، setfacl بیت‌های مجوز حالت فایل را به‌گونه‌ای تغییر می‌دهد که تا حد امکان بازتاب‌دهنده ACL باشد، یک پیام خطا در خروجی استاندارد خطا می‌نویسد و با وضعیت خروج بزرگتر از 0 بازمی‌گردد.

مالک فایل و فرایندهای دارای قابلیت CAP_FOWNER حق ویرایش ACLهای یک فایل را دارند. این سازوکار مشابه مجوزهای لازم برای دسترسی به حالت فایل است. (در سیستم‌های لینوکس فعلی، کاربر ریشه (root) تنها کاربری است که قابلیت CAP_FOWNER را دارد.)

حذف تمام مدخل‌های گسترش‌یافته ACL. مدخل‌های پایه ACL مربوط به مالک، گروه و سایرین حفظ می‌شوند.
حذف ACL پیش‌فرض (Default ACL). اگر هیچ ACL پیش‌فرضی وجود نداشته باشد، هیچ هشداری صادر نمی‌شود.
ماسک حقوق مؤثر (effective rights mask) را مجدداً محاسبه نکن. رفتار پیش‌فرض setfacl محاسبه مجدد مدخل ماسک ACL است، مگر آنکه یک مدخل ماسک به‌صورت صریح مشخص شده باشد. مدخل ماسک برابر با اجتماع تمامی مجوزهای گروه مالک، و تمام مدخل‌های کاربران و گروه‌های نام‌برده قرار می‌گیرد (این‌ها دقیقاً همان مدخل‌هایی هستند که تحت تأثیر مدخل ماسک قرار دارند).
ماسک حقوق مؤثر را مجدداً محاسبه کن، حتی اگر یک مدخل ماسک ACL به‌صورت صریح داده شده باشد (به گزینه -n مراجعه فرمایید).
تمام عملیات بر روی ACL پیش‌فرض اعمال شوند. مدخل‌های معمول ACL در مجموعه ورودی، به مدخل‌های ACL پیش‌فرض ارتقا می‌یابند. مدخل‌های ACL پیش‌فرض در مجموعه ورودی نادیده گرفته و دور ریخته می‌شوند (در صورت وقوع، هشدار صادر می‌شود).
بازیابی یک نسخه پشتیبان مجوز که توسط `getfacl -R' یا مشابه آن ایجاد شده است. تمام مجوزهای یک زیردرخت کامل دایرکتوری با استفاده از این سازوکار بازیابی می‌شوند. اگر ورودی شامل توضیحات مالک یا توضیحات گروه باشد، setfacl تلاش می‌کند تا مالک و گروه مالک را بازیابی کند. اگر ورودی حاوی توضیحات فلگ‌ها (که بیت‌های setuid، setgid و sticky را تعیین می‌کنند) باشد، setfacl آن سه بیت را نیز بر همان اساس تنظیم می‌کند؛ در غیر این صورت، آن‌ها را پاک می‌نماید. این گزینه را نمی‌توان با گزینه‌های دیگر به‌جز `--test' ترکیب کرد. اگر فایل مشخص‌شده '-' باشد، داده‌ها از ورودی استاندارد خوانده می‌شوند.
حالت آزمایشی. به‌جای تغییر دادن ACLهای هر فایلی، لیست ACLهای حاصل نمایش داده می‌شوند.
اعمال بازگشتی عملیات بر روی تمام فایل‌ها و پوشه‌ها. این گزینه را نمی‌توان با `--restore' ترکیب کرد.
پیمایش منطقی؛ دنبال کردن پیوندهای نمادین به پوشه‌ها. رفتار پیش‌فرض، دنبال کردن آرگومان‌های پیوند نمادین و نادیده گرفتن پیوندهای نمادین موجود در زیرپوشه‌ها است. این گزینه تنها در ترکیب با -R مؤثر است و نمی‌تواند با `--restore' ترکیب شود.
پیمایش فیزیکی؛ پیوندهای نمادین به پوشه‌ها دنبال نمی‌شوند. این حالت همچنین آرگومان‌های پیوند نمادین را نیز نادیده می‌گیرد. این گزینه تنها در ترکیب با -R مؤثر است و نمی‌تواند با `--restore' ترکیب شود.
چاپ نسخه setfacl و خروج از برنامه.
چاپ پیام راهنما برای توضیح گزینه‌های خط فرمان.
--
پایان گزینه‌های خط فرمان. تمام پارامترهای باقی‌مانده به‌عنوان نام فایل تفسیر می‌شوند، حتی اگر با خط تیره آغاز شوند.
-
اگر پارامتر نام فایل یک خط تیره منفرد باشد، setfacl لیست فایل‌ها را از ورودی استاندارد می‌خواند.

ابزار setfacl قالب‌های زیر را برای مدخل‌های ACL به رسمیت می‌شناسد (فاصله‌ها برای خوانایی بیشتر درج شده‌اند):

[d[efault]:] [u[ser]:]uid [:perms]
دسترسی‌های یک کاربر مشخص (نام‌برده). در صورتی که uid خالی باشد، دسترسی‌های مالک فایل خواهد بود.
[d[efault]:] g[roup]:gid [:perms]
دسترسی‌های یک گروه مشخص. در صورتی که gid خالی باشد، دسترسی‌های گروه مالک فایل خواهد بود.
[d[efault]:] m[ask][:] [:perms]
ماسک حقوق مؤثر (Effective rights mask).
[d[efault]:] o[ther][:] [:perms]
دسترسی‌های سایرین (دیگران).

فاصله‌های خالی (Whitespace) میان نویسه‌های جداکننده و نویسه‌های غیرجداکننده نادیده گرفته می‌شوند.

مدخل‌های کامل ACL شامل دسترسی‌ها، در عملیات ویرایش (modify) و تنظیم (set) استفاده می‌شوند (گزینه‌های -m, -M, --set و --set-file). مدخل‌های فاقد فیلد perms برای حذف مدخل‌ها استفاده می‌شوند (گزینه‌های -x و -X).

برای uid و gid می‌توانید یک نام یا یک عدد مشخص کنید. نویسه‌های خاص را می‌توان با یک بک‌اسلش و به دنبال آن ۳ رقم در مبنای ۸ (اکتال) متناظر با کد اسکی آن نویسه مشخص کرد (برای مثال، \101 برای 'A'). اگر نام شامل یک بک‌اسلش واقعی و به دنبال آن ۳ رقم باشد، آن بک‌اسلش باید اسکیپ شود (یعنی \\).

فیلد perms ترکیبی از نویسه‌هایی است که نشان‌دهنده دسترسی‌های خواندن (r)، نوشتن (w) و اجرا (x) هستند. نویسه‌های خط تیره در فیلد perms (-) نادیده گرفته می‌شوند. نویسه X نشان‌دهنده دسترسی اجرا است در صورتی که فایل یک پوشه باشد یا از قبل برای یکی از کاربران دارای دسترسی اجرا باشد. در غیر این صورت، فیلد perms می‌تواند دسترسی‌ها را به‌صورت عددی و به‌عنوان یک ترکیب بیتی از خواندن (4)، نوشتن (2) و اجرا (1) تعریف کند. فیلدهای خالی perms یا فیلدهای perms که تنها از خط تیره تشکیل شده‌اند، نشان‌دهنده نبود هیچ‌گونه دسترسی هستند.

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

  • سه مدخل پایه را نمی‌توان حذف کرد. باید دقیقاً یک مدخل از هر یک از این انواع مدخل‌های پایه وجود داشته باشد.
  • هرگاه یک ACL شامل مدخل‌های کاربران نام‌برده یا اشیاء گروه‌های نام‌برده باشد، باید حتماً شامل یک ماسک حقوق مؤثر نیز باشد.
  • هرگاه یک ACL شامل هرگونه مدخل ACL پیش‌فرض باشد، سه مدخل پایه ACL پیش‌فرض (مالک پیش‌فرض، گروه پیش‌فرض و سایرین پیش‌فرض) نیز باید وجود داشته باشند.
  • هرگاه یک ACL پیش‌فرض شامل مدخل‌های کاربران نام‌برده یا اشیاء گروه‌های نام‌برده باشد، باید حتماً شامل یک ماسک حقوق مؤثر پیش‌فرض نیز باشد.

برای کمک به کاربر در رعایت این قوانین، setfacl تحت شرایط زیر مدخل‌هایی را از روی مدخل‌های موجود ایجاد می‌کند:

  • اگر یک ACL شامل مدخل‌های کاربر نام‌برده یا گروه نام‌برده باشد و هیچ مدخل ماسکی وجود نداشته باشد، یک مدخل ماسک حاوی همان دسترسی‌های مدخل گروه ایجاد می‌شود. مگر اینکه گزینه -n داده شده باشد، دسترسی‌های مدخل ماسک بیشتر تنظیم می‌شوند تا اجتماع تمام دسترسی‌های متأثر از مدخل ماسک را در بر بگیرند (به توضیحات گزینه -n مراجعه فرمایید).
  • اگر یک مدخل ACL پیش‌فرض ایجاد شود و ACL پیش‌فرض فاقد مدخل مالک، گروه مالک یا سایرین باشد، نسخه‌ای از مدخل مالک، گروه مالک یا سایرین در ACL به ACL پیش‌فرض اضافه می‌شود.
  • اگر یک ACL پیش‌فرض شامل مدخل‌های کاربر نام‌برده یا مدخل‌های گروه نام‌برده باشد و هیچ مدخل ماسکی وجود نداشته باشد، یک مدخل ماسک حاوی همان دسترسی‌های مدخل گروهِ ACL پیش‌فرض اضافه می‌شود. مگر اینکه گزینه -n داده شده باشد، دسترسی‌های مدخل ماسک بیشتر تنظیم می‌شوند تا اجتماع تمام دسترسی‌های متأثر از مدخل ماسک را شامل شوند (به توضیحات گزینه -n مراجعه فرمایید).

اعطای دسترسی خواندن به یک کاربر دیگر:

setfacl -m u:lisa:r file

لغو دسترسی نوشتن از تمام گروه‌ها و همه کاربران نام‌برده (با استفاده از ماسک حقوق مؤثر):

setfacl -m m::rx file

حذف یک مدخل گروه مشخص از ACL یک فایل:

setfacl -x g:staff file

کپی کردن ACL یک فایل روی فایلی دیگر:

getfacl file1 | setfacl --set-file=- file2

کپی کردن ACL دسترسی به درون ACL پیش‌فرض:

getfacl --access dir | setfacl -d -M- dir

اگر متغیر محیطی POSIXLY_CORRECT تعریف شده باشد، رفتار پیش‌فرض setfacl به‌صورت زیر تغییر می‌کند: تمامی گزینه‌های غیر استاندارد غیرفعال می‌شوند. پیشوند ``default:'' غیرفعال می‌گردد. گزینه‌های -x و -X فیلدهای دسترسی را نیز می‌پذیرند (و آن‌ها را نادیده می‌گیرند).

آندریاس گرونباخر (Andreas Gruenbacher)، <andreas.gruenbacher@gmail.com>.

لطفاً گزارش‌های باگ، قابلیت‌های پیشنهادی و نظرات خود را به نشانی فوق ارسال فرمایید.

getfacl(1), chmod(1), umask(1), acl(5)

ACL File Utilities May 2000