خوب دوستان در سری آموزشی Linux Essentials ای که درست کردم یکی از قسمت ها مربوط به تعیین سطوح دسترسی در سیستم عامل لینوکس بود ، در این ویدیوی آموزشی ما به بررسی انواع سطوح دسترسی و ساختار Permission ها در لینوکس که بصورت read write execute و بصورت خلاصه rwx نمایش داده می شود توضیحاتی ارائه کردیم ، اما نکته ای در این خصوص وجود دارد ، شما ممکن است در ریشه پارتیشن لینوکسی خودتان با استفاده از دستور ls خروجی permission ها را مشاهده کنید و در انتهای کاراکترهای سطوح دسترسی چیزی به غیر از حروف rwx مشاهده کنید ، ممکن است به شکل زیر شما rwt مشاهده کنید ، این خروجی در مثال زیر کاملا پیداست :
drwxrwxrwt 30 root root 20480 Jan 11 12:17 /tmp
خوب دو سئوال در خصوص خروجی دستور بالا بایستی برای شما پیش بیاید ، اولین سئوال اینکه کاراکتر t در انتهای سطوح دسترسی چه می کند و از طرفی چرا پوشه tmp که پوشه temporary همه کاربران شبکه است بایستی سطح دسترسی به شکل 777 یعنی همه دارای دسترسی full control داشته باشد ؟ آیا این موضوع منطقی است ؟
خوب در پاسخ به این سئوالات ابتدا یک مثال می زنیم ، طبیعی است که هر کسی بایستی بتواند در دایرکتوری tmp فایل های خودش را قرار بدهد و هر کسی هم باید بتواند فایل های خودش را پاک کند ، پس به ناچار ما به همه دسترسی full control به این پوشه می دهیم ، اما نکته اینجاست که در چنین مواقعی من به عنوان کاربر unity نبایستی بتوانم محتویات فایلی که کاربر f.khanlari ایجاد کرده است را حذف کنم اما در حالت عادی با توجه به سطح دسترسی که کاربران به این پوشه دارند هر کسی می تواند فایل های دیگران را حذف کند ، پس چاره چیست ؟ چاره اینکار استفاده از تکنیکی به نام sticky bit است.
Sticky Bit چیست ؟
اگر با سطوح دسترسی در ویندوز آشنا باشید حتما می دانید که در NTFS Permission ها یک سطح دسترسی به نام Creator Owner وجود دارد ( یا یک گروه ) با استفاده از این سطح دسترسی شما می توانید سطح دسترسی به یک پوشه اعمال کنید که کلیه کاربران فقط و فقط به فایل هایی که مالک یا Owner آنها هستند دسترسی کامل داشته باشند و به فایل های دیگران دسترسی نداشته باشند. همین امر در سیستم عامل لینوکس به عنوان sticky bit شناخته می شود ( البته این اصلا بحث مقایسه این دو سیستم عامل نیست فقط برای درک بهتر مطرح شد) .
در واقع سطح دسترسی sticky bit ، سطح دسترسی است که بر روی یک folder یا پوشه اعمال می شود و فقط به مالک یا owner فایل ها اجازه می دهد که تغییراتی که می خواهند را بر روی فایل مورد نظرشان اعمال کنند و نمی توانند کوچکترین تغییری بر روی فایل های دیگران در عین اینکه دسترسی به نظر 777 است اعمال کنند. تنها کاربر root در چنین مواقعی امکان حذف و یا تغییر دادن فایل های دیگران را خواهد داشت.
Sticky bit در واقع یک مکانیزم امنیتی در سیستم عامل لینوکس است که از حذف کردن فایل ها توسط کاربران غیرمجاز در پوشه های حساس این سیستم عامل جلوگیری می کند ، در عین حال که کاربر دسترسی کامل برای ایجاد کردن و حذف کردن و ویرایش کردن فایل های خودش دارد ، در عین حال به هیچ یک از فایل های سایر کاربران دسترسی نخواهد داشت. بصورت پیشفرض sticky bit بر روی پوشه tmp در لینوکس فعال شده است.
chmod 1757 ~/Desktop/test
چگونه می توانیم sticky bit را بر روی یک پوشه فعال کنیم ؟
فعال کردن sticky bit به روشهای مختلفی قابل انجام است ، شما می توانید آن را با استفاده از روشهای سمبولیک ، با استفاده از عددهای تعریف شده برای سطوح دسترسی و .. انجام دهید در ادامه انواع روشهای اعمال کردن Sticky bit بر روی یک فولدر به نام itpro را مشاهده می کنید :
استفاده از روش Symbolid برای ایجاد Sticky Bit
chmod o+t ~/Desktop/test
یا روش دیگر :
chmod +t ~/Desktop/test
یا با استفاده از قرار دادن عدد 1 در ابتدای اعداد سطوح دسترسی :
chmod 1757 ~/Desktop/test
حالا می توانید نتایج به دست آمده را مشاهده کنید :
ls -li ~/Desktop/test 1551793 drwxrwxrwt 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
همانطور که مشاهده کردید در خروجی حرف t در انتهای سطوح دسترسی به عنوان اعمال شدن sticky bit نمایش داده می شود ، برای حذف کردن این bit نیز می توانید به روش زیر عمل کنید :
chmod o-t ~/Desktop/test
حالا نتیجه خروجی نشان از حذف شدن sticky bit دارد :
ls -li ~/Desktop/test 1551793 drwxrwxrwx 45 hadi hadi 20485 Mar 11 14:35 ~/Desktop/test
در دوره آموزش لینوکس اسنشیالز مهندس نصیری در خصوص مفهوم Sticky Bit بصورت مفصل صحبت می شود . امیدوارم مورد توجه شما قرار گرفته باشد.
خواهش میکنم جناب نصیری ... بازم ممنون از اینکه وقت میذارید و سعی به کمک به دیگران دارید ... هر موقعی که براتون مقدور و امکان پذیر بود من در خدمتتون هستم ... یک دنیا ممنون
جناب مسچی ، اجازه بدید در اسرع وقت با دقت بهتون پاسخ بدم ، گذاشتم در لیست علاقه مندی ها Pin باشه ، چون خیلی الان دقیق نمیتونم جواب بدم به شدت درگیر پس زمینه سایت هستیم و رفع مشکلات یه مقدار طول میکشه پاسخ بدم
با عرض سلام و ادب و احترام خدمت شما جناب مهندس نصیری عزیز . ممنون بابت مطلب خوبتون .... سوالی که از خدمتتون داشتم این هست که شما فرمودید sticky bit بر روی یک فولدر یا پوشه ایجاد میشه و باعث میشه حذف کردن یا تغییر نام پوشه ها یا فایل های داخل اون پوشه جز توسط کسی که ایجادش کرده ممکن نباشه .... فرض کنیم ما یک فولدر داریم که همه اعضا سازمان باید بهش دسترسی فول کنترل داشته باشن اما کسی نتونه فایل دیگران رو حذف کنه ... تغییر دادن محتوا یا ایجاد فایل ها بلامانع هست ... ضمنا حق استفاده از sticky bit رو در فولدر بالایی نداریم بنا به دلایلی تا بتونه اون فایل هارو از تغییر نام و حذف شدن فایل های یک شخص در برابر شخص دیگه ای حفظ بکنه .... حال اگر کاربران نخوان فایل هاشون توسط دیگران حذف بشه یا تغییر نام پیدا کنه باید چه کاری انجام بدن ؟؟ چون همین سناریویی رو که خدمتتون عرض کردم بنده خودم رو سیستمم پیاده سازی کردم و کاری نمیشد انجام داد ... از طرفی اگر به صورت مجزا روی هر کدوم از فایل ها هم sticky bit رو پیاده میکردیم هیچ تاثیری نداره رو اون فایل ... سوالی که برام پیش اومد اینه که در اینجا استیکی بیت پس به چه دردی میخوره ؟؟ چون به صورت تکی روی یک فایل که پیاده سازیش کردم عملا از تغییر نام و حذف شدن اون فایل جلوگیری نکرد ... خیلی خیلی ممنون و سپاسگزار میشم اگر محبت کنین و به این سوالی که دارم پاسخ بفرمایین .... امیدوارم که منظورم رو تونسته باشم به صورت کامل برسونم ...
امیر حسین عزیز ، این مطلب رو بخون :
sticky bit
The sticky bit on the other hand is denoted as t, such as with the //tmp directory
This bit should have always been called the "restricted deletion bit" given that's what it really connotes. When this mode bit is enabled, it makes a directory such that users can only delete files & directories within it that they are the owners of.
پیچیدست ؟
من پوشه رو ایجاد می کنم و بهش دسترسی 777 میدم اما توی اون پوشه وقتی فایلی ایجاد می کنم دسترسی ها 777 نیست و کاربرا نمیتونن اون فایل رو تغییر بدن.
ببین زیاد سخت نیست امیر حسین ::: ما به یه فولدر دسترسی 777 میدیم یعنی همه دسترسی Full Control داخلش دارن اوکی ؟ یعنی شما فایل هم ایجاد کنی دیگران به اون فایل دسترسی Full Control خواهند داشت چراکه Permission ها از پوشه بالاسری Inherit یا به ارث میرسن اوکی ؟ خوب اینجاست مشکل ، شما فایلت رو ایجاد می کنی و Owner اش هست ! اما دیگران هم بهش دسترسی دارن چون تو یه پوشه ای هست که دیگران 777 دسترسی به فایل هاش دارن ! اوکی ؟ حالا Sticky که اضافه می کنی میگه اوکی دسترسی 777 برای همه اما فقط برای فایل های خودشون ! یعنی فایل هایی که دیگران ایجاد می کنن رو بهشون دسترسی نده
در واقع سطح دسترسی sticky bit ، سطح دسترسی است که بر روی یک folder یا پوشه اعمال می شود و فقط به مالک یا owner فایل ها اجازه می دهد که تغییراتی که می خواهند را بر روی فایل مورد نظرشان اعمال کنند و نمی توانند کوچکترین تغییری بر روی فایل های دیگران در عین اینکه دسترسی به نظر 777 است اعمال کنند.
در اینجا سطح دسترسی روی فولدر 777 هست ولی اگه یه کاربر فایلی رو بسازه خودش Owner اون هست و یوزر دیگه ای نیمتونه روی اون فایل Write کنه چه برسه به حذف کردنش ! من دقیقا اینجا رو متوجه نمیشم
خوب نکته اینجاست !! ما اونجا بیشتر فایل خالی ایجاد می کنیم تا فولدر !! دایرکتوری tmp برای همین چیزهای موقت هست و البته نکته دیگه اینجاست که خود سیستم حالت sticky رو به کاربر میده در این فولدر ... اگر جای دیگه بخایم درست کنیم باید دستی ایجاد کنیم.
منظورم اینه اگه Sticky Bit فعال نباشه روی فولدر چه اتفاقی میوفته ؟
این به خاطر بحث Ownership هست ، قطعا هر کسی فایلی رو حتی در ویندوز ایجاد کنه خودش مالکش هست و دسترسی کامل داره بهش ، Sticky رو مدیر سیستم به دیگران میده