مجوزهای لینوکس: SUID، SGID و sticky bit

 

دریافت مجوزها در لینوکس گاهی اوقات می تواند یک وضعیت “دشوار” باشد. یاد بگیرید که چگونه مجوزهای مناسب را حتی در شرایط خاص تنظیم کنید.

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

من توضیح سریعی در مورد روش های مختلف محاسبه مجوزها ارائه خواهم کرد و سپس بر روی مجوزهای ویژه در لینوکس تمرکز خواهیم کرد. اگر می‌خواهید نگاهی عمیق به دستور chmod داشته باشید، این مقاله را از  مجوزهای لینوکس بررسی کنید.

دو روش اصلی برای تخصیص مجوزها وجود دارد.

روش نمادین – Symbolic method

روش نمادین از نحو زیر استفاده می کند:

[tcarrigan@server ~]$ chmod WhoWhatWhich file | directory

  • Who – represents identities: u,g,o,a (user, group, other, all)
  • What – represents actions: +, -, = (add, remove, set exact)
  • Which – represents access levels: r, w, x (read, write, execute)

 

Who – نشان دهنده هویت ها است: u،g،o،a (کاربر، گروه، دیگر، همه)

What – نشان دهنده اقدامات: +، -، = (افزودن، حذف، تنظیم دقیق)

Which – سطوح دسترسی را نشان می دهد: r، w، x (خواندن، نوشتن، اجرا)

 

[tcarrigan@server ~]$ chmod ug+rw test.txt

 

 این روش ترجیحی من برای تخصیص مجوزها نیست، و اگر اطلاعات بیشتری در مورد این روش می‌خواهید، نزدیک‌ترین موتور جستجوی را به شما توصیه می‌کنم.

روش عددی  – Numeric method

در تجربه من، روش عددی بهترین راه برای یادگیری و تمرین مجوزها است. بر اساس نحو زیر است:

[tcarrigan@server ~]$ chmod ### file | directory

در اینجا، از چپ به راست، کاراکتر # یک سطح دسترسی را نشان می دهد. سه سطح دسترسی وجود دارد – کاربر، گروه و دیگران. برای تعیین اینکه هر رقم چقدر است، از موارد زیر استفاده می کنیم:

از 0 شروع کنید

اگر مجوز خواندن باید تنظیم شود، 4 را اضافه کنید

اگر مجوز نوشتن باید تنظیم شود، 2 را اضافه کنید

اگر مجوز اجرا باید تنظیم شود، 1 را اضافه کنید

این بر اساس سطح دسترسی محاسبه می شود. بیایید این مثال مجوزها را تفسیر کنیم:

-rw-r-x—

مجوزها به صورت 650 نمایش داده می شوند.

چگونه به آن اعداد رسیدم؟

مجوزهای کاربر عبارتند از: rw- یا 4+2=6

مجوزهای گروه عبارتند از: r-x یا 4+1=5

مجوزهای دیگران عبارتند از: — یا 0

برای قرار دادن نحوه صحیح  دستور، اینطور به نظر میرسد:

[tcarrigan@server ~]$ chmod 650 test.txt

اکنون که اصول اولیه محاسبه مجوز در لینوکس را درک کردید، اجازه دهید مجوزهای ویژه موجود در سیستم عامل را بررسی کنیم.

[ همچنین ممکن است مقدمه ای بر لیست های کنترل دسترسی لینوکس (ACL) را دوست داشته باشید. ]

توضیح مجوزها ی ویژه – Special permission explained

مجوزهای ویژه علاوه بر کاربر، گروه و غیره، چهارمین سطح دسترسی را تشکیل می دهند. مجوزهای ویژه، امتیازات بیشتری را نسبت به مجموعه مجوزهای استاندارد (همانطور که از نام آن پیداست) اجازه می دهد. یک گزینه مجوز ویژه برای هر سطح دسترسی که قبلاً بحث شد وجود دارد. بیایید نگاهی به هر یک به صورت جداگانه بیندازیم و با Set UID شروع کنیم:

user + s (pecial)

 

معمولاً به عنوان SUID ذکر می شود، مجوز ویژه برای سطح دسترسی کاربر دارای یک عملکرد واحد است: یک فایل با SUID همیشه به عنوان کاربری که مالک فایل است، بدون توجه به اینکه کاربر دستور را ارسال می کند، اجرا می شود. اگر مالک فایل مجوزهای اجرا را ندارد، در اینجا از S بزرگ استفاده کنید.

حال، برای اینکه این را به صورت عملی ببینیم، اجازه دهید به دستور /usr/bin/passwd/ نگاه کنیم. این دستور به طور پیش فرض دارای مجموعه مجوز SUID است:

[tcarrigan@server ~]$ ls -l /usr/bin/passwd 

-rwsr-xr-x. 1 root root 33544 Dec 13  2019 /usr/bin/passwd

به s توجه کنید که x معمولاً مجوزهای اجرا را برای کاربر نشان می دهد.

group + s (pecial)

معمولاً به عنوان SGID ذکر می شود، این مجوز ویژه دارای چند عملکرد است:

اگر روی یک فایل تنظیم شود، اجازه می دهد تا فایل به عنوان گروهی که فایل را در اختیار دارد اجرا شود (شبیه به SUID)

اگر روی دایرکتوری تنظیم شود، هر فایلی که در دایرکتوری ایجاد می شود، مالکیت گروهی آن ها به مالک دایرکتوری تنظیم می شود

[tcarrigan@server article_submissions]$ ls -l 

total 0

drwxrws—. 2 tcarrigan tcarrigan  69 Apr  7 11:31 my_articles

این مجموعه مجوز با حروف کوچک نشان داده می شود که در آن x معمولاً امتیازات اجرای گروه را نشان می دهد. همچنین به ویژه برای دایرکتوری هایی که اغلب در تلاش های مشترک بین اعضای یک گروه استفاده می شوند مفید است. هر عضوی از گروه می تواند به هر فایل جدیدی دسترسی داشته باشد. این امر در مورد اجرای فایل ها نیز صدق می کند. SGID هنگامی که به درستی استفاده شود بسیار قدرتمند است.

همانطور که قبلاً برای SUID ذکر شد، اگر گروه مالک مجوز اجرا نداشته باشد، از S بزرگ استفاده می شود.

other + t (sticky)

 

آخرین مجوز ویژه “بیت چسبنده” نامگذاری شده است. این مجوز روی فایل های فردی تأثیر نمی گذارد. با این حال، در سطح دایرکتوری، حذف فایل را محدود می کند. فقط مالک (و ریشه) یک فایل می تواند فایل را در آن دایرکتوری حذف کند. یک مثال رایج از این دایرکتوری /tmp است:

[tcarrigan@server article_submissions]$ ls -ld /tmp/

drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/

مجموعه مجوز با حروف کوچک t مشخص می شود، جایی که x معمولاً امتیاز اجرا را نشان می دهد.

برای تنظیم مجوزهای ویژه روی یک فایل یا دایرکتوری، می توانید از یکی از دو روشی که برای مجوزهای استاندارد در بالا ذکر شده است استفاده کنید: نمادی یا عددی.

بیایید فرض کنیم که می خواهیم SGID را در پوشه Community_content تنظیم کنیم. برای انجام این کار با استفاده از روش نمادین، موارد زیر را انجام می دهیم:

[tcarrigan@server article_submissions]$ chmod g+s community_content/

با استفاده از روش عددی، باید چهارمین رقم قبلی را در دستور chmod خود پاس کنیم. رقم استفاده شده مشابه ارقام مجوز استاندارد محاسبه می شود:

  • Start at 0
  • SUID = 4
  • SGID = 2
  • Sticky = 1

نحو عبارت است از:

[tcarrigan@server ~]$ chmod X### file | directory

جایی که X رقم مجوزهای ویژه است.

در اینجا دستور تنظیم SGID روی Community_content با استفاده از روش عددی آمده است:

[tcarrigan@server article_submissions]$ chmod 2770 community_content/

[tcarrigan@server article_submissions]$ ls -ld community_content/

drwxrws—. 2 tcarrigan tcarrigan 113 Apr  7 11:32 community_content/

خلاصه

در پایان، مجوزها برای اینکه یک مدیر مؤثر لینوکس باشید اساساً مهم هستند. دو روش تعریف شده برای تنظیم مجوزها با استفاده از دستور chmod وجود دارد: نمادین و عددی. ما نحو و محاسبات مورد نیاز برای هر دو روش را بررسی کردیم. همچنین مجوزهای ویژه و نقش آنها در سیستم را در نظر گرفتیم. اکنون که مجوزها و مفاهیم زیربنایی را درک کرده‌اید، می‌توانید خطای همیشه آزاردهنده Permission denied را هنگامی که سعی می‌کند مانع کار شما شود را حل کنید.

http://منبع:https://www.redhat.com/sysadmin/suid-sgid-sticky-bit