EN

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

راهنمای جامع کاربران، گروه‌ها و دسترسی‌ها

۲۰ خرداد ۱۴۰۲  |  زمان مطالعه: ۲۰ دقیقه

مدیریت مجوزها (Permissions) یکی از پایه‌ترین و مهم‌ترین موضوعات در امنیت و مدیریت سیستم‌عامل لینوکس است. در لینوکس، هر فایل و دایرکتوری دارای یک مالک، یک گروه و مجموعه‌ای از مجوزها است که مشخص می‌کند چه کسی می‌تواند آن را بخواند، تغییر دهد یا اجرا کند. این مقاله به صورت گام‌به‌گام و با زبانی ساده، شما را با مفاهیم و دستورات مدیریت مجوزها آشنا می‌کند.

پیش‌نیاز: آشنایی با محیط ترمینال و دستورات پایه مانند ls و cd کافی است.

۱. مفاهیم پایه: کاربر، گروه و دیگران

در لینوکس، دسترسی به فایل‌ها بر اساس سه سطح تعریف می‌شود:

  • مالک (User / Owner): کاربری که فایل را ایجاد کرده است. معمولاً مالک بیشترین دسترسی را دارد.
  • گروه (Group): مجموعه‌ای از کاربران که به یک گروه تعلق دارند. اعضای گروه می‌توانند دسترسی‌های مشخصی داشته باشند.
  • دیگران (Others): همه کاربران دیگر که نه مالک هستند و نه عضو گروه.

برای هر یک از این سه سطح، سه نوع مجوز تعریف می‌شود: خواندن (Read)، نوشتن (Write) و اجرا (Execute).

۲. مشاهده مجوزها با دستور ls -l

با استفاده از ls -l می‌توانید مجوزهای فایل‌ها و دایرکتوری‌ها را مشاهده کنید:

ls -l

خروجی این دستور به این شکل است:

-rwxr-xr-- 1 user group 1024 May 20 10:00 file.txt

در اینجا، رشته -rwxr-xr-- نشان‌دهنده مجوزها است. این رشته به بخش‌های زیر تقسیم می‌شود:

  • نویسه اول: نوع فایل را مشخص می‌کند (- برای فایل معمولی، d برای دایرکتوری).
  • سه نویسه بعدی: مجوزهای مالک (rwx یعنی خواندن، نوشتن و اجرا).
  • سه نویسه بعدی: مجوزهای گروه (r-x یعنی خواندن و اجرا، اما نه نوشتن).
  • سه نویسه آخر: مجوزهای دیگران (r-- یعنی فقط خواندن).

۳. تغییر مجوزها با دستور chmod

chmod (Change Mode) دستوری برای تغییر مجوزهای فایل‌ها و دایرکتوری‌ها است. دو روش اصلی برای استفاده از chmod وجود دارد: روش عددی (Octal) و روش سمبلیک (Symbolic).

روش عددی (Octal)

در این روش، هر مجوز با یک عدد نشان داده می‌شود:

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

اعداد برای هر سطح (مالک، گروه، دیگران) جمع می‌شوند. مثلاً مجوز rwx برابر با 4+2+1=7 است. مجوز r-x برابر با 4+0+1=5 است.

مجوزعدد
rwx7
rw-6
r-x5
r--4
---0

مثال‌هایی از استفاده:

chmod 755 script.sh
# مالک: 7 (rwx), گروه: 5 (r-x), دیگران: 5 (r-x)
chmod 644 file.txt
# مالک: 6 (rw-), گروه: 4 (r--), دیگران: 4 (r--)

روش سمبلیک (Symbolic)

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

  • u = مالک (user)
  • g = گروه (group)
  • o = دیگران (others)
  • a = همه (all = ugo)
  • + = افزودن مجوز
  • - = حذف مجوز
  • = = تنظیم دقیق مجوز
chmod u+x script.sh
# افزودن مجوز اجرا برای مالک
chmod go-w file.txt
# حذف مجوز نوشتن برای گروه و دیگران
chmod a=r file.txt
# تنظیم مجوز فقط خواندن برای همه
نکته: برای دایرکتوری‌ها، مجوز اجرا (x) به معنای امکان ورود به آن دایرکتوری با دستور cd است.

۴. تغییر مالک با دستور chown

chown (Change Owner) برای تغییر مالک یک فایل یا دایرکتوری استفاده می‌شود. برای اجرای این دستور به مجوز ریشه (root) یا sudo نیاز دارید.

sudo chown new_owner file.txt
# تغییر مالک فایل به new_owner
sudo chown new_owner:new_group file.txt
# تغییر همزمان مالک و گروه

۵. تغییر گروه با دستور chgrp

chgrp (Change Group) برای تغییر گروه یک فایل یا دایرکتوری استفاده می‌شود.

chgrp new_group file.txt
# تغییر گروه فایل به new_group

۶. مجوزهای ویژه: SUID، SGID و Sticky Bit

علاوه بر مجوزهای استاندارد، سه مجوز ویژه در لینوکس وجود دارد که رفتار خاصی دارند.

SUID (Set User ID)

وقتی SUID روی یک فایل اجرایی فعال باشد، آن برنامه با مجوزهای مالک فایل اجرا می‌شود، نه با مجوزهای کاربری که آن را اجرا کرده است. این مجوز با s در جایگاه مجوز اجرای مالک نمایش داده می‌شود.

chmod u+s executable_file

SGID (Set Group ID)

SGID روی فایل‌های اجرایی باعث می‌شود برنامه با مجوزهای گروه فایل اجرا شود. روی دایرکتوری‌ها، باعث می‌شود فایل‌های جدید ایجاد شده در آن دایرکتوری، گروه دایرکتوری را به ارث ببرند.

chmod g+s directory_name

Sticky Bit

Sticky Bit معمولاً روی دایرکتوری‌های اشتراکی مانند /tmp تنظیم می‌شود. وقتی فعال باشد، فقط مالک فایل می‌تواند آن را حذف یا تغییر نام دهد، حتی اگر دیگران مجوز نوشتن داشته باشند.

chmod +t directory_name

نمایش این مجوزها با ls -l:

  • SUID: -rwsr-xr-x
  • SGID: -rwxr-sr-x
  • Sticky Bit: -rwxr-xr-t

۷. ماسک پیش‌فرض مجوزها (umask)

umask (User file-creation mask) تعیین می‌کند که مجوزهای پیش‌فرض برای فایل‌ها و دایرکتوری‌های جدید چگونه باشند. مقدار umask از مجوزهای کامل (۶۶۶ برای فایل‌ها و ۷۷۷ برای دایرکتوری‌ها) کم می‌شود.

umask
# نمایش مقدار فعلی (مثلاً 0022)
umask 0022
# تنظیم umask به 0022

با umask=0022، مجوز پیش‌فرض فایل‌ها 644 (666-022) و دایرکتوری‌ها 755 (777-022) خواهد بود.

۸. مثال‌های کاربردی

مثال ۱: ایجاد یک اسکریپت قابل اجرا

فرض کنید یک فایل اسکریپت به نام backup.sh نوشته‌اید. برای قابل اجرا کردن آن برای مالک:

chmod u+x backup.sh
# یا
chmod 755 backup.sh

مثال ۲: محافظت از یک پوشه شخصی

برای محدود کردن دسترسی به پوشه Private فقط برای مالک:

chmod 700 Private

مثال ۳: تنظیم مجوز برای یک پوشه وب‌سرور

در پوشه /var/www/html، معمولاً نیاز است که وب‌سرور (که با کاربر www-data اجرا می‌شود) بتواند فایل‌ها را بخواند.

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

مثال ۴: تغییر مالک یک فایل برای کاربر دیگر

sudo chown john file.txt
هشدار: تغییر مجوزها با دقت انجام دهید. اعطای مجوزهای بیش از حد (مثلاً 777) می‌تواند امنیت سیستم شما را به خطر بیندازد.

جمع‌بندی و گام‌های بعدی

در این مقاله با مفاهیم و دستورات اصلی مدیریت مجوزها در لینوکس آشنا شدید. اکنون می‌توانید دسترسی فایل‌ها و دایرکتوری‌ها را به دلخواه خود مدیریت کنید. برای پیشرفت بیشتر:

  • با دستور id برای مشاهده گروه‌های کاربری خود آشنا شوید.
  • مفهوم ACL (Access Control Lists) را برای مجوزهای پیشرفته‌تر مطالعه کنید.
  • با دستور umask در فایل‌های پیکربندی مانند ~/.bashrc کار کنید.
  • کتاب «The Linux Command Line» (ترجمه فارسی در کتابخانه لینوکس) را برای یادگیری عمیق‌تر بخوانید.
یادتان باشد: مجوزها یکی از ستون‌های اصلی امنیت لینوکس هستند. با تمرین مداوم، مدیریت آنها برای شما ساده و طبیعی خواهد شد.