مقدمه

اکنون که می‌دانیم چگونه کاربران و گروه‌ها را در سیستم ایجاد کنیم، به مهم‌ترین سؤال در مدیریت سیستم می‌رسیم: چگونه کنترل کنیم که این کاربران و گروه‌ها به چه فایل‌ها و دایرکتوری‌هایی دسترسی داشته باشند و چه کارهایی بتوانند با آن‌ها انجام دهند؟ پاسخ این سؤال در سیستم مجوزها (Permissions) لینوکس نهفته است.

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

درک رشته‌ی مجوزها

همانطور که قبلاً در خروجی دستور ls -l دیده‌ایم، هر خط با یک رشته‌ی ۱۰ کاراکتری شروع می‌شود. این رشته، تمام اطلاعات مربوط به نوع فایل و مجوزهای آن را در خود جای داده است.

-rwxr-xr-- 1 me developers 150 Jul 22 10:40 script.sh

بیایید این رشته (-rwxr-xr--) را کالبدشکافی کنیم:

  • کاراکتر اول: نوع فایل. یک خط تیره (-) به معنای فایل عادی، d به معنای دایرکتوری و l به معنای لینک نمادین (symbolic link) است.
  • سه کاراکتر بعدی (rwx): مجوزهای مالک فایل (User). در این مثال، کاربر me مجوز خواندن، نوشتن و اجرا را دارد.
  • سه کاراکتر وسط (r-x): مجوزهای گروه مالک (Group). در این مثال، اعضای گروه developers مجوز خواندن و اجرا را دارند، اما مجوز نوشتن (w) را ندارند (با خط تیره نمایش داده شده).
  • سه کاراکتر آخر (r--): مجوزهای دیگران (Others). تمام کاربران دیگر فقط مجوز خواندن را دارند.

معنی خواندن، نوشتن و اجرا (r, w, x)

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

مجوز برای یک فایل برای یک دایرکتوری
r (Read) می‌توان محتوای فایل را خواند (مثلاً با cat). می‌توان لیست محتویات دایرکتوری را دید (مثلاً با ls).
w (Write) می‌توان محتوای فایل را تغییر داد یا آن را حذف کرد. می‌توان در دایرکتوری فایل جدید ساخت، حذف کرد یا نام فایل‌ها را تغییر داد.
x (Execute) می‌توان فایل را به عنوان یک برنامه یا اسکریپت اجرا کرد. می‌توان وارد دایرکتوری شد (مثلاً با cd).

تغییر مجوزها با chmod

دستور chmod (مخفف change mode) برای تغییر مجوزهای دسترسی یک فایل یا دایرکتوری استفاده می‌شود. دو روش اصلی برای استفاده از این دستور وجود دارد: روش نمادین و روش عددی.

روش نمادین (Symbolic Mode)

این روش خواناتر و برای شروع ساده‌تر است. ساختار کلی آن به شکل chmod who[+,-,=]permission است.

  • Who (چه کسی): u (کاربر مالک)، g (گروه)، o (دیگران)، a (همه).
  • Operator (عملگر): + (افزودن مجوز)، - (حذف مجوز)، = (تخصیص دقیق مجوز).
  • Permission (مجوز): r، w، x.

چند مثال:

# به گروه، مجوز نوشتن روی فایل را بده
$ chmod g+w shared_file.txt

# از دیگران، مجوز خواندن را بگیر
$ chmod o-r secret_file.txt

# به کاربر مالک و گروه، مجوز اجرا برای اسکریپت را بده
$ chmod ug+x my_script.sh

روش عددی (Octal Mode)

این روش سریع‌تر است و به طور گسترده توسط مدیران سیستم استفاده می‌شود. در این روش، هر مجوز یک مقدار عددی دارد:

  • r (خواندن) = 4
  • w (نوشتن) = 2
  • x (اجرا) = 1

برای هر دسته (کاربر، گروه، دیگران)، اعداد مجوزهای مورد نظر را با هم جمع می‌کنیم. برای مثال، مجوز rwx برابر است با 4+2+1=7 و مجوز r-x برابر است با 4+1=5. سپس سه عدد به دست آمده را کنار هم قرار می‌دهیم.

عدد مجوز توضیح
7 (4+2+1) rwx خواندن، نوشتن و اجرا
6 (4+2) rw- خواندن و نوشتن
5 (4+1) r-x خواندن و اجرا
4 (4) r-- فقط خواندن

چند مثال از مجوزهای رایج:

# rwxr-xr-x: مجوزی استاندارد برای فایل‌های اجرایی و دایرکتوری‌ها
$ chmod 755 my_script.sh

# rw-r--r--: مجوزی استاندارد برای فایل‌های متنی عادی
$ chmod 644 document.txt

# rw-rw----: مجوزی مناسب برای یک فایل اشتراکی بین اعضای یک گروه
$ chmod 660 collaborative_file.txt

تغییر مالکیت با chown

گاهی اوقات لازم است مالکیت یک فایل را به کاربر یا گروه دیگری منتقل کنیم. این کار با دستور chown (مخفف change owner) و با دسترسی sudo انجام می‌شود.

ساختار کلی این دستور به شکل chown user:group filename است.

# تغییر مالک فایل به کاربر علی
$ sudo chown ali somefile.txt

# تغییر مالکیت کاربر و گروه فایل به صورت همزمان
$ sudo chown ali:developers project_plan.txt

# تغییر مالکیت یک دایرکتوری و تمام محتویات آن به صورت بازگشتی
$ sudo chown -R ali:developers /srv/project_data

برای تغییر فقط گروه یک فایل، می‌توان از دستور chgrp نیز استفاده کرد (chgrp developers a_file.txt).