پرش به محتویات

104.5 - مدیریت مجوزها و مالکیت فایل‌ها

اهداف یادگیری

در این درس با موارد زیر آشنا می‌شوید:

  • مدیریت مجوزهای دسترسی برای فایل‌ها و دایرکتوری‌ها
  • استفاده از حالت‌های ویژه (suid, sgid, sticky) و اثرات آنها
  • تنظیم umask و تفاوت‌ها در زمان ایجاد فایل/دایرکتوری
  • کار با مالکیت فایل (chown, chgrp) و لینک‌ها (سخت/نرم)

کلیدواژه‌ها

chmod, chown, chgrp, umask, ln, unlink, suid, sgid, sticky, find, stat


کاربران، گروه‌ها و ساختار فایل

هر فایل در لینوکس متعلق به یک کاربر و یک گروه است و دارای سه مجموعهٔ مجوز برای: مالک، گروه و بقیهٔ کاربران می‌باشد. با ls -l می‌توانید نوع و مجوزها را ببینید:

$ ls -l script.sh
-rwxr-xr-x 1 jadi adm 34 Mar  5 13:38 script.sh

در این مثال، مالک (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 انجام می‌شود:

sudo chown root:root newfile
sudo chgrp postgres newfile

برای افزودن کاربر به گروه از 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 مشخص می‌شود:

$ ls -ld /tmp
drwxrwxrwt 13 root root 77824 Feb  8 21:27 /tmp

هشدار امنیتی

قرار دادن بیت suid روی برنامه‌های بزرگ یا پیچیده می‌تواند تهدید امنیتی ایجاد کند؛ مهاجمانی که از باگ‌هایی در برنامه سوءاستفاده کنند، ممکن است دسترسی ریشه کسب کنند. فقط به برنامه‌هایی که واقعا نیاز دارند suid بدهید و بررسی امنیتی انجام دهید.


umask — پیش‌فرض مجوز فایل‌های جدید

umask مشخص می‌کند چه مجوزهایی هنگام ساخت فایل و دایرکتوری از دست برود. مقدار پیش‌فرض معمولی 0002 است که باعث می‌شود فایل‌های جدید 664 و دایرکتوری‌ها 775 داشته باشند.

نمونهٔ استفاده:

$ umask 002
$ touch newfile    # -rw-rw-r--
$ mkdir newdir      # drwxrwxr-x

نکته

برای تنظیم دائم umask می‌توانید آن را در ~/.profile یا ~/.bashrc قرار دهید، اما توجه کنید که محیط‌های مختلف (login vs non-login) ممکن است فایل‌های متفاوتی بخوانند.


لینک سخت (hard) اشاره به inode می‌دهد و نمی‌توان برای دایرکتوری‌ها ایجادش کرد؛ لینک نمادین (symlink) به نام مسیر اشاره می‌کند و می‌تواند از فایل‌سیستم عبور کند:

ln new_file hard_link
ln -s new_file soft_link

اگر فایل اصلی حذف شود، hard link همچنان آن را نگه می‌دارد اما symlink به فایل معیوب تبدیل می‌شود.


ابزارهای کمکی و بررسی

  • id, groups, getent passwd|group برای بررسی کاربر و گروه
  • find / -perm -u+s برای پیدا کردن فایل‌های suid
  • stat file برای دیدن جزئیات inode و مجوزها
  • ls -l, ls -ld برای مشاهدهٔ مجوزها و مالکیت

تمرین‌ها

  1. یک فایل بسازید، umask را به 077 تغییر دهید و فایل جدید بسازید؛ خروجی مجوزها را بررسی کنید.
  2. با find فایل‌هایی که suid یا sgid دارند پیدا کرده و برای هر کدام بررسی کنید آیا واقعا باید این بیت‌ها را داشته باشند.

خلاصه

مدیریت صحیح مجوزها و مالکیت‌ها پایهٔ امنیت سیستم است؛ از suid/sgid با احتیاط استفاده کنید، umask را مطابق نیاز محیط تنظیم کنید، و همیشه با ابزارهایی مثل find و stat وضعیت فایل‌ها را بررسی کنید.

نکات کلیدی برای آزمون

  • سه دستهٔ دسترسی: مالک، گروه، سایرین
  • معانی بیت‌های ویژه: suid (4000), sgid (2000), sticky (1000)
  • روش‌های تغییر: chmod (عدد/نمادین), chown, chgrp
  • umask تعیین‌کنندهٔ مجوز پیش‌فرض فایل‌های جدید است
  • پیدا کردن فایل‌های SUID: find / -perm -u+s