توی این مطلب میخوایم با یک سطح دسترسی غیر از سطوح معمول آشنا بشیم. بنابراین اگه با این مبحث (سطوح دسترسی) مشکل دارید پیشنهاد میکنم قبل از ادامهی مطلب حداقل یکی از مطالب زیر رو بخونید تا بتونید ادامهی بحث رو راحتتر پیگیری کنید.
۱. File Permissions and Attributes
۲. Understanding Linux File Permissions
فرض بگیریم میخوایم یه سری فایل رو کاربرا با هم به اشتراک بزارن بطوری که هر کاربر صاحب فایلهای خودش باشه و بتونه فایلهای بقیه کاربرا رو بخونه و بنویسه ولی هیچ کاربری نتونه فایل کاربر دیگهای رو حذف کنه یا تغییر نام بده. یک راه حل اینه که برای هر کدوم یه فولدر ایجاد کنیم که صاحب و گروهش خود کاربر باشه و بقیه کاربرا فقط دسترسی خوندن به فایلها رو داشته باشن که خب راه حل خوبی نیست چون دسترسی نوشتن دسترسی پاک کردن یا تغییر نام رو هم به همراه خودش داره. یک راه حل دیگه و البته درستتر استفاده از sticky bitـه. اینکه چطوری اینکار انجام میشه رو در ادامه بحث میکنیم. ولی به این فک نکنید که این مثال غیر واقعیه. اگه همین الان از یه توزیع گنو/لینوکس استفاده میکنید باید بگم که فولدر tmp در مسیر ریشهی سیستمعاملتون یه همچین حالتی داره و از همین راهحل داره استفاده میکنه. ;)
با ریشهی تاریخی sticky bit کاری نداریم امّا اگه خیلی علاقهمند هستین میتونید به مدخل ویکی Sticky bit سر بزنید. معنی و مفهوم sticky bit دقیقا همون چیزی هست که برای این کار لازم داریم. به طور ساده: حذف و تغییر نام دادن هر فایل یا فولدر (و فایلهای داخل آن) که sticky bit برای آن فعال شده باشد فقط برای کاربر صاحب آن مجاز است، حتی اگر پرمیشن آن ۷۷۷ باشد. خب امّا چطور باید این سطح دسترسی رو به یک فایل/فولدر بدیم؟ از کجا بفمیم یک فایل/فولدر این سطح دسترسی رو داره؟
حذف و تغییر نام دادن هر فایل یا فولدر (و فایلهای داخل آن) که sticky bit برای آن فعال شده باشد فقط برای کاربر صاحب آن مجاز است، حتی اگر پرمیشن آن ۷۷۷ باشد.
برای فعال کردن این سطح دسترسی مثه بقیهی آنها باید از دستور chmod استفاده کنیم. همونطور که میدونید کلاً برای سطوح دسترسی دو روش داریم. یکیش به صورت کاراکتری هست که برای هر سطح رو با یک کاراکتر خاص و استاندارد نشون میدیم که قبلاً باهاشون آشنا شدیم و اونی که باید الان باهاش آشنا بشیم کاراکتر t هست که برای sticky bit به کار میره و با استفاده از کاراکترهای + (plsu) اضافه میشه و با استفاده از کاراکتر – (minus) حذف میشه. به مثال زیر توجه کنید:
در این مثال برای فایل test-file که درمسیر home قرار داره sticky bit فعال میشه. نکته: به هنگام استفاده از این روش برای کنترل سطوح دسترسی دقت کنید چون این روش برای هر سه سطح صاحب، گروه و دیگران یکسان اعمال میشه! روش دیگه به صورت عددی و به اصطلاح هشتهشتی هست. در این روش پرمیشن نهایی مجموع پرمیشنهای سطوح کاربر، گروه و دیگران هست که میشه یه عدد سه رقمی. در این روش مقدار sticky bit رو ۱۰۰۰ در نظر میگیریم که مجموع آن با پرمیشن فایل میشه پرمیشن جدید فایل/فولدر که sticky bit برای آن فعال شده است. به مثال زیر توجه کنید:
در این روش برای غیرفعال کردن sticky bit کافی است پرمیشن رو بدون عدد ۱۰۰۰ وارد کنیم. برای مثال:
|
$ chmod 0664 test-file $ chmod 664 test-file |
حالا میرسیم به اینکه چطوری بفهمیم فایل/فولدری این سطح دسترسی رو داره؟ برای این کار لازم نیست دستور خاصی استفاده کنیم مشکل با همون دستور ls و آپشن l حل میشه. این سطح دسترسی با وجود حرف t به جای آخرین x در قسمت پرمیشنها قابل فهمه. به مثالهای زیر توجه کنید.
|
[vahit@localhost share]$ ls -lR .: total 24 drwxrwxr-t 2 vahit vahit 4096 Sep 3 02:06 dir1 drwxrwxr-t 2 vahid vahid 4096 Sep 3 02:05 dir2 -rw-rw-r-T 1 vahit vahit 0 Sep 3 02:04 file1 -rw-rw-r-T 1 vahid vahid 0 Sep 3 02:04 file2 ./dir1: total 4 -rw-rw-r-- 1 vahit vahit 0 Sep 3 02:06 sub-file1 ./dir2: total 4 -rw-rw-r-T 1 vahid vahid 0 Sep 3 02:05 sub-file2 |
حرف t برای نمایش کاراکتری sticky bit و عدد ۱۰۰۰ برای نمایش عددی آن به کار میرود.
من در مسیر share دو تا فایل دارم و دوتا فولدر که صاحب نصف هر یک از اینها کاربر vahit و نصف دیگه کاربر vahid هست. بر روی کل پوشه پرمیشن sticky bit فعاله. و میشه حرف t رو به شکل بزرگ و کوچیک در آخرین بیت پرمیشنها دید. امّا دوتا نکته:
- تفاوت t (کوچیک) با T (بزرگ) در این هست که t (کوچیک) نشون میده که دسترسی اجرایی برای دیگر کاربران این فایل/فولدر فعاله. و در مقابل T (بزرگ) نشون میده که بقیه کاربران اجازهی اجرای این فایل/محتویات این فولدر رو ندارن. برای مثال اگه پرمیشن یه فایل به شکل rwxr-xr-T باشه یعنی پرمیشن این فایل ۷۵۴ به همراه sticky bit هست و اگه پرمیشن همون فایل به شکل rwxr-xr-t باشه یعنی ۷۵۵ به همراه sticky bit هست. در حالت کلی نخواستن بیت دیگهای اضافه کنن از این روش استفاده کردن که راحت هم باشه :)
- sticky bit برای فایل sub-file1 که در فولدر dir1 قرار داره هم فعاله ولی چون بعد از فعال کردن sticky bit بر روی مسیر share ایجاد شده بین سطوح دسترسیش نشون داده نمیشه. (چرایی و چگونگیش رو فعلاً نمیدونم!)
خب همین.
موفق و شاد منتظر بخش دوّم این مطلب باشید :)
[آپدیت] شاهین مطلبی از وبلاگ خوبه آکلینوکس با عنوان «مجوزهای دسترسی فایل سیستمهای ext در لینوکس» معرفی کرد که توصیه میکنم حتماً بخونیدش برای کاملتر شدن بحث خیلی مفیده :)
منابع:
What is a sticky Bit and how to set it in Linux?
Linux Users and Groups