مدیریت مجوزها (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 است.
| مجوز | عدد |
|---|---|
rwx | 7 |
rw- | 6 |
r-x | 5 |
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
# تنظیم مجوز فقط خواندن برای همه
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» (ترجمه فارسی در کتابخانه لینوکس) را برای یادگیری عمیقتر بخوانید.