جلسه 9 مجوزهای فایل ها و نحوه کار با فرامین chmod ،umask ،chattr
مفاهیم پایه مجوزهای فایل
۱. چرا مجوزهای فایل مهم هستند؟
- امنیت: جلوگیری از دسترسی غیرمجاز به اطلاعات حساس.
- مدیریت دسترسی: تعیین اینکه چه کسی (مالک، گروه، دیگران) میتواند چه عملیاتی (خواندن، نوشتن، اجرا) را روی فایل انجام دهد.
- پایداری سیستم: اطمینان از اینکه فایلهای سیستمی مهم به اشتباه تغییر نکرده یا حذف نمیشوند.
۲. انواع دسترسی:
- خواندن (Read - r): امکان مشاهده محتوای فایل یا لیست کردن فایلهای درون دایرکتوری.
- نوشتن (Write - w): امکان تغییر محتوای فایل یا ایجاد/حذف فایلها در دایرکتوری.
- اجرا (Execute - x): امکان اجرای فایل (اگر یک اسکریپت یا برنامه باشد) یا ورود به دایرکتوری.
۳. انواع کاربران:
- مالک (Owner - u): کاربری که فایل را ایجاد کرده است.
- گروه (Group - g): گروهی از کاربران که به طور خاص برای دسترسی به این فایل تعریف شدهاند.
- دیگران (Others - o): همه کاربرانی که نه مالک هستند و نه در گروه تعریف شدهاند.
۴. نمایش مجوزها:
مجوزهای فایلها معمولاً با استفاده از یک رشته ۱۰ کاراکتری نمایش داده میشوند.
- کاراکتر اول: نوع فایل (
-برای فایل عادی،dبرای دایرکتوری،lبرای لینک نمادین و غیره). - سه کاراکتر بعدی: مجوزهای مالک (
rwx). - سه کاراکتر بعدی: مجوزهای گروه (
rwx). - سه کاراکتر آخر: مجوزهای دیگران (
rwx).
مثال:
-rwxr-xr--
-: فایل عادی است.rwx: مالک میتواند بخواند، بنویسد و اجرا کند.r-x: گروه میتواند بخواند و اجرا کند، اما نمیتواند بنویسد.r--: دیگران فقط میتوانند بخوانند.
بخش دوم: دستور chmod (تغییر مجوزها)
دستور chmod برای تغییر مجوزهای فایلها و دایرکتوریها استفاده میشود. دو روش اصلی برای استفاده از آن وجود دارد:
۱. حالت نمادین (Symbolic Mode):
با استفاده از حروف u (owner), g (group), o (others), a (all) و عملگرهای + (اضافه کردن)، - (حذف کردن)، = (تنظیم دقیق) همراه با مجوزهای r, w, x.
مثالها:
chmod u+x file.txt: به مالک اجازه اجرا میدهد.chmod g-w file.txt: مجوز نوشتن را از گروه حذف میکند.chmod o=r file.txt: مجوزهای دیگران را فقط به خواندن محدود میکند.chmod a+r directory/: مجوز خواندن را برای همه اضافه میکند.chmod ug+wx file.txt: مجوزهای نوشتن و اجرا را برای مالک و گروه اضافه میکند.
۲. حالت عددی (Octal Mode):
هر مجوز (r, w, x) یک مقدار عددی دارد:
r= 4w= 2x= 1
با جمع این مقادیر برای هر دسته از کاربران (مالک، گروه، دیگران) یک عدد سهرقمی به دست میآید.
rwx= 4 + 2 + 1 = 7rw-= 4 + 2 = 6r-x= 4 + 1 = 5r--= 4
مثالها:
chmod 755 script.sh: مالک (rwx=7)، گروه (r-x=5)، دیگران (r-x=5). این مجوز رایج برای اسکریپتهای اجرایی است.chmod 644 data.txt: مالک (rw=6)، گروه (r=4)، دیگران (r=4). این مجوز رایج برای فایلهای داده است.chmod 700 private_dir/: مالک (rwx=7)، گروه (—=0)، دیگران (—=0). دسترسی کامل فقط برای مالک.
نکته: برای تغییر مجوزهای یک دایرکتوری و تمام محتویات آن به صورت بازگشتی، از آپشن -R استفاده کنید: chmod -R 755 my_project/.
بخش سوم: دستور umask (ماسک ایجاد مجوز)
دستور umask تعیین میکند که هنگام ایجاد یک فایل یا دایرکتوری جدید، کدام مجوزها به طور پیشفرض حذف شوند.
- حداکثر مجوزهای ممکن برای فایلها:
666(rw-rw-rw-) - فایلها قابلیت اجرا ندارند مگر اینکه به طور صریح اضافه شود. - حداکثر مجوزهای ممکن برای دایرکتوریها:
777(rwxrwxrwx).
umask به صورت عددی عمل میکند و مقادیر آن از حداکثر مجوزهای ممکن کم میشود.
مثال:
اگر
umaskبرابر022باشد:
برای فایل جدید:
666 - 022 = 644(rw-r--r--). یعنی مالک خواندن/نوشتن، گروه خواندن، دیگران خواندن.
برای دایرکتوری جدید:
777 - 022 = 755(rwxr-xr-x). یعنی مالک خواندن/نوشتن/اجرا، گروه خواندن/اجرا، دیگران خواندن/اجرا.
اگر
umaskبرابر002باشد:
برای فایل جدید:
666 - 002 = 664(rw-rw-r--).
برای دایرکتوری جدید:
777 - 002 = 775(rwxrwxr-x).
برای مشاهده مقدار umask فعلی، کافیست دستور umask را بدون آرگومان اجرا کنید. برای تغییر موقت آن در طول یک نشست ترمینال، از umask <مقدار عددی> استفاده کنید. تغییرات دائمی معمولاً در فایلهای تنظیمات پروفایل کاربر (مانند .bashrc یا .profile) انجام میشود.
بخش چهارم: دستور chattr (ویژگیهای پیشرفته فایل)
دستور chattr (change attribute) امکان تنظیم ویژگیهای پیشرفتهتری را برای فایلها فراهم میکند که فراتر از مجوزهای دسترسی استاندارد هستند. این ویژگیها میتوانند از حذف تصادفی فایلها جلوگیری کرده یا دسترسی نوشتن را حتی برای کاربر root محدود کنند.
برخی ویژگیهای مهم:
i(immutable): فایل را غیرقابل تغییر میکند. حتی کاربر root هم نمیتواند آن را حذف، تغییر نام دهد، ویرایش کند یا لینک جدیدی به آن ایجاد کند. برای تغییر این ویژگی، ابتدا باید آن را باchattr -iحذف کنید.a(append-only): به فایل فقط میتوان اضافه کرد. امکان بازنویسی یا حذف محتوای موجود وجود ندارد. این ویژگی برای فایلهای لاگ بسیار مفید است.
مثالها:
sudo chattr +i important_config.conf: فایلimportant_config.confرا غیرقابل تغییر میکند.sudo chattr -i important_config.conf: ویژگی immutable را از فایل حذف میکند.sudo chattr +a access.log: به فایلaccess.logفقط میتوان داده اضافه کرد.
نکته: برای استفاده از chattr معمولاً نیاز به دسترسی root (sudo) دارید. برای مشاهده ویژگیهای تنظیم شده برای یک فایل، از دستور lsattr استفاده کنید.
خلاصه نکات کلیدی:
- مجوزها: دسترسی خواندن (
r)، نوشتن (w)، و اجرا (x) برای سه دسته کاربر: مالک (u)، گروه (g)، و دیگران (o). - نمایش مجوزها: رشته ۱۰ کاراکتری (نوع فایل +
rwxبرایugo). chmod: تغییر مجوزها با استفاده از حالت نمادین (مثلاًu+x) یا عددی (مثلاً755).umask: تعیین مجوزهای پیشفرض حذف شده هنگام ایجاد فایل/دایرکتوری جدید. مقدارumaskاز مجوزهای حداکثر (666 برای فایل، 777 برای دایرکتوری) کم میشود.chattr: تنظیم ویژگیهای پیشرفته فایل مانندimmutable(+i) وappend-only(+a) که فراتر از مجوزهای استاندارد عمل میکنند.lsattr: نمایش ویژگیهای پیشرفته فایل.
تمرین پایان فصل:
۱. یک فایل متنی به نام my_notes.txt ایجاد کنید. با استفاده از دستور ls -l مجوزهای پیشفرض آن را بررسی کنید. مقدار umask سیستم خود را پیدا کنید و توضیح دهید چرا این مجوزها برای فایل تنظیم شدهاند.
۲. فرض کنید فایل my_notes.txt متعلق به شماست. میخواهید کاری کنید که:
- شما بتوانید آن را بخوانید، بنویسید و اجرا کنید (اگرچه فایل متنی است).
- اعضای گروه شما بتوانند آن را بخوانند و اجرا کنند.
- دیگران فقط بتوانند آن را بخوانند.
از دستور chmod با هر دو حالت نمادین و عددی برای اعمال این مجوزها استفاده کنید و نتیجه را با ls -l نمایش دهید.
۳. یک دایرکتوری به نام project_files ایجاد کنید. میخواهید فقط شما (به عنوان مالک) بتوانید وارد این دایرکتوری شوید، فایلها را ببینید، ایجاد کنید و حذف کنید. هیچکس دیگری نباید بتواند به آن دسترسی داشته باشد. مجوزهای لازم را با chmod تنظیم کنید.
۴. فایل important_document.docx را دارید. میخواهید مطمئن شوید که هیچکس، حتی خودتان به اشتباه، آن را حذف یا ویرایش نمیکند تا زمانی که خودتان این ویژگی را غیرفعال کنید. از دستور chattr برای این منظور استفاده کنید. سپس سعی کنید فایل را حذف کنید (باید با خطا مواجه شوید). در نهایت، ویژگی را غیرفعال کنید.
۵. یک فایل لاگ به نام system.log ایجاد کنید. میخواهید مطمئن شوید که به محتوای فعلی آن دست نمیخورد، اما برنامهها میتوانند به انتهای آن داده اضافه کنند. از chattr برای تنظیم این ویژگی استفاده کنید.