مدیریت مجوزهای 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
.
همانطور که در شکل نشان داده شده است:
- را
id
دستور تأیید می کند که کاربر در این قسمت نیستadmin
گروه کاربران. -
setfacl
به کاربر اعطا می کندrw
مجوزهای خواندن و نوشتن - پس از تنظیم مجوزها،
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 بپیوندید.