# فصل پنجم: مجوزها و مالکیت فایل‌ها در لینوکس

## Linux Permissions & Ownership

در فصل‌های گذشته یاد گرفتیم چگونه فایل‌ها و پوشه‌ها را ایجاد، مشاهده، کپی، انتقال و حذف کنیم.

اما در یک سیستم‌عامل چندکاربره مانند لینوکس، یک سؤال مهم وجود دارد:

چه کسی اجازه دارد یک فایل را بخواند؟
چه کسی می‌تواند آن را تغییر دهد؟
چه کسی اجازه اجرای آن را دارد؟

پاسخ این سؤال‌ها در مفهومی به نام **Permission** یا مجوزها قرار دارد.

سیستم مجوزهای لینوکس یکی از مهم‌ترین بخش‌های امنیت این سیستم‌عامل است و به کمک آن، دسترسی کاربران به منابع کنترل می‌شود.

---

# چرا مجوزها اهمیت دارند؟

تصور کنید یک سرور لینوکسی چندین کاربر دارد.

اگر تمام کاربران بتوانند هر فایلی را تغییر دهند، امنیت سیستم به خطر می‌افتد.

برای مثال:

- یک کاربر نباید بتواند فایل‌های مهم سیستم را حذف کند.
- یک برنامه نباید به اطلاعات خصوصی کاربران دیگر دسترسی داشته باشد.
- فقط مدیر سیستم باید بتواند تنظیمات اصلی را تغییر دهد.

به همین دلیل لینوکس برای هر فایل و پوشه مشخص می‌کند:

- چه کسی مالک آن است.
- چه گروهی به آن دسترسی دارد.
- چه عملیاتی برای هر کاربر مجاز است.

---

# مشاهده مجوزهای فایل‌ها

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

    ls -l

مثال خروجی:

    -rw-r--r-- 1 asa users 1024 notes.txt

در نگاه اول این خروجی ممکن است پیچیده باشد، اما هر بخش معنی خاصی دارد.

---

# ساختار مجوزهای فایل

بخش اول خروجی:

    -rw-r--r--

مجوزهای فایل را نشان می‌دهد.

این بخش به چند قسمت تقسیم می‌شود:

    نوع فایل
    |
    ▼
    -
    
    مالک
    |
    ▼
    rw-

    گروه
    |
    ▼
    r--

    سایر کاربران
    |
    ▼
    r--

ساختار کلی:

    [نوع فایل][User][Group][Others]

---

# نوع فایل

اولین کاراکتر مشخص می‌کند فایل چه نوعی است.

نمونه‌ها:

    -
    
فایل معمولی.

    d

دایرکتوری یا پوشه.

    l

لینک نمادین یا Symbolic Link.

مثال:

    drwxr-xr-x

یعنی این مورد یک پوشه است.

---

# سه نوع دسترسی اصلی

لینوکس سه نوع مجوز اصلی دارد:

## Read (r)

به معنی خواندن است.

برای فایل:

کاربر می‌تواند محتوای فایل را مشاهده کند.

برای پوشه:

کاربر می‌تواند نام فایل‌های داخل پوشه را مشاهده کند.

---

## Write (w)

به معنی نوشتن یا تغییر دادن است.

برای فایل:

کاربر می‌تواند محتویات فایل را تغییر دهد.

برای پوشه:

کاربر می‌تواند ورودی‌های دایرکتوری را ایجاد، تغییر نام یا حذف کند، اما انجام این عملیات معمولاً به مجوز `x` همان دایرکتوری نیز نیاز دارد. حذف یک فایل عمدتاً به مجوزهای دایرکتوری والد وابسته است، نه مجوز `w` خود فایل؛ sticky bit و ACL می‌توانند محدودیت بیشتری ایجاد کنند.

---

## Execute (x)

به معنی اجرا کردن است.

برای فایل:

اجازه اجرای برنامه یا اسکریپت را می‌دهد.

برای پوشه:

اجازهٔ عبور (search/traverse) از پوشه و دسترسی به ورودی‌هایی با نام معلوم را فراهم می‌کند. مشاهدهٔ فهرست نام‌ها به `r` نیاز دارد؛ برای استفادهٔ معمول از فهرست، اغلب هر دو `r` و `x` لازم‌اند.

---

# گروه‌های دسترسی

هر فایل در لینوکس سه دسته کاربر دارد:

## User

مالک فایل.

شخصی که فایل را ایجاد کرده یا مالکیت آن را دارد.

---

## Group

گروهی از کاربران که می‌توانند دسترسی مشخصی به فایل داشته باشند.

---

## Others

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

---

# مثال تحلیل یک فایل

فرض کنید:

    -rwxr-xr--

این مجوز را داریم.

تقسیم آن:

    rwx

مالک:

خواندن، نوشتن، اجرا

    r-x

گروه:

خواندن و اجرا

    r--

سایر کاربران:

فقط خواندن

---

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

برای تغییر مجوز فایل‌ها از دستور:

    chmod

استفاده می‌کنیم.

ساختار:

    chmod permissions filename

مثال:

    chmod +x script.sh

به فایل اجازه اجرا شدن می‌دهد.

---

# روش عددی chmod

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

مقادیر:

    r = 4

    w = 2

    x = 1

اگر چند مجوز با هم ترکیب شوند، مقدار آن‌ها جمع می‌شود.

مثال:

    rw-

محاسبه:

    4 + 2 + 0 = 6

پس:

    rw- = 6

---

# مجوزهای رایج

## 755

    rwxr-xr-x

معمولاً برای برنامه‌ها و پوشه‌ها استفاده می‌شود.

مالک:

خواندن + نوشتن + اجرا

دیگران:

خواندن + اجرا

---

## 644

    rw-r--r--

برای فایل‌های معمولی استفاده می‌شود.

مالک:

خواندن + نوشتن

دیگران:

فقط خواندن

---

## 700

    rwx------

فقط مالک اجازه دسترسی دارد.

برای فایل‌های خصوصی مناسب است.

---

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

برای تغییر مالک یک فایل:

    chown

استفاده می‌شود.

ساختار:

    chown user file

مثال:

    sudo chown ali notes.txt

مالک فایل به ali تغییر می‌کند.

---

# تغییر گروه فایل با chgrp

برای تغییر گروه فایل:

    chgrp

استفاده می‌شود.

مثال:

    sudo chgrp developers project.txt

گروه فایل تغییر می‌کند.

---

# مفهوم root در لینوکس

در لینوکس یک کاربر ویژه وجود دارد:

    root

کاربر root بالاترین سطح دسترسی را در سیستم دارد.

این کاربر می‌تواند:

- فایل‌های سیستمی را تغییر دهد.
- کاربران جدید ایجاد کند.
- تنظیمات اصلی سیستم را تغییر دهد.
- نرم‌افزار نصب یا حذف کند.

به همین دلیل استفاده دائمی از root توصیه نمی‌شود.

---

# دستور sudo

برای اجرای یک دستور با دسترسی مدیریتی از:

    sudo

استفاده می‌کنیم.

مثال:

    sudo apt update

در این حالت دستور با سطح دسترسی مدیر اجرا می‌شود.

---

# تفاوت کاربر عادی و root

| کاربر عادی | root |
|---|---|
| دسترسی محدود دارد | دسترسی کامل دارد |
| نمی‌تواند فایل‌های مهم سیستم را تغییر دهد | می‌تواند تمام فایل‌ها را تغییر دهد |
| برای کارهای روزمره مناسب است | برای مدیریت سیستم استفاده می‌شود |

---

# امنیت و اصل کمترین دسترسی

یکی از اصول مهم امنیت:

Least Privilege

است.

یعنی:

هر کاربر و برنامه باید فقط به اندازه‌ای دسترسی داشته باشد که برای انجام وظیفه خود نیاز دارد.

دادن دسترسی بیش از حد می‌تواند باعث مشکلات امنیتی شود.

---

# تمرین‌های فصل پنجم

## تمرین اول

ساخت فایل:

    touch security.txt

---

## تمرین دوم

مشاهده مجوزها:

    ls -l security.txt

---

## تمرین سوم

اضافه کردن اجازه اجرا:

    chmod +x security.txt

---

## تمرین چهارم

تنظیم مجوز 644:

    chmod 644 security.txt

---

## تمرین پنجم

ساخت اسکریپت ساده:

    touch script.sh

سپس:

    chmod +x script.sh

---

# جمع‌بندی فصل پنجم

در این فصل یاد گرفتیم:

- سیستم Permission در لینوکس چگونه کار می‌کند.
- معنی r ، w و x چیست.
- تفاوت User، Group و Others چیست.
- چگونه مجوز فایل‌ها را تغییر دهیم.
- چگونه مالکیت فایل‌ها را تغییر دهیم.
- root و sudo چه نقشی دارند.

مجوزها یکی از پایه‌های امنیت لینوکس هستند.

بدون درک Permission، مدیریت حرفه‌ای سیستم‌های لینوکسی امکان‌پذیر نیست.

در فصل بعد وارد مبحث مهم **کاربران، گروه‌ها و مدیریت حساب‌های کاربری در لینوکس** خواهیم شد.
