برنامه نویسی

مدیریت مجوزهای POSIX ACL در JuiceFS

فهرست‌های کنترل دسترسی (ACL) مکانیزمی برای پیاده‌سازی کنترل مجوزهای دقیق‌تر در سیستم‌های شبه یونیکس مانند لینوکس، macOS و FreeBSD هستند. آنها مدل سنتی مجوزهای یونیکس را گسترش می دهند و روشی انعطاف پذیرتر و دقیق تر برای مدیریت مجوزها ارائه می دهند.
در مدل سنتی مجوزهای یونیکس، مجوزهای یک فایل یا دایرکتوری به سه نوع طبقه بندی می شوند:

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

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

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

این مقاله راهنمای مدیریت POSIX ACL در JuiceFS برای مجوزهای فایل دقیق است. این شامل فعال کردن ACL ها، تنظیم و بررسی مجوزها، و اطمینان از حفظ ACL ها در طول عملیات فایل می شود.

الزامات استفاده از ACL در JuiceFS

JuiceFS Enterprise Edition همیشه از ACL ها پشتیبانی می کند، در حالی که JuiceFS Community Edition از POSIX ACL از نسخه 1.2 پشتیبانی می کند. این راهنما بر نسخه جامعه تمرکز دارد.

  • قبل از فعال کردن ACL در JuiceFS Community Edition، نکات زیر را در نظر داشته باشید:
  • ACL ها با سیستم فایل مرتبط هستند و پس از فعال شدن غیرفعال نمی شوند.

برای فعال کردن ACL ها در یک سیستم فایل، باید همه کلاینت ها را به نسخه 1.2 یا بالاتر ارتقا دهید تا از تداخل با تنظیمات مجوز توسط کلاینت های قدیمی جلوگیری کنید.

فایل سیستم را آماده کنید

نسخه مشتری را تأیید کنید

نسخه مشتری را بررسی کنید.

$ juicefs version
juicefs version 1.2.0-beta1+2024-04-18.041e931
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از زمان انتشار این مقاله، آخرین نسخه مشتری JuiceFS v1.2.0-beta2 است. می توانید نسخه از پیش کامپایل شده برای معماری CPU خود را در Github Releases پیدا کنید یا سند ما را دنبال کنید تا کلاینت را به صورت دستی کامپایل کنید.

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

فایل سیستم خود را ایجاد کنید

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

ACL ها را برای سیستم فایل جدید فعال کنید

برای فعال کردن ACL ها هنگام ایجاد یک سیستم فایل، از کلاینت نسخه 1.2 یا بالاتر با آن استفاده کنید --enable-acl گزینه:

juicefs format --enable-acl \
--bucket xxx
--access-key xxx
--secret-key xxx
...
redis://xxx.myserver.com/1 myjfs
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ACL ها را برای سیستم فایل فعال کنید

از کلاینت نسخه 1.2 یا بالاتر برای فعال کردن ACLها برای سیستم فایل موجود با config دستور:

juicefs config --enable-acl redis://xxx.myserver.com/1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بررسی کنید که آیا یک سیستم فایل دارای ACL فعال است یا خیر

شما باید از کلاینت نسخه 1.2 یا جدیدتر استفاده کنید تا بررسی کنید آیا فایل سیستمی دارای ACL فعال است، زیرا مشتریان قدیمی نمی توانند اطلاعات مربوط به ACL را خروجی دهند. مثلا:

$ juicefs status redis://192.168.1.80/1

{
  "Setting": {
    "Name": "myjfs",
    "UUID": "fdc09170-3e1b-43be-bc64-c30e6031a7b9",
    "Storage": "minio",
    "Bucket": "http://192.168.1.80:9123/myjfs",
    "AccessKey": "herald",
    "SecretKey": "removed",
    "BlockSize": 4096,
    "Compression": "none",
    "EncryptAlgo": "aes256gcm-rsa",
    "KeyEncrypted": true,
    "TrashDays": 1,
    "MetaVersion": 1,
    "MinClientVersion": "1.1.0-A",
    "DirStats": true,
    "EnableACL": false
  },
...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بررسی کنید که آیا یک سیستم فایل دارای ACL فعال است یا خیر

شما باید از کلاینت نسخه 1.2 یا جدیدتر استفاده کنید تا بررسی کنید آیا فایل سیستمی دارای ACL فعال است، زیرا مشتریان قدیمی نمی توانند اطلاعات مربوط به ACL را خروجی دهند. مثلا:

$ juicefs status redis://192.168.1.80/1

{
  "Setting": {
    "Name": "myjfs",
    "UUID": "fdc09170-3e1b-43be-bc64-c30e6031a7b9",
    "Storage": "minio",
    "Bucket": "http://192.168.1.80:9123/myjfs",
    "AccessKey": "herald",
    "SecretKey": "removed",
    "BlockSize": 4096,
    "Compression": "none",
    "EncryptAlgo": "aes256gcm-rsa",
    "KeyEncrypted": true,
    "TrashDays": 1,
    "MetaVersion": 1,
    "MinClientVersion": "1.1.0-A",
    "DirStats": true,
    "EnableACL": false
  },
...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از فعال کردن ACL برای یک سیستم فایل، حداقل نسخه مشتری ثبت شده در اطلاعات وضعیت نیز تغییر خواهد کرد. مثلا:

{
  "Setting": {
    "Name": "myjfs",
    "UUID": "fdc09170-3e1b-43be-bc64-c30e6031a7b9",
    "Storage": "minio",
    "Bucket": "http://192.168.1.80:9123/myjfs",
    "AccessKey": "herald",
    "SecretKey": "removed",
    "BlockSize": 4096,
    "Compression": "none",
    "EncryptAlgo": "aes256gcm-rsa",
    "KeyEncrypted": true,
    "TrashDays": 1,
    "MetaVersion": 1,
    "MinClientVersion": "1.2.0-A",
    "DirStats": true,
    "EnableACL": true
  },

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ابزارهایی برای مدیریت ACL ها

در لینوکس، ابزارهای اصلی برای مدیریت و پیکربندی ACL ها عبارتند از:

  • getfacl: اطلاعات ACL یک فایل یا دایرکتوری را دریافت می کند
  • setfacl: ACL یک فایل یا دایرکتوری را تنظیم می کند.

برخی از توزیع های لینوکس این ابزارها را به طور پیش فرض نصب نمی کنند. برای نصب آنها:

  • برای سیستم های دبیان و اوبونتو، می توانید آن را اجرا کنید sudo apt-get install acl فرمان
  • برای Red Hat، Almalinux، و Rocky Linux، می توانید از آن استفاده کنید sudo dnf install acl فرمان

از ACL برای مدیریت مجوزهای فایل در JuiceFS استفاده کنید

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

در سیستم های لینوکس، مجوزها برای فایل ها یا دایرکتوری ها توسط کاربران یا گروه ها مدیریت می شود.
به عنوان مثال، زمانی که از ls -l دستور فهرست کردن اطلاعات فایل ها در یک فهرست، اولین فیلد هر رکورد یک رشته 10 کاراکتری است مانند -rw-r--r--. این نشان دهنده مجوزهای کاربر، گروه و سایرین برای آن فایل است:

  • کاراکتر 1 نوع فایل را نشان می دهد:

    • - برای یک فایل معمولی
    • d برای یک دایرکتوری
    • l برای پیوند نمادین
    • s برای یک سوکت
  • نویسه های 2 تا 4 نشان دهنده مجوزهای مالک هستند:

    • r برای خواندن
    • w برای می نویسد
    • x برای اعدام
    • اگر مجوزی اعطا نشود، توسط -
  • کاراکترهای 5 تا 7 نشان دهنده مجوزهای گروه هستند:

    • r برای خواندن
    • w برای می نویسد
    • x برای اعدام
    • اگر مجوزی اعطا نشود، توسط -
  • نویسه های 8 تا 10 نشان دهنده مجوزهای دیگران هستند:

    • r برای خواندن
    • w برای می نویسد
    • x برای اعدام
    • اگر مجوزی اعطا نشود، توسط -

مثلا، -rw-r--r-- نشان می دهد:

  • این یک فایل معمولی است.
  • مالک دارای مجوزهای خواندن و نوشتن است.
  • گروه و سایرین دارای مجوزهای فقط خواندنی هستند.

توضیحات تصویر

در اطلاعات مجوزهای نشان داده شده در بالا، مالک است herald و گروه است admin. اگر می خواهید مجوز خواندن و نوشتن فایل README.md را به کاربری با نام اعطا کنید tom، چند گزینه وجود دارد:

  • تنظیمات tom به عنوان مالک فایل، اما با این کار مالکیت از آن حذف می شود herald.
  • اضافه كردن tom به admin گروه و اعطای مجوز نوشتن به کل گروه. اما این محدودیت فقط خواندنی را می شکند admin گروه، به همه اعضا دسترسی خواندن و نوشتن می دهد.
  • اعطای مجوز خواندن و نوشتن به دیگران. اما این باعث افزایش بیش از حد مجوزها می شود.

واضح است که مدل استاندارد مجوز لینوکس نمی تواند کنترل مجوز فایل ریزدانه را اجرا کند، در حالی که ACL ها به راحتی می توانند این نیاز را برآورده کنند.

از ACL برای اختصاص مجوزها استفاده کنید

برای تنظیم مجوزهای ACL برای فایل ها و دایرکتوری ها، می توانید از ابزارها استفاده کنید getfacl و setfacl:

  • getfacl اطلاعات ACL را فهرست می کند.
  • setfacl مجوزهای ACL را تنظیم می کند.

مجوزهای ACL را برای فایل ها تنظیم کنید

با استفاده از فایل README.md به عنوان مثال، ابتدا تنظیمات ACL آن را بررسی کنید:

توضیحات تصویر

خروجی اطلاعات ACL فایل را نشان می دهد:

  • سه خط اول نام فایل، مالک و گروه است.
  • سه خط بعدی تنظیمات مجوزهای فعلی را نشان می دهد که با تنظیمات فهرست شده مطابقت دارد ls -l فرمان این بدان معنی است که بدون تنظیمات ACL، اطلاعات نمایش داده شده مجوزهای پیش فرض POSIX هستند.

حالا، استفاده کن setfacl برای اعطای مجوز خواندن و نوشتن به کاربری به نام tom، که در گروه مدیریت نیست. نحو برای تنظیم مجوزهای ACL برای یک کاربر است setfacl -m u:username:permissions filename_or_directoryname.

توضیحات تصویر

همانطور که در شکل نشان داده شده است:

  1. را id دستور تأیید می کند که کاربر در این قسمت نیست admin گروه کاربران.
  2. setfacl به کاربر اعطا می کند rw مجوزهای خواندن و نوشتن
  3. پس از تنظیم مجوزها، getfacl تنظیمات ACL فایل را فهرست می کند.

پس از تنظیم، خروجی دو خط جدید را نشان می دهد:

  • user:tom:rw-: ورودی ACL جدید اضافه شده، نشان دهنده آن کاربر است tom دارای مجوز خواندن و نوشتن برای فایل است.
  • mask::rw-: این ماسک مجوز است که به طور خودکار توسط ACL به فایل اضافه می شود. حداکثر مجوزهای موثر را برای ورودی های ACL در کلاس گروه تنظیم می کند.

حالا کاربر tom دارای مجوزهای ویرایش برای فایل README.md است و می تواند با استفاده از آن تأیید کند sudo -u tom nano README.md برای تغییر و ذخیره فایل

در سیستم من یک کاربر به نام وجود دارد jerry در admin گروه همانطور که شکل زیر نشان می دهد، هنگام تلاش برای ویرایش فایل به عنوان jerry، نشان می دهد که مجوز نوشتن ندارد:

توضیحات تصویر

این نشان می دهد که تنظیمات ACL بر مجوزهای فایل پیش فرض تأثیری نداشته است.
به طور مشابه، می توانید با استفاده از نحو، مجوزهای خواندن و نوشتن را به یک گروه کاربری خاص اختصاص دهید setfacl -m g:user-group:permissions filename_or_directoryname.

توضیحات تصویر

همانطور که در تصویر نشان داده شده است، www-data به گروه کاربر مجوز خواندن و نوشتن برای فایل README.md داده شد. این بدان معناست که همه کاربران این گروه اکنون دسترسی خواندن و نوشتن به فایل دارند. با این حال، مجوزهای پیش فرض POSIX برای admin گروه کاربر فقط خواندنی باقی می ماند. این اجازه می دهد تا تعاریف مجوز انعطاف پذیر برای هر تعداد کاربر یا گروه بر اساس نیازهای خاص.

مجوزهای ACL را برای دایرکتوری تنظیم کنید

تنظیم مجوزهای ACL برای یک فهرست مشابه با تنظیم آنها برای یک فایل است. استفاده کنید getfacl برای بازیابی اطلاعات ACL برای دایرکتوری، و setfacl برای تنظیم مجوزهای ACL.
همانطور که شکل زیر نشان می دهد، من فایل ها را در نقطه مانت JuiceFS استخراج کردم و یک دایرکتوری جدید ایجاد کردم. با استفاده از getfacl، من اطلاعات ACL را برای این دایرکتوری بازیابی کردم و استفاده کردم setfacl برای اعطای کاربر tom مجوزهای خواندن، نوشتن و اجرای (rwx) برای دایرکتوری.

توضیحات تصویر

از شکل، می توانید ببینید که دایرکتوری ها به طور پیش فرض شامل مجوزهای اجرا (x) هستند. بدون این ها نمی توانید دایرکتوری را وارد کنید. با پیروی از این منطق، می توانید مجوزهای ACL را بر اساس دسترسی به دایرکتوری تنظیم کنید، مانند محدود کردن آن www-data گروه از دسترسی به دایرکتوری با استفاده از sudo setfact -m g:www-data:wr- directory.

توضیحات تصویر

به طور مشابه، می توانید مجوزهای دسترسی را برای هر کاربر یا گروهی به یک فهرست اختصاص دهید. برای اعمال قوانین ACL در تمام فایل ها و دایرکتوری ها، از -R گزینه. مثلا، setfacl -R -m u:tom:wrx your-directory.

مجوزهای ACL پیش فرض را برای یک فهرست تنظیم کنید

ممکن است متوجه شوید که تنظیم مجوزهای ACL روی یک دایرکتوری فقط روی خود دایرکتوری تأثیر می گذارد. مثلاً اعطای tom مجوزهای rwx به دایرکتوری دسترسی نوشتن به فایل‌های داخل را فراهم نمی‌کند. این به این دلیل است که تنظیمات ACL به طور پیش فرض منتشر نمی شود.

برای انتشار مجوزهای ACL به فایل‌های تازه ایجاد شده در یک فهرست، از مجوزهای پیش‌فرض با افزودن آن استفاده کنید -d گزینه هنگام تنظیم آنها.

توضیحات تصویر

پس از تنظیم مجوزهای پیش فرض، اطلاعات ACL فهرست شامل تعاریف پیش فرض خواهد بود. هر فایل جدیدی که به این دایرکتوری اضافه شود به طور خودکار این مجوزهای ACL پیش فرض را به ارث می برد. در مثال بالا، tom مجوزهای کامل خواندن، نوشتن و اجرای هر فایل یا دایرکتوری جدید ایجاد شده در داخل را خواهد داشت.

توجه داشته باشید که مجوزهای پیش‌فرض ACL بر روی فایل‌های موجود در فهرست تأثیر نمی‌گذارند. برای اعمال قوانین ACL بر روی فایل های موجود، از -R گزینه. مثلا، setfacl -R -m u:tom:wrx your-directory.

مجوزهای ACL را حذف کنید

برای حذف قوانین ACL تعریف شده روی یک فایل یا دایرکتوری، از -x گزینه، همانطور که در شکل زیر نشان داده شده است:

توضیحات تصویر

علاوه بر این، برای حذف بازگشتی تمام تنظیمات ACL از همه فایل‌های یک فهرست، استفاده کنید setfacl -R -b your-directory.

توجه داشته باشید

حفظ مجوزهای ACL در حین کپی کردن

ابزارهایی مانند cp و rsync تنظیمات ACL را به طور پیش فرض حفظ نکنید. برای حفظ مجوزهای ACL در طول عملیات فایل یا دایرکتوری، مطمئن شوید که گزینه های مربوط به این ابزارها را درک کرده اید. مثلا:

# cp uses -a or --archive 
cp -a source file destination
# rsync uses -X or --acl
rsync -avX source file destination
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نتیجه

این مقاله استفاده اساسی از POSIX ACL را از منظر سیستم فایل JuiceFS معرفی می‌کند و تفاوت‌ها با مجوزهای پیش‌فرض POSIX و ملاحظات در استفاده روزانه را برجسته می‌کند. این نمونه های دقیق از استفاده را ارائه می دهد getfacl و setfacl دستورات برای تنظیم فایل، دایرکتوری و مجوزهای پیش فرض ACL.

امیدوارم این اطلاعات برای کاربران JuiceFS مفید باشد. اگر بازخورد یا پیشنهادی دارید، می‌توانید به بحث‌های JuiceFS در GitHub و انجمن ما در Slack بپیوندید.

نوشته های مشابه

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا