tutorials / linux / chapter-05.md · utf-8 ⬇ download chapter-05.md
فصل پنجم: مجوزها و مالکیت فایلها در لینوکس
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
است.
یعنی:
هر کاربر و برنامه باید فقط به اندازهای دسترسی داشته باشد که برای انجام وظیفه خود نیاز دارد.
دادن دسترسی بیش از حد میتواند باعث مشکلات امنیتی شود.
تمرینهای فصل پنجم
[01]ساخت فایل
touch security.txt
[02]مشاهده مجوزها
ls -l security.txt
[03]اضافه کردن اجازه اجرا
chmod +x security.txt
[04]تنظیم مجوز 644
chmod 644 security.txt
[05]ساخت اسکریپت ساده
touch script.sh
سپس:
chmod +x script.sh
جمعبندی فصل پنجم
در این فصل یاد گرفتیم:
- سیستم Permission در لینوکس چگونه کار میکند.
- معنی r ، w و x چیست.
- تفاوت User، Group و Others چیست.
- چگونه مجوز فایلها را تغییر دهیم.
- چگونه مالکیت فایلها را تغییر دهیم.
- root و sudo چه نقشی دارند.
مجوزها یکی از پایههای امنیت لینوکس هستند.
بدون درک Permission، مدیریت حرفهای سیستمهای لینوکسی امکانپذیر نیست.