مجوزهای دسترسی فایل سیستم‌های ext در لینوکس

مهم نیست چه مدت با لینوکس کار کرده باشید، کارشناس امور امنیتی باشید یا یک هکر آزاد اندیش، مجوزهای دسترسی پدیده‌ای است که  برای هر کاربر لینوکس جذاب است. با این مقدمه، امروز در نظر دارم ۱۳ مجوز دسترسی جالبی که توسط فایل سیستم‌های ext2‏، ext3 و ext4 به کار می‌روند را معرفی کنم.

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

همانطور که می‌دانید، مجوزهای دسترسی عمومی لینوکس بر مبنای دو دستور chmod و chown استوار شده‌اند و اطلاع از اآن‌ها با کمک دستور زیر میسر است:


ls -l

دستور chmod عموما برای تعیین سه سطح دسترسی «خواندن»، «نوشتن» و «اجرا کردن» به کار می‌رود ولی سطوح دسترسی دیگری وجود دارد که توسط فایل‌ سیستم‌های ext2 به بعد معرفی شده‌اند امکان مدیریت بهتر سیستم را فراهم می‌آورند، برای آشنایی با این سطوح دسترسی دو دستور ارائه شده‌اند:

  • دستور نمایش خصیصه‌ها (lsattr)
  • دستور تغییر خصیصه‌ها (chattr)

برای اطلاع از خصیصه‌های یک دایرکتوری یا فایل به دستور lsattr را به این شکل می‌توان به خدمت گرفت:


lsattr /var

خروجی این دستور بسیار شبیه به خروجی دستور ls است. با این تفاوت که این ۱۳ خصیصه را معرفی می‌کند:

خصیصهشرحقابل اعمال توسط chattr
Aرکورد atime فایلی که خصیصه A را داشته باشد، تغییر نخواهد کرد. این باعث کاهش بار عملیات ورودی/خروجی دیسک در لپ‌تا‌پ‌ها و دیسک‌های فلش می‌شود.بله
aفایلی که خصیصه‌ی a را داشته باشد، فقط در حالت append قابل نوشته شدن است.بله، فقط توسط کاربر ریشه
cفایلی که خصیصه‌ی c را داشته باشد به صورت خودکار توسط کرنل فشرده‌ می‌شود. خواندن این فایل داده‌های فشرده نشده را نمایش می‌دهد. داده‌های نوشته شده روی این فایل پیش از ذخیره شدن بر روی دیسک، فشرده می‌شود.بله، توضیحات را بخوانید
Dوقتی یک دایرکتوری با خصیصه‌ی D تغییر کند، تغییرات به صورت همزمان روی دیسک نوشته می‌شود، این رفتار معادل این است که ماونت آپشن dirsync بر روی فایل‌ها اعمال شود.بله
dفایلی که خصیصه d را داشته باشد، موقع پشتیبان‌گیری با برنامه dump نادیده گرفته خواهد شد.بله
Eخصیصه E توسط پچ‌های آزمایشی فشرده‌سازی استفاده می‌شوند برای اینکه اعلان کنند فایل فشرده‌ شده‌ خطایی در فشرده‌سازی دارد.خیر
eاین خصیصه بیانگر این است که فایل برای نگاشت بلوک‌های دیسک از extents استفاده می‌کند.خیر
Iخصیصه I توسط کد htree برای بیان اینکه یک دایرکتوری در حال ایندکس شدن با درخت‌های هش است، به کار می‌رود.خیر
iوقتی فایلی خصیصه i را داشته باشد، قابل تغییر نیست: نمی‌توان آن را حذف کرد، تغییر نام داد یا لینکی به آن ایجاد کرد و هیچ داده‌ای بر روی آن نمی‌توان نوشت.بله، فقط توسط کاربر ریشه
jفایل با خصیصه j باعث می‌شود اگر فایل سیستم با آپشن data=ordered یا data=writeback ماونت شده باشند، همه‌ی داده‌ها پیش از نوشته شدن بر روی خود فایل بر روی ژورنال (ext3) نوشته شوند، اگر فایل سیستم قبلا با آپشن data=journal ماونت شده باشد این مکانیزم به صورت پیش‌فرض اتفاق می‌افتد و این خصیصه بی‌اثر خواهد بود.بله، فقط توسط کاربر ریشه
sوقتی فایلی با خصیصه s حذف شود، بلوک‌های آن صفر می‌شود و بر روی دیسک نوشته می‌شود. این خصیصه برای حذف ایمن فایل‌ها بدون امکان بازگشت مفید است.بله، توضیحات را بخوانید
Sوقتی فایلی با خصیصه S تغییر کند، تغییرات به صورت همزمان روی دیسک نوشته می‌شوند، این معادل آپشن ماونت sync است که به فایل‌ها اعمال می‌شود.بله
Tوجود خصیصه T بر یک دایرکتوری، یک راهنمایی به تخصیصگر بلوک است که در ext3 و ext4 استفاده می‌شود تا اعلام کند زیردایرکتوری‌ها این دایرکتوری بهم مرتبط نیستند و بنابراین، باید برای دسترسی سریعتر پخش شوند. به عنوان مثال، این ایده‌ی خیلی خوبی است که خصیصه T را به دایرکتوری ‎/home اعمال کنید، تا زیردایرکتوری‌های ‎/home/john و ‎/home/mary در بلوک‌های جداگانه‌ای ذخیره شوند. در صورت عدم وجود این خصیصه، تخصیصگر بلوک Orlov سعی خواهد کرد زیردایرکتوری‌ها را تا حد امکان در بلوک‌های نزدیک بهم قرار دهد.بله
tفایلی با خصیصه t بخش بلوک ناقص (partial block gragment) را در انتهای خود جایی که به فایل دیگری پیوسته باشد، ندارد (این برای فایل سیستم‌هایی است که از پیوستگی-انتها (tail-merging) پشتیبانی می‌کنند). این برای برنامه‌هایی مثل LILO لازم است که مستقیما فایل سیستم را می‌خوانند و پیوستگی-انتها را متوجه نمی‌شوند. نکته: تا این زمان، فایل سیستم‌های ext3 و ext2 هنوز (بجز در پچ‌های آزمایشی) از پیوستگی-انتها پشتیبانی نمی‌کنند.بله
uوقتی فایلی با خصیصه u حذف می‌شود، محتویاتش باقی می‌ماند. این خصیصه اجازه می‌دهد که کاربر بتواند فایل‌هایش را پس از حذف شدن برگرداند.بله، توضیحات را بخوانید
Xخصیصه X توسط پچ‌های فشرده‌سازی آزمایشی استفاده می‌شود تا بیان کند که محتویات خام یک فایل فشرده‌شده به طور مستقیم می‌تواند خوانده شود.خیر
Zخصیصه Z توسط پچ‌های فشرده‌سازی آزمایشی استفاده می‌شود تا بیان کند که فایل فشرده‌شده اصطلاحا «کثیف» است.خیر

توضیحات:

  • خصیصه‌های c‏، s و u در فایل‌ سیستم‌های ext2 و ext3 در نسخه‌‌های فعلی کرنل لینوکس فعلی، پیاده‌سازی نشده‌اند. این خصیصه‌ها در نسخه‌های آتی فایل سیستم‌های ext2 و ext3 پیاده‌سازی خواهند شد.
  • آپشن j فقط زمانی مفید است که فایل سیستم به حالت ext3 ماونت شده باشد.
  • آپشن D فقط بر روی کرنل‌های لینوکس ۲.۵.۱۹ و بعد از آن مفید است.
  • حدف کردن و یا اعمال کردن خصیصه‌های a‏، i  فقط توسط کاربر ریشه یا پروسه‌ای که خصیصه CAP_LINUX_IMMUTABLE را داشته باشد امکان پذیر است.
  • حذف کردن و یا اعمال خصیصه‌ی j نیز توسط کاربر ریشه یا پروسه‌ای که خصیصه CAP_SYS_RESOURCE را داشته باشدمیسر است.

اعمال یا حذف کردن خصیصه‌های قابل اعمال با chattr بسیار ساده است. بعنوان مثال برای تغییر ناپذیر کردن دستور ls کافی است وارد کنیم:


chattr +i /bin/ls

حذف کردن این خصیصه نیز به راحتی عوض کردن علامت + با علامت – در دستور بالاست:


chattr -i /bin/ls

خب خسته نباشید. این مطلب هم به پایان رسید. نظراتتون رو همین پایین مطرح کنید. 🙂

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

  • کتاب ubuntu linux toolbox تالیف آقایان Christopher Negus و François Caen از انتشارات Wiely

بررسی راهکارهای پیاده‌سازی یک رابط وب برای ابزار‌های سیستمی

این مقاله را در دومین همایش سراسری نرم افزارهای آزاد/متن باز که ۱۷ و ۱۸ ام شهریور ماه امسال در زنجان برگزار شد ارائه کردم.

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

سورس راهکارهایی که در این مقاله بررسی شده‌اند، به زبان perl موجود است. البته راهکارهای گروه «الف» اکثرا با ایجاد تغییر در پیکربندی سیستم اجرا می‌شوند، با این حال من در یک ماشین مجازی آن‌ها را بررسی کرده و صحت اجرای آن‌ها را تضمین می‌کنم. راهکارهای گروه «ب» نیز پیاده‌سازی شده اند و به خوبی راهکارهای گروه اول عمل می‌کنند.

سورس‌ها را باید کمی اصلاح و ویرایش کنم پس آن‌ها را بسته به میزان درخواست شما  و اینکه زمان کافی برای اصلاح آن‌ها پیدا کنم، (به زودی؟) آپلود خواهم کرد.

فایل فشرده حاوی: اسلاید، سورس odt مقاله و خروجی pdf با حجم ۱.۷ مگابایت.

implementing web interface for administrative tools

"1421" مرتبه دانلود شده

tty و pts چیستند

خب راهنماهای مفصل و پرتوضیحاتی در مورد این دو مفهوم وجود دارد. یکی از مواردی که ممکن است به این دو مفهوم برخورد کنید، دستور who هستش. در اینجا با کمترین توضیحات ضمن تعریف این دو مفهوم، تفاوتشان بیان می‌شود.

تعریف tty

tty در گذشته به teletypewriter ها گفته می‌شد و امروز به هر ترمینالی در سیستم‌های لینوکس/یونیکس اطلاق می‌شود.

تعریف PTS

سرواژه‌ی عبارت pseudo terminal slave است.

تفاوت PTS با TTY

تفاوت بین TTY و PTS به نوع اتصالشان به کامپیوتر برمی‌گردد. پورت‌های TTY اتصال مستقیم به کامپیوتر هستند مثل صفحه کلید، ماوس یا هر وسیله‌ای با ارتباط سریال. اتصالات PTS ارتباطاتی از نوع SSH یا telnet هستند. همه‌ی این نوع اتصالات می‌توانند به shell وصل شوند و به کاربر اجازه دهند با کامپیوتر کار کند.

منبع

تفاوت real user id و effective user id

برای توضیح این تفاوت لازم است کمی به عمق سیستم عامل‌های شبه یونیکس بروم. در کرنل به دلیل نیاز به سرعت و کارآیی بالا از ساختارهای داده‌ای (تا حد امکان) ساده استفاده می‌شود. به همین دلیل است که به جای نام‌ها و گروه‌های کاربری (user /group) از یک متغییر منحصربفرد از نوع unsigned interger استفاده می‌شود که یک عدد است. مشخصا کارکردن با اعداد سریعتر از کارکردن با رشته‌ها (string) است. user ها و groupها بر اساس فایل‌های etc/passwd/ و etc/group/ به شناسه‌ی انحصاری خودشان (user id/ group id) مرتبط می‌شوند. به عنوان مثال، عدد صفر (۰) مشخص کننده‌ی user id و group id کاربر ریشه (root) است.

این user id/ group id در پروسه‌ها نیز وجود دارد. کرنل بر اساس همین user id/group id تصمیم می‌گیرد که پروسه به چه منابعی دسترسی داشته باشد. اغلب منظور از user id/group id  همان effective user id/ effective group id است. پس به طور ساده می‌توان گفت که EUID/EGID تعیین کننده‌ی دسترسی پروسه به منابع سیستم است.

ابزار passwd را در نظر بگیرید. این ابزاری است که برای تنظیم رمزعبور کاربران استفاده می‌شود. این ابزار فایل etc/passwd/ را مورد دسترسی قرار می‌دهد. هر کاربری این دستور را اجرا کند می‌تواند رمزعبور خودش را تغییر دهد. ولی چطور برنامه تشخیص می‌دهد که چه کسی آن را اجرا کرده؟ به کمک effective UID/ effective GID فقط می‌توان گفت که دسترسی به فایل passwd وجود داشته باشد یا خیر. اینجاست که جفت دیگر user id/ group id مطرح می‌شوند که به آن real user id/read group id گفته می‌شود. این دو پارامتر پروسه‌، مشخص می‌کنند که کاربر اجرا کننده‌ی پروسه با چه حساب کاربری لوگین کرده است. پس کافیست برنامه این مشخصات را درخواست کند تا بتواند به درستی عمل کند.

معمولا effective user id/effective group id با جفت‌های real user id/real group id یکی هستند. موضوع وقتی جالب می‌شود که یک برنامه‌ی setuid دار را اجرا کنید. فرض کنید به حساب کاربری خودتان که user id آن ۵۰۰ است وارد شده اید. حالا برنامه‌ای که setuid root دارد اجرا می‌کنید. بخاطر وجود setuid root سیستم عامل effective user ID پروسه را به root (معادل صفر) تغییر می‌دهد. ولی real user id همچنان ۵۰۰ می‌ماند. به این ترتیب برنامه همچنان هویت کسی که آن را اجرا کرده می‌شناسد و می‌تواند به فایل‌ها و سایر منابع با مجوز کاربر ریشه دسترسی داشته باشد.

برگرفته از Real and Effective IDs با تصرف و تلخیص

———————————————

ظاهرا این مقاله‌ چندان گویا نبوده است. پس تصمیم گرفتم مساله رو کمی بیشتر شفاف کنم:

effective UID / effective GID روی ساختن و دسترسی به فایل تاثیر می‌گذارند. موقع ساخته شدن فایل، کرنل ویژگی owner (مالک) فایل را بر اساس effective UID و effective GID پروسه‌ی سازنده‌ی فایل تنظیم می‌کند. یعنی اگر آن effective UID پروسه root بود، مالک فایل root می‌شود. همچنین موقع دسترسی به فایل (مثلا خواندن/نوشتن یا اجرا کردن) کرنل از effective UID و effective GID پروسه برای تشخیص امکان دسترسی به فایل استفاده می‌کند.

پس کاربرد effective UID منحصر به تعیین دسترسی به منابع است. (accessing to resouces)

از طرف دیگر real UID/ real GID برای تشخیص اجرا کننده‌ی پروسه استفاده می‌شود. این مثلا در مجوز‌های ارسال سیگنال تاثیر گذار است. همانطور که می‌دانیم پروسه‌ای که از طرف کاربر root اجرا نشده باشد، فقط در شرایطی می‌تواند به پروسه‌ای دیگر سیگنال ارسال کند که real UID آن پروسه با real UID خودش یکی باشد.

پس کاربرد real UID منحصر به تشخیص کاربر اجرا کننده‌ی پروسه است. (process owner)

چند نکته کاربردی:

real UID: این UID پروسه/کاربر است که تعیین می‌کند چه کسی پروسه را بوجود آورده است. این مقدار فقط وقتی قابل تغییر است که EUID پروسه برابر با صفر باشد.

effective UID: این uid برای تعیین دسترسی پروسه برای اجرای اعمال خاصی استفاده می‌شود. euid می‌تواند به RUID یا SUID تغییر داده شود (در حالتیکه euid برابر با صفر نباشد، اگر euid برابر با صفر باشد می‌تواند به هر چیزی تغییر داده شود!)

Saved UID: اگر بیت set-UID فایل باینری که اجرا شده فعال باشد، SUID با UID مالک فایل یکی خواهد بود. در غیر اینصورت SUID با RUID یکی است.

نکته: set-UID مجوزی است که بر روی فایل‌های باینری فعال می‌شود (به کمک دستور chmod) که Saved UID را تحت تاثیر قرار می‌دهد، این را نباید با setuid که تابعی در زبان‌های برنامه‌نویسی است اشتباه گرفت. این تابع effective UID را تغییر می‌دهد.

منابع:

what i learned 2day

allexperts.com