104.5 - مدیریت مجوزها و مالکیت فایلها¶
اهداف یادگیری¶
در این درس با موارد زیر آشنا میشوید:
- مدیریت مجوزهای دسترسی برای فایلها و دایرکتوریها
- استفاده از حالتهای ویژه (
suid,sgid,sticky) و اثرات آنها - تنظیم
umaskو تفاوتها در زمان ایجاد فایل/دایرکتوری - کار با مالکیت فایل (
chown,chgrp) و لینکها (سخت/نرم)
کلیدواژهها¶
chmod, chown, chgrp, umask, ln, unlink, suid, sgid, sticky, find, stat
کاربران، گروهها و ساختار فایل¶
هر فایل در لینوکس متعلق به یک کاربر و یک گروه است و دارای سه مجموعهٔ مجوز برای: مالک، گروه و بقیهٔ کاربران میباشد. با ls -l میتوانید نوع و مجوزها را ببینید:
در این مثال، مالک (jadi) دارای rwx و گروه (adm) و سایرین دارای r-x هستند.
تغییر مجوزها — chmod¶
دو روش برای تعیین مجوز وجود دارد: عددی (اوکتال) و نمادین. نمونهٔ عددی 755 معادل rwxr-xr-x است.
نمونه:
sudo chmod 751 myfile # rwx for owner, r-x for group, --x for others
chmod -R o+r /tmp # به همهٔ فایلهای زیر /tmp دسترسی خواندن برای others بده
نکته
برای تغییر بازگشتی از -R استفاده کنید؛ اما احتیاط کنید تا مجوزهای حساس (مثل فایلهای پیکربندی) بهصورت ناخواسته تغییر نکند.
تغییر مالکیت — chown و گروه — chgrp¶
تغییر مالک با chown و تغییر گروه با chgrp انجام میشود:
برای افزودن کاربر به گروه از usermod -aG استفاده کنید (دقت: -G بدون -a گروهها را بازنویسی میکند).
حالتهای ویژه: suid, sgid و sticky¶
- suid (4000): اجرای برنامه با شناسهٔ صاحب فایل (معمولاً root)؛ مثال:
/usr/bin/passwdباید suid باشد تا کاربر بتواند رمز را درshadowتغییر دهد. - sgid (2000): اجرای فایل با شناسهٔ گروه یا ارثبری group برای فایلهای جدید داخل دایرکتوری (مفید برای اشتراک گروهی).
- sticky (1000): جلوگیری از حذف فایل دیگران در دایرکتوریهایی مثل
/tmp، تنها مالک بتواند فایل خود را حذف کند.
نمایش حالتها در ls -l با s و t مشخص میشود:
هشدار امنیتی
قرار دادن بیت suid روی برنامههای بزرگ یا پیچیده میتواند تهدید امنیتی ایجاد کند؛ مهاجمانی که از باگهایی در برنامه سوءاستفاده کنند، ممکن است دسترسی ریشه کسب کنند. فقط به برنامههایی که واقعا نیاز دارند suid بدهید و بررسی امنیتی انجام دهید.
umask — پیشفرض مجوز فایلهای جدید¶
umask مشخص میکند چه مجوزهایی هنگام ساخت فایل و دایرکتوری از دست برود. مقدار پیشفرض معمولی 0002 است که باعث میشود فایلهای جدید 664 و دایرکتوریها 775 داشته باشند.
نمونهٔ استفاده:
نکته
برای تنظیم دائم umask میتوانید آن را در ~/.profile یا ~/.bashrc قرار دهید، اما توجه کنید که محیطهای مختلف (login vs non-login) ممکن است فایلهای متفاوتی بخوانند.
پیوندها (links)¶
لینک سخت (hard) اشاره به inode میدهد و نمیتوان برای دایرکتوریها ایجادش کرد؛ لینک نمادین (symlink) به نام مسیر اشاره میکند و میتواند از فایلسیستم عبور کند:
اگر فایل اصلی حذف شود، hard link همچنان آن را نگه میدارد اما symlink به فایل معیوب تبدیل میشود.
ابزارهای کمکی و بررسی¶
id,groups,getent passwd|groupبرای بررسی کاربر و گروهfind / -perm -u+sبرای پیدا کردن فایلهای suidstat fileبرای دیدن جزئیات inode و مجوزهاls -l,ls -ldبرای مشاهدهٔ مجوزها و مالکیت
تمرینها¶
- یک فایل بسازید،
umaskرا به077تغییر دهید و فایل جدید بسازید؛ خروجی مجوزها را بررسی کنید. - با
findفایلهایی که suid یا sgid دارند پیدا کرده و برای هر کدام بررسی کنید آیا واقعا باید این بیتها را داشته باشند.
خلاصه¶
مدیریت صحیح مجوزها و مالکیتها پایهٔ امنیت سیستم است؛ از suid/sgid با احتیاط استفاده کنید، umask را مطابق نیاز محیط تنظیم کنید، و همیشه با ابزارهایی مثل find و stat وضعیت فایلها را بررسی کنید.
نکات کلیدی برای آزمون
- سه دستهٔ دسترسی: مالک، گروه، سایرین
- معانی بیتهای ویژه: suid (4000), sgid (2000), sticky (1000)
- روشهای تغییر:
chmod(عدد/نمادین),chown,chgrp umaskتعیینکنندهٔ مجوز پیشفرض فایلهای جدید است- پیدا کردن فایلهای SUID:
find / -perm -u+s