| ACL(5) | راهنمای فرمتهای فایل | ACL(5) |
نام (NAME)
acl - لیستهای کنترل دسترسی (Access Control Lists) در لینوکس
توضیحات (DESCRIPTION)
این صفحه راهنما لیستهای کنترل دسترسی POSIX (ACL) را شرح میدهد که برای تعیین حقوق دسترسی اختیاری (discretionary access rights) دقیقتر و جزئیتر برای فایلها و دایرکتوریها به کار میروند.
انواع ACL (ACL TYPES)
میتوان در نظر گرفت که هر شیء یک ACL وابسته به خود دارد که دسترسی اختیاری به آن شیء را کنترل و هدایت میکند؛ به این نوع، ACL دسترسی (access ACL) گفته میشود. علاوه بر این، یک دایرکتوری میتواند یک ACL وابسته داشته باشد که ACL دسترسی اولیه برای اشیاء ایجادشده در آن دایرکتوری را کنترل کند؛ به این نوع، ACL پیشفرض (default ACL) گفته میشود.
مدخلهای ACL (ACL ENTRIES)
یک ACL از مجموعهای از مدخلهای ACL تشکیل شده است. هر مدخل ACL مجوزهای دسترسی به شیء وابسته را برای یک کاربر خاص یا گروهی از کاربران به صورت ترکیبی از مجوزهای خواندن (read)، نوشتن (write) و جستجو/اجرا (search/execute) تعیین میکند.
یک مدخل ACL شامل یک نوع برچسب مدخل (entry tag type)، یک توصیفگر اختیاری برای برچسب مدخل (entry tag qualifier) و مجموعهای از مجوزها است. ما از واژه «توصیفگر» (qualifier) برای اشاره به توصیفگر برچسب مدخل در یک مدخل ACL استفاده میکنیم.
توصیفگر نشاندهنده شناسه یک کاربر یا یک گروه است که به ترتیب برای مدخلهایی با انواع برچسب ACL_USER یا ACL_GROUP به کار میرود. مدخلهایی با انواع برچسب غیر از ACL_USER یا ACL_GROUP فاقد توصیفگرهای تعریفشده هستند.
انواع برچسب مدخل زیر تعریف شدهاند:
- ACL_USER_OBJ
- مدخل ACL_USER_OBJ حقوق دسترسی را برای مالک فایل مشخص میکند.
- ACL_USER
- مدخلهای ACL_USER حقوق دسترسی را برای کاربرانی مشخص میکنند که توسط توصیفگر مدخل تعیین شدهاند.
- ACL_GROUP_OBJ
- مدخل ACL_GROUP_OBJ حقوق دسترسی را برای گروه فایل مشخص میکند.
- ACL_GROUP
- مدخلهای ACL_GROUP حقوق دسترسی را برای گروههایی مشخص میکنند که توسط توصیفگر مدخل تعیین شدهاند.
- ACL_MASK
- مدخل ACL_MASK حداکثر حقوق دسترسی را مشخص میکند که میتواند توسط مدخلهایی از نوع ACL_USER، ACL_GROUP_OBJ یا ACL_GROUP اعطا شود.
- ACL_OTHER
- مدخل ACL_OTHER حقوق دسترسی را برای فرآیندهایی مشخص میکند که با هیچ مدخل دیگری در ACL مطابقت ندارند.
هنگامی که یک بررسی دسترسی انجام میشود، مدخلهای ACL_USER_OBJ و ACL_USER در برابر شناسه کاربری مؤثر (effective user ID) سنجیده میشوند. شناسه گروهی مؤثر (effective group ID) و همچنین تمامی شناسههای گروههای تکمیلی (supplementary group IDs) در برابر مدخلهای ACL_GROUP_OBJ و ACL_GROUP سنجیده میشوند.
ACLهای معتبر (VALID ACLs)
یک ACL معتبر دقیقاً شامل یک مدخل از هر یک از انواع برچسب ACL_USER_OBJ، ACL_GROUP_OBJ و ACL_OTHER است. مدخلهایی با انواع برچسب ACL_USER و ACL_GROUP میتوانند صفر یا چند بار در یک ACL ظاهر شوند. یک ACL که شامل مدخلهایی از نوع برچسب ACL_USER یا ACL_GROUP باشد، باید دقیقاً شامل یک مدخل از نوع برچسب ACL_MASK باشد. اگر یک ACL فاقد هرگونه مدخل از انواع برچسب ACL_USER یا ACL_GROUP باشد، وجود مدخل ACL_MASK اختیاری است.
تمامی توصیفگرهای شناسه کاربری باید در میان تمامی مدخلهای از نوع برچسب ACL_USER یکتا باشند، و تمامی شناسههای گروهی نیز باید در میان تمامی مدخلهای از نوع برچسب ACL_GROUP یکتا باشند.
تابع acl_get_file(3) در صورتی که یک دایرکتوری با هیچ ACL پیشفرضی مرتبط نباشد، یک ACL با صفر مدخل را به عنوان ACL پیشفرض آن دایرکتوری بازمیگرداند. تابع acl_set_file(3) نیز یک ACL با صفر مدخل را به عنوان یک ACL پیشفرض معتبر برای دایرکتوریها میپذیرد که نشان میدهد آن دایرکتوری نباید با هیچ ACL پیشفرضی مرتبط باشد. این کار معادل استفاده از تابع acl_delete_def_file(3) است.
انطباق بین مدخلهای ACL و بیتهای دسترسی فایل (CORRESPONDENCE BETWEEN ACL ENTRIES AND FILE PERMISSION BITS)
مجوزهای تعریفشده توسط ACLها، یک ابرمجموعه از مجوزهای تعیینشده توسط بیتهای دسترسی فایل هستند.
یک انطباق متقابل بین مجوزهای مالک، گروه و سایرینِ فایل و مدخلهای خاص ACL وجود دارد: مجوزهای مالک متناظر با مجوزهای مدخل ACL_USER_OBJ هستند. اگر ACL دارای مدخل ACL_MASK باشد، مجوزهای گروه متناظر با مجوزهای مدخل ACL_MASK خواهند بود. در غیر این صورت، اگر ACL فاقد مدخل ACL_MASK باشد، مجوزهای گروه متناظر با مجوزهای مدخل ACL_GROUP_OBJ هستند. مجوزهای سایرین متناظر با مجوزهای مدخل ACL_OTHER هستند.
مجوزهای مالک، گروه و سایرین فایل همواره با مجوزهای مدخل متناظر در ACL یکسان هستند. تغییر بیتهای دسترسی فایل موجب تغییر مدخلهای مرتبط در ACL شده و بالعکس، تغییر این مدخلهای ACL نیز موجب تغییر بیتهای دسترسی فایل میگردد.
ایجاد اشیاء و ACLهای پیشفرض (OBJECT CREATION AND DEFAULT ACLs)
هنگامی که یک شیء فایلی با هر یک از توابع creat()، mkdir()، mknod()، mkfifo() یا open() ایجاد میشود، ACL دسترسی آن مقداردهی اولیه میگردد. اگر یک ACL پیشفرض با یک دایرکتوری مرتبط باشد، پارامتر mode در توابع ایجادکننده اشیاء فایلی و ACL پیشفرض آن دایرکتوری برای تعیین ACL شیء جدید استفاده میشوند:
- 1.
- شیء جدید، ACL پیشفرض دایرکتوری دربرگیرنده را به عنوان ACL دسترسی خود به ارث میبرد.
- 2.
- مدخلهای ACL دسترسی متناظر با بیتهای دسترسی فایل به گونهای تغییر داده میشوند که حاوی هیچ مجوزی که در مجوزهای مشخصشده توسط پارامتر mode تعیین نشده است، نباشند.
اگر هیچ ACL پیشفرضی با دایرکتوری مرتبط نباشد، پارامتر mode در توابع ایجادکننده شیء فایلی و ماسک ایجاد فایل (نگاه کنید به umask(2)) برای تعیین ACL شیء جدید استفاده میشوند:
- 1.
- به شیء جدید یک ACL دسترسی شامل مدخلهایی با انواع برچسب ACL_USER_OBJ، ACL_GROUP_OBJ و ACL_OTHER اختصاص مییابد. مجوزهای این مدخلها بر روی مجوزهای مشخصشده توسط ماسک ایجاد فایل تنظیم میگردند.
- 2.
- مدخلهای ACL دسترسی متناظر با بیتهای دسترسی فایل به گونهای تغییر داده میشوند که حاوی هیچ مجوزی که در مجوزهای مشخصشده توسط پارامتر mode تعیین نشده است، نباشند.
الگوریتم بررسی دسترسی (ACCESS CHECK ALGORITHM)
یک فرآیند ممکن است درخواست دسترسی خواندن، نوشتن، یا اجرا/جستجو به یک شیء فایلی محافظتشده با ACL داشته باشد. الگوریتم بررسی دسترسی تعیین میکند که آیا دسترسی به آن شیء اعطا خواهد شد یا خیر:
- 1.
- اگر شناسه کاربری مؤثر فرآیند با شناسه کاربری مالک شیء فایلی مطابقت داشته باشد، آنگاه:
- اگر مدخل ACL_USER_OBJ حاوی مجوزهای درخواستی باشد، دسترسی اعطا میشود،
- در غیر این صورت دسترسی رد میشود.
- 2.
- در غیر این صورت، اگر شناسه کاربری مؤثر فرآیند با توصیفگر هر یک از مدخلهای نوع ACL_USER مطابقت داشته باشد، آنگاه:
- اگر مدخل منطبق ACL_USER و مدخل ACL_MASK هر دو حاوی مجوزهای درخواستی باشند، دسترسی اعطا میشود،
- در غیر این صورت دسترسی رد میشود.
- 3.
- در غیر این صورت، اگر شناسه گروهی مؤثر یا هر یک از شناسههای گروهی تکمیلی فرآیند با گروه فایل یا با توصیفگر هر یک از مدخلهای نوع ACL_GROUP مطابقت داشته باشد، آنگاه:
- •
- اگر این ACL حاوی یک مدخل ACL_MASK باشد، آنگاه:
- اگر مدخل ACL_MASK و هر یک از مدخلهای منطبق ACL_GROUP_OBJ یا ACL_GROUP حاوی مجوزهای درخواستی باشند، دسترسی اعطا میشود،
- در غیر این صورت دسترسی رد میشود.
- •
- در غیر این صورت (توجه داشته باشید که هیچ مدخل ACL_GROUPی نمیتواند بدون وجود مدخل ACL_MASK وجود داشته باشد):
- اگر مدخل ACL_GROUP_OBJ حاوی مجوزهای درخواستی باشد، دسترسی اعطا میشود،
- در غیر این صورت دسترسی رد میشود.
- 4.
- در غیر این صورت، اگر مدخل ACL_OTHER حاوی مجوزهای درخواستی باشد، دسترسی اعطا میشود.
- 5.
- در غیر این صورت دسترسی رد میشود.
قالبهای متنی ACL (ACL TEXT FORMS)
یک قالب متنی بلند و یک قالب متنی کوتاه برای نمایش ACLها تعریف شده است. در هر دو قالب، مدخلهای ACL به صورت سه فیلد مجزا با نویسه دونقطه (:) نمایش داده میشوند: نوع برچسب مدخل ACL، توصیفگر مدخل ACL، و مجوزهای دسترسی اختیاری. فیلد اول شامل یکی از کلیدواژههای انواع برچسب زیر است:
- user
- یک مدخل ACL از نوع user دسترسی اعطاشده به مالک فایل (نوع برچسب ACL_USER_OBJ) یا یک کاربر مشخص (نوع برچسب ACL_USER) را تعیین میکند.
- group
- یک مدخل ACL از نوع group دسترسی اعطاشده به گروه فایل (نوع برچسب ACL_GROUP_OBJ) یا یک گروه مشخص (نوع برچسب ACL_GROUP) را تعیین میکند.
- mask
- یک مدخل ACL از نوع mask حداکثر دسترسی قابل اعطا توسط هر مدخل ACL بهجز مدخل user برای مالک فایل و مدخل other را تعیین میکند (نوع برچسب ACL_MASK).
- other
- یک مدخل ACL از نوع other دسترسی اعطاشده به هر فرآیندی را تعیین میکند که با هیچیک از مدخلهای user یا group در ACL مطابقت نداشته باشد (نوع برچسب ACL_OTHER).
فیلد دوم شامل شناسه کاربر یا گروه مرتبط با مدخل ACL برای مدخلهایی با برچسب نوع ACL_USER یا ACL_GROUP است، و برای تمامی مدخلهای دیگر خالی میماند. شناسه کاربر میتواند یک نام کاربری یا یک شناسه عددی کاربری (UID) در قالب دهدهی باشد. شناسه گروه میتواند یک نام گروه یا یک شناسه عددی گروه (GID) در قالب دهدهی باشد.
فیلد سوم شامل مجوزهای دسترسی اختیاری است. مجوزهای خواندن، نوشتن و جستجو/اجرا با نویسههای r، w و x (دقیقاً به همین ترتیب) نمایش داده میشوند. هر یک از این نویسهها در صورت عدم وجود آن مجوز در مدخل ACL، با نویسه خط تیره (-) جایگزین میشود. هنگام تبدیل از قالب متنی به نمایش داخلی سیستم، نیازی به ذکر مجوزهای غایب نیست.
استفاده از فاصله خالی (whitespace) در ابتدا و انتهای هر مدخل ACL، و بلافاصله قبل و بعد از جداکننده فیلدها (نویسه دونقطه) مجاز است.
قالب متنی بلند (LONG TEXT FORM)
قالب متنی بلند شامل یک مدخل ACL در هر خط است. علاوه بر این، علامت هش (#) میتواند آغازگر یک توضیح (کامنت) باشد که تا پایان خط ادامه مییابد. اگر یک مدخل ACL از نوع ACL_USER، ACL_GROUP_OBJ یا ACL_GROUP حاوی مجوزهایی باشد که در مدخل ACL_MASK وجود ندارند، بعد از آن مدخل علامت هش، رشته “effective:” و مجوزهای دسترسی مؤثرِ تعیینشده توسط آن مدخل قرار میگیرد. این نمونهای از قالب متنی بلند است:
user::rw- user:lisa:rw- #effective:r-- group::r-- group:toolies:rw- #effective:r-- mask::r-- other::r--
قالب متنی کوتاه (SHORT TEXT FORM)
قالب متنی کوتاه دنبالهای از مدخلهای ACL است که با کاما از هم جدا شدهاند و برای ورودی استفاده میشود. در این قالب از توضیحات (کامنت) پشتیبانی نمیشود. کلیدواژههای انواع برچسب مدخل میتوانند یا به شکل کامل یا به شکل اختصاری تکحرفی ظاهر شوند. مخفف user برابر u، مخفف group برابر g، مخفف mask برابر m و مخفف other برابر o است. بخش مجوزها میتواند در بیشترین حالت شامل هر یک از نویسههای زیر به هر ترتیبی باشد: r، w و x. اینها نمونههایی از قالب متنی کوتاه هستند:
u::rw-,u:lisa:rw-,g::r--,g:toolies:rw-,m::r--,o::r-- g:toolies:rw,u:lisa:rw,u::wr,g::r,o::r,m::r
منطق و مبنای طراحی (RATIONALE)
پیشنویس ۱۷ استاندارد IEEE 1003.1e لیستهای کنترل دسترسی را به گونهای تعریف میکند که شامل مدخلهایی از نوع برچسب ACL_MASK باشند، و یک نگاشت غیرثابت میان بیتهای مجوز فایل تعریف مینماید. کارگروه استاندارد این رابط نسبتاً پیچیده را به این منظور طراحی کرد تا اطمینان حاصل شود برنامههای سازگار با استاندارد IEEE 1003.1 (“POSIX.1”) همچنان روی سیستمهای دارای ACL طبق انتظار عمل خواهند کرد. بخش B.23 از پیشنویس ۱۷ استاندارد IEEE 1003.1e حاوی دلایل و منطق انتخاب این رابط است.
تغییرات در ابزارهای فایل (CHANGES TO THE FILE UTILITIES)
در سیستمی که از ACLها پشتیبانی میکند، ابزارهای فایل ls(1)، cp(1) و mv(1) رفتار خود را به شرح زیر تغییر میدهند:
- برای فایلهایی که دارای یک ACL پیشفرض هستند یا ACL دسترسی آنها بیش از سه مدخل الزامی دارد، ابزار ls(1) در قالب خروجی بلندی که توسط ls -l تولید میشود، یک علامت مثبت (+) را پس از رشته مجوزها نمایش میدهد.
- اگر پرچم -p مشخص شده باشد، ابزار cp(1) لیستهای ACL را نیز حفظ میکند. اگر این کار امکانپذیر نباشد، یک هشدار صادر میشود.
- ابزار mv(1) همواره لیستهای ACL را حفظ میکند. اگر این کار امکانپذیر نباشد، یک هشدار صادر میشود.
اثر ابزار chmod(1) و فراخوان سیستمی chmod(2) بر روی ACL دسترسی در بخش انطباق بین مدخلهای ACL و بیتهای دسترسی فایل شرح داده شده است.
استانداردها (STANDARDS)
سند پیشنویس ۱۷ استاندارد IEEE 1003.1e (“POSIX.1e”) چندین افزونه امنیتی را برای استاندارد IEEE 1003.1 توصیف میکند. اگرچه کار بر روی 1003.1e متوقف شده است، اما بسیاری از سیستمهای شبهیونیکس بخشهایی از پیشنویس ۱۷ یا پیشنویسهای پیشین POSIX.1e را پیادهسازی کردهاند.
لیستهای کنترل دسترسی لینوکس، مجموعه کاملی از توابع و ابزارهای تعریفشده برای لیستهای کنترل دسترسی در POSIX.1e و چندین افزونه را پیادهسازی میکنند. این پیادهسازی کاملاً با پیشنویس ۱۷ استاندارد POSIX.1e سازگار است؛ افزونهها نیز به عنوان افزونه علامتگذاری شدهاند. توابع دستکاری لیست کنترل دسترسی در کتابخانه ACL (libacl، -lacl) تعریف شدهاند. رابطهای سازگار با POSIX در فایل سرآیند <sys/acl.h> اعلان شدهاند. افزونههای اختصاصی لینوکس برای این توابع نیز در فایل سرآیند <acl/libacl.h> اعلان گشتهاند.
نکات (NOTES)
مجوزهای منعشده و فضاهای نام کاربری لینوکس (DENIED PERMISSIONS AND LINUX USER NAMESPACES)
اگرچه میتوان از ACLها برای منع مجوزهای فرآیندها بر پایه گروههایی که عضو آن هستند استفاده کرد، اما این کار یک شیوه نامناسب تلقی میشود. ابزارهای کمکی با امتیازات ویژه مانند newuidmap(1) میتوانند به فرآیندهای بدون امتیاز دسترسی به فراخوان سیستمی setgroups(2) را بدهند که به آنها اجازه میدهد عضویت در گروههای تکمیلی را کنار بگذارند و بدین ترتیب محدودیتهای مبتنی بر آن عضویت را بیاثر سازند. برای جزئیات بیشتر، به user_namespaces(7) مراجعه فرمایید.
همچنین ببینید (SEE ALSO)
chmod(1), creat(2), getfacl(1), ls(1), mkdir(2), mkfifo(2), mknod(2), mount(8), open(2), setfacl(1), stat(2), umask(1)
پیشنویس ۱۷ استاندارد POSIX 1003.1e
https://wt.tuxomania.net/publications/posix.1e/download.html
توابع POSIX 1003.1e بر پایه دستهبندی (POSIX 1003.1e FUNCTIONS BY CATEGORY)
- مدیریت حافظه ذخیرهسازی ACL (ACL storage management)
- acl_dup(3), acl_free(3), acl_init(3)
- دستکاری مدخلهای ACL (ACL entry manipulation)
- acl_copy_entry(3), acl_create_entry(3),
acl_delete_entry(3), acl_get_entry(3), acl_valid(3)
acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_delete_perm(3), acl_get_permset(3), acl_set_permset(3)
acl_get_qualifier(3), acl_get_tag_type(3), acl_set_qualifier(3), acl_set_tag_type(3)
- دستکاری ACL روی یک شیء (ACL manipulation on an object)
- acl_delete_def_file(3), acl_get_fd(3), acl_get_file(3), acl_set_fd(3), acl_set_file(3)
- تبدیل قالبهای ACL (ACL format translation)
- acl_copy_entry(3), acl_copy_ext(3), acl_from_text(3), acl_to_text(3), acl_size(3)
توابع POSIX 1003.1e بر پایه دسترسیپذیری (POSIX 1003.1e FUNCTIONS BY AVAILABILITY)
گروه نخست توابع در اکثر سیستمهای با لیستهای کنترل دسترسی شبهپازیکس پشتیبانی میشوند، در حالی که گروه دوم در سیستمهای کمتری پشتیبانی میگردند. برای برنامههایی که قرار است منتقل (پورت) شوند، بهتر است از گروه دوم اجتناب گردد.
acl_delete_def_file(3), acl_dup(3), acl_free(3), acl_from_text(3), acl_get_fd(3), acl_get_file(3), acl_init(3), acl_set_fd(3), acl_set_file(3), acl_to_text(3), acl_valid(3)
acl_add_perm(3), acl_calc_mask(3), acl_clear_perms(3), acl_copy_entry(3), acl_copy_ext(3), acl_copy_int(3), acl_create_entry(3), acl_delete_entry(3), acl_delete_perm(3), acl_get_entry(3), acl_get_permset(3), acl_get_qualifier(3), acl_get_tag_type(3), acl_set_permset(3), acl_set_qualifier(3), acl_set_tag_type(3), acl_size(3)
افزونههای لینوکس (LINUX EXTENSIONS)
این افزونههای غیرقابلانتقال (non-portable) در سیستمهای لینوکس در دسترس هستند:
acl_check(3), acl_cmp(3), acl_delete_def_file_at(3), acl_entries(3), acl_equiv_mode(3), acl_error(3), acl_extended_fd(3), acl_extended_file(3), acl_extended_file_at(3), acl_extended_file_nofollow(3), acl_from_mode(3), acl_get_file_at(3), acl_get_perm(3), acl_set_file_at(3), acl_to_any_text(3)
نویسنده (AUTHOR)
Andreas Gruenbacher, <andreas.gruenbacher@gmail.com>
| 2026-06-05 | Linux ACL |