اگر هنگام اجرای یک اسکریپت در لینوکس با خطای Permission denied مواجه شدهاید یا میخواهید دسترسی کاربران به فایلهای سرور را محدود کنید، آشنایی با دستور chmod در لینوکس به شما کمک میکند این مشکلات را برطرف کنید. این دستور برای تغییر مجوزهای دسترسی فایلها و پوشهها استفاده میشود و به شما امکان میدهد مشخص کنید چه افرادی بتوانند یک فایل را بخوانند، تغییر دهند یا اجرا کنند.
مدیریت صحیح مجوزها در محیطهای میزبانی وب و هنگام کار با سرور مجازی اهمیت زیادی دارد؛ زیرا تنظیمات نامناسب ممکن است اجرای برنامهها را مختل کند یا دسترسی غیرضروری به اطلاعات بدهد. اگر روی سرور مجازی ایران یا سرور مجازی خارج خود یک وبسایت، اسکریپت یا برنامه اجرا میکنید، بهتر است با اصول مدیریت دسترسی در لینوکس آشنا باشید.
در این آموزش، ابتدا انواع مجوزها را بررسی میکنیم و سپس با مثالهای عملی یاد میگیریم چگونه دسترسی فایلها و پوشهها را تغییر دهیم، اعداد رایج مانند 755 و 644 را بشناسیم و از اشتباهات امنیتی جلوگیری کنیم.


آشنایی با انواع مجوزهای دسترسی در لینوکس
در لینوکس، برای هر فایل یا پوشه مجوزهایی تعریف میشود که مشخص میکنند کاربران چه عملیاتی میتوانند روی آن انجام دهند. این مجوزها سه نوع اصلی دارند.
مجوز خواندن (Read)
مجوز خواندن با حرف r نمایش داده میشود. این مجوز به کاربر اجازه میدهد محتوای فایل را بخواند. برای پوشه، مجوز خواندن امکان مشاهده فهرست نام فایلها و زیرپوشهها را فراهم میکند.
مجوز نوشتن (Write)
مجوز نوشتن با حرف w نشان داده میشود. در فایل، این مجوز امکان تغییر محتوا را فراهم میکند. در پوشه، نوشتن معمولاً برای ایجاد، حذف یا تغییر نام فایلهای داخل آن لازم است؛ البته مجوزهای دیگر و تنظیمات سیستم نیز میتوانند مؤثر باشند.
مجوز اجرا (Execute)
مجوز اجرا با حرف x مشخص میشود. برای فایلهای اجرایی و اسکریپتها، این مجوز امکان اجرا را فراهم میکند. در پوشه، مجوز اجرا اجازه عبور از مسیر و دسترسی به فایلهای داخل آن را میدهد.
مجوزهای مالک، گروه و سایر کاربران
مجوزهای لینوکس برای سه دسته تعریف میشوند:
- مالک (User)کاربری که مالک فایل است.
- گروه (Group)کاربرانی که عضو گروه مرتبط با فایل هستند.
- سایر کاربران (Others)سایر کاربران سیستم.
برای مثال، خروجی زیر را در نظر بگیرید:
-rw-r--r-- 1 webadmin webgroup 1200 Oct 19 10:00 file.txt
سه بخش مجوز در این خروجی عبارتاند از:
- rw-مالک میتواند فایل را بخواند و تغییر دهد.
- r--اعضای گروه فقط میتوانند فایل را بخوانند.
- r--سایر کاربران نیز فقط امکان خواندن دارند.
خط تیره به معنی نداشتن مجوز مربوطه است. کاراکتر اول خروجی نیز نوع فایل را نشان میدهد؛ برای مثال، - معمولاً فایل عادی و d پوشه را مشخص میکند.
آموزش دستور chmod در لینوکس با مثال
ساختار عمومی دستور chmod به شکل زیر است:
chmod [OPTIONS] MODE FILE
در این ساختار، MODE مجوز جدید و FILE نام فایل یا مسیر موردنظر است. گزینهها نیز رفتار دستور را مشخص میکنند.
تغییر سطح دسترسی با اعداد
یکی از روشهای رایج استفاده از دستور chmod در لینوکس، تعیین مجوزها با اعداد است. در این روش، هر مجوز عدد مشخصی دارد:
مجوز | مقدار عددی |
|---|---|
خواندن (r) | 4 |
نوشتن (w) | 2 |
اجرا (x) | 1 |
بدون مجوز | 0 |
برای هر دسته از کاربران، مقادیر مجوزها با یکدیگر جمع میشوند. برای مثال، 7 حاصل جمع 4، 2 و 1 است؛ بنابراین، مجوز خواندن، نوشتن و اجرا را شامل میشود.
فرض کنید میخواهید مالک فایل تمام مجوزها را داشته باشد و گروه و سایر کاربران فقط بتوانند آن را بخوانند. ابتدا فایل موردنظر را انتخاب کنید و سپس دستور زیر را اجرا کنید:
chmod 744 file.txt
در این حالت، مالک مجوز rwx و گروه و سایر کاربران مجوز r-- خواهند داشت. این مثال صرفاً برای توضیح ساختار عددی است؛ برای فایل متنی معمولی، معمولاً مجوز اجرا لازم نیست.
تغییر سطح دسترسی با حروف
روش دیگر، استفاده از حروف برای تعیین دسته کاربر و مجوز موردنظر است:
- uمالک فایل
- gگروه
- oسایر کاربران
- aهمه دستهها
- +افزودن مجوز
- -حذف مجوز
- =تعیین دقیق مجوزها
فرض کنید میخواهید مجوز اجرای یک اسکریپت را فقط به مالک آن اضافه کنید. در این حالت، دستور زیر مناسب است:
chmod u+x script.sh
با اجرای این دستور، مجوز اجرا به مجوزهای فعلی مالک اضافه میشود و سایر مجوزها تغییر نمیکنند.
اگر بخواهید مجوز نوشتن را از سایر کاربران حذف کنید، میتوانید از دستور زیر استفاده کنید:
chmod o-w file.txt
این روش زمانی مفید است که قصد دارید فقط یک مجوز مشخص را تغییر دهید، بدون اینکه سایر مجوزهای فایل بازنویسی شوند.
تغییر دسترسی پوشهها و فایلهای داخل آنها
دستور chmod در لینوکس میتواند مجوزهای یک پوشه را تغییر دهد. برای مثال، برای تعیین مجوز 755 برای پوشه myfolder، دستور زیر را اجرا کنید:
chmod 755 myfolder
این مجوز به مالک اجازه خواندن، نوشتن و ورود به پوشه را میدهد؛ گروه و سایر کاربران نیز میتوانند محتوای پوشه را مشاهده کنند و از آن عبور کنند.
اگر بخواهید مجوزها را بهصورت بازگشتی روی یک پوشه و محتویات آن اعمال کنید، گزینه -R قابل استفاده است:
chmod -R 755 myfolder
توجه داشته باشید که این دستور مجوز 755 را هم روی پوشهها و هم روی فایلهای داخل آنها اعمال میکند. در نتیجه، فایلهای معمولی نیز مجوز اجرا میگیرند؛ کاری که اغلب لازم نیست و ممکن است امنیت را کاهش دهد. پیش از اجرای دستور بازگشتی، محتویات مسیر را بررسی کنید و در صورت نیاز از روش جداگانه برای پوشهها و فایلها استفاده کنید.
معنی و کاربرد دستورات chmod 755 و chmod 644
دو مقدار 755 و 644 از مجوزهای رایج در لینوکس هستند. درک تفاوت آنها کمک میکند هنگام تنظیم دسترسیها، انتخاب مناسبتری داشته باشید.
دستور chmod 755
برای پوشهها و اسکریپتهایی که مالک باید بتواند آنها را تغییر دهد و سایر کاربران فقط به آنها دسترسی خواندن و اجرا یا عبور داشته باشند، مجوز 755 میتواند مناسب باشد.
chmod 755 script.sh
نتیجه این دستور برای فایل موردنظر، مجوز rwxr-xr-x است. یعنی مالک میتواند آن را بخواند، تغییر دهد و اجرا کند؛ اما گروه و سایر کاربران فقط مجوز خواندن و اجرا دارند. توجه کنید که مجوز اجرا بهتنهایی تضمین نمیکند اسکریپت حتماً اجرا شود؛ ساختار فایل، مفسر و سایر محدودیتها نیز مهم هستند.
دستور chmod 644
برای فایلهای متنی و فایلهای معمول وب که نیازی به اجرا ندارند، مجوز 644 در بسیاری از موارد انتخاب مناسبی است.
chmod 644 file.txt
پس از اجرای دستور، مجوز فایل به rw-r--r-- تغییر میکند. مالک میتواند فایل را بخواند و ویرایش کند، اما گروه و سایر کاربران فقط امکان خواندن دارند.
انتخاب مجوز مناسب به نوع فایل، مالکیت و نیاز برنامه بستگی دارد. نباید صرفاً به دلیل رایج بودن یک عدد، آن را برای تمام فایلها و پوشهها استفاده کنید.
چگونه سطح دسترسی فایلها را بررسی کنیم؟
پیش از تغییر مجوزها با دستور chmod در لینوکس، بهتر است ابتدا وضعیت فعلی فایل را بررسی کنید تا بدانید دقیقاً چه تغییری لازم است.
برای مشاهده مجوزها، مالک و گروه فایل، از دستور زیر استفاده کنید:
ls -l file.txt
خروجی این دستور اطلاعاتی مانند مجوزها، مالک، گروه، اندازه فایل و زمان آخرین تغییر را نمایش میدهد. اگر بهجای یک فایل، میخواهید مجوزهای فایلهای یک پوشه را مشاهده کنید، میتوانید مسیر پوشه را به دستور بدهید.
برای بررسی مجوزهای خود پوشه و نه محتویات آن، از گزینه -d استفاده کنید:
ls -ld myfolder
این دستور اطلاعات خود پوشه را نمایش میدهد. بررسی مالکیت نیز اهمیت دارد؛ زیرا دستور chmod فقط مجوزها را تغییر میدهد و مالک فایل یا گروه آن را عوض نمیکند. معمولاً فقط مالک فایل یا کاربر دارای دسترسی مدیریتی میتواند مجوزهای آن را تغییر دهد.
اگر با خطای Permission denied مواجه شدید، ابتدا مسیر، مالکیت و مجوزهای فعلی را بررسی کنید. استفاده از sudo فقط زمانی مناسب است که واقعاً به دسترسی مدیریتی نیاز دارید و از امن بودن تغییر مطمئن هستید.




























بدون دیدگاه