user@linux-tutorials: ~/tutorials/05-permissions — linux-tutorials

tutorials / linux / chapter-05.md · utf-8 ⬇ download chapter-05.md

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

Linux Permissions & Ownership

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

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

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

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

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

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

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

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

برای مثال:

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

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

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

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

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

user@linux-tutorials: ~/ch-05BASH
ls -l

مثال خروجی:

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

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

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

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

-rw-r--r--

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

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

نوع فایل
|
▼
-

مالک
|
▼
rw-

گروه
|
▼
r--

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

ساختار کلی:

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

نوع فایل

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

نمونه‌ها:

-

فایل معمولی.

user@linux-tutorials: ~/ch-05BASH
d

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

user@linux-tutorials: ~/ch-05BASH
l

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

مثال:

user@linux-tutorials: ~/ch-05BASH
drwxr-xr-x

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

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

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

Read (r)

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

برای فایل:

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

برای پوشه:

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

Write (w)

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

برای فایل:

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

برای پوشه:

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

Execute (x)

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

برای فایل:

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

برای پوشه:

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

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

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

User

مالک فایل.

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

Group

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

Others

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

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

فرض کنید:

-rwxr-xr--

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

تقسیم آن:

user@linux-tutorials: ~/ch-05BASH
rwx

مالک:

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

user@linux-tutorials: ~/ch-05BASH
r-x

گروه:

خواندن و اجرا

user@linux-tutorials: ~/ch-05BASH
r--

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

فقط خواندن

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

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

user@linux-tutorials: ~/ch-05BASH
chmod

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

ساختار:

user@linux-tutorials: ~/ch-05BASH
chmod permissions filename

مثال:

user@linux-tutorials: ~/ch-05BASH
chmod +x script.sh

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

روش عددی chmod

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

مقادیر:

user@linux-tutorials: ~/ch-05BASH
r = 4

w = 2

x = 1

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

مثال:

user@linux-tutorials: ~/ch-05BASH
rw-

محاسبه:

4 + 2 + 0 = 6

پس:

user@linux-tutorials: ~/ch-05BASH
rw- = 6

مجوزهای رایج

755

user@linux-tutorials: ~/ch-05BASH
rwxr-xr-x

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

مالک:

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

دیگران:

خواندن + اجرا

644

user@linux-tutorials: ~/ch-05BASH
rw-r--r--

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

مالک:

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

دیگران:

فقط خواندن

700

user@linux-tutorials: ~/ch-05BASH
rwx------

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

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

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

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

user@linux-tutorials: ~/ch-05BASH
chown

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

ساختار:

user@linux-tutorials: ~/ch-05BASH
chown user file

مثال:

user@linux-tutorials: ~/ch-05BASH
sudo chown ali notes.txt

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

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

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

user@linux-tutorials: ~/ch-05BASH
chgrp

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

مثال:

user@linux-tutorials: ~/ch-05BASH
sudo chgrp developers project.txt

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

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

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

user@linux-tutorials: ~/ch-05BASH
root

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

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

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

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

دستور sudo

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

user@linux-tutorials: ~/ch-05BASH
sudo

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

مثال:

user@linux-tutorials: ~/ch-05BASH
sudo apt update

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

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

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

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

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

Least Privilege

است.

یعنی:

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

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

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

[01]ساخت فایل

user@linux-tutorials: ~/ch-05BASH
touch security.txt

[02]مشاهده مجوزها

user@linux-tutorials: ~/ch-05BASH
ls -l security.txt

[03]اضافه کردن اجازه اجرا

user@linux-tutorials: ~/ch-05BASH
chmod +x security.txt

[04]تنظیم مجوز 644

user@linux-tutorials: ~/ch-05BASH
chmod 644 security.txt

[05]ساخت اسکریپت ساده

user@linux-tutorials: ~/ch-05BASH
touch script.sh

سپس:

user@linux-tutorials: ~/ch-05BASH
chmod +x script.sh

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

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

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

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

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

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