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

این جلسه بخشی از دورهٔ لینوکس ۳۰۳ در ۴۰ شب است.

محیط تمرین: Ubuntu 24.04؛ acl و attr؛ حساب student موجود؛ sudo فقط برای پوشهٔ /srv/lpic303-acl.

جایگاه در دوره: هدف‌های 333.1 آزمون 303-300.

فایل و پوشه معنای یکسان ندارند#

روی فایل، r خواندن محتوا و w تغییر آن است؛ روی پوشه، r دیدن فهرست نام‌ها و x عبور و دسترسی به مسیر است. برای خواندن یک فایل، تمام پوشه‌های والد باید قابل عبور باشند. DAC یا کنترل دسترسی اختیاری، به مالکیت و هویت وابسته است.

SetGID روی پوشه به ارث بردن گروه کمک می‌کند؛ sticky bit حذف فایل‌های دیگران در پوشهٔ مشترک را محدود می‌کند. SetUID روی executable می‌تواند هویت مؤثر را عوض کند؛ آن را روی shell یا ابزارهای دلخواه آزمایش نکن. مالک فایل، اجرای برنامه و mount optionها نیز در اثر این بیت‌ها نقش دارند.

قفسه‌ای برای student#

sudo install -d -m 750 /srv/lpic303-acl
printf 'catalog\n' | sudo tee /srv/lpic303-acl/catalog.txt >/dev/null
sudo chmod 640 /srv/lpic303-acl/catalog.txt
namei -l /srv/lpic303-acl/catalog.txt
sudo -u student cat /srv/lpic303-acl/catalog.txt

در نصب تازه، دسترسی student باید رد شود؛ اگر از قبل گروه یا ACL مجاز دارد، آن وضعیت را ثبت کن. حالا مجوز اختصاصی بده:

sudo setfacl -m u:student:rx /srv/lpic303-acl
sudo setfacl -m u:student:r /srv/lpic303-acl/catalog.txt
getfacl /srv/lpic303-acl/catalog.txt
sudo -u student cat /srv/lpic303-acl/catalog.txt

خواندن باید موفق شود. ACL mask سقف مجوز مؤثرِ ورودی کاربران نام‌دار و گروه‌هاست؛ داشتن r در یک ورودی کافی نیست اگر mask آن را حذف کند.

sudo setfacl -m m::--- /srv/lpic303-acl/catalog.txt
getfacl /srv/lpic303-acl/catalog.txt
sudo -u student cat /srv/lpic303-acl/catalog.txt
sudo setfacl -m m::r /srv/lpic303-acl/catalog.txt

در مرحلهٔ mask خالی، انتظار شکست داریم. بعد از chmod دوباره ACL را بخوان؛ تغییر بیت‌های گروه می‌تواند mask را تغییر دهد.

پیش‌فرض و metadata#

Default ACL روی پوشه برای فرزندان تازه است و گذشته را بازنویسی نمی‌کند. با setfacl -m d:u:student:rX /srv/lpic303-acl، ساخت یک فایل جدید را آزمایش کن؛ مجوز درخواستی برنامه و mask همچنان مهم‌اند.

sudo setfattr -n user.course -v lpic303 /srv/lpic303-acl/catalog.txt
getfattr -d /srv/lpic303-acl/catalog.txt

xattr یعنی ویژگی توسعه‌یافته؛ namespaceهایی مانند user، security و trusted سیاست دسترسی متفاوت دارند. یک label دلخواه در user.course مجوز امنیتی ایجاد نمی‌کند. backup و انتقال فایل باید حفظ ACL و xattr را صریحاً پشتیبانی کنند؛ کپی محتوای فایل همیشه کپی metadata نیست.

تمرین عیب‌یابی#

مجوز x پوشه را برای student موقتاً بردار و نشان بده فایل با ACL خواندن هم قابل دسترسی نیست. برای برگشت فقط ACLهای اضافه‌شدهٔ همین پوشه را پاک کن؛ روی درخت سیستم setfacl -b اجرا نکن.

منابع: ACL در توزیع Ubuntu و ویژگی‌های توسعه‌یافته .