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


خطای Permission Denied در لینوکس چیست؟
در لینوکس، هر فایل و پوشه دارای مجموعهای از مجوزهای دسترسی است که مشخص میکند چه کاربرانی اجازه خواندن، نوشتن یا اجرای آن را دارند. این مجوزها به سه گروه اصلی مربوط میشوند:
- مالک (Owner)کاربری که مالک فایل یا پوشه است.
- گروه (Group)گروه کاربری مرتبط با فایل.
- سایر کاربران (Others)کاربران دیگری که مالک یا عضو گروه مربوطه نیستند.
سه مجوز اصلی در لینوکس عبارتاند از:
مجوز | نماد | کاربرد |
|---|---|---|
خواندن (Read) | R | مشاهده محتوای فایل یا فهرست فایلهای یک پوشه |
نوشتن (Write) | W | تغییر فایل یا ایجاد و حذف موارد داخل پوشه، با توجه به سایر محدودیتها |
اجرا (Execute) | X | اجرای فایل اجرایی یا دسترسی عبوری به پوشه |
برای مثال، اگر مجوز اجرای یک اسکریپت به کاربر داده نشده باشد، اجرای مستقیم آن ممکن است با خطای Permission Denied روبهرو شود. همچنین اگر کاربری مجوز عبور از یکی از پوشههای مسیر را نداشته باشد، حتی با داشتن مجوز فایل مقصد نیز ممکن است نتواند به آن دسترسی پیدا کند.
چرا خطای Permission Denied رخ میدهد؟
برای رفع خطای Permission Denied در لینوکس، ابتدا باید علت اصلی آن را مشخص کنید. تغییر تصادفی مجوزها ممکن است مشکل را برطرف نکند یا حتی امنیت سیستم را کاهش دهد.
نداشتن مجوز خواندن، نوشتن یا اجرا
یکی از رایجترین دلایل این خطا، نداشتن مجوز لازم برای انجام یک عملیات است. برای مثال، اگر فایل فقط مجوز خواندن داشته باشد، نمیتوانید محتوای آن را تغییر دهید. به همین ترتیب، برای اجرای مستقیم یک اسکریپت معمولاً باید مجوز اجرا نیز وجود داشته باشد.
مالکیت نادرست فایل یا پوشه
اگر فایل متعلق به کاربر دیگری باشد، ممکن است حساب فعلی شما مجوز لازم برای تغییر یا اجرای آن را نداشته باشد. این وضعیت گاهی پس از انتقال فایل از سرور دیگر، استخراج آرشیو یا اجرای برنامه با کاربر متفاوت رخ میدهد.
نیاز به دسترسی مدیریتی
برخی عملیاتها، مانند تغییر فایلهای سیستمی یا مدیریت سرویسها، به دسترسی مدیریتی نیاز دارند. در این شرایط، کاربر عادی ممکن است اجازه اجرای دستور را نداشته باشد. البته استفاده از دسترسی مدیریتی فقط زمانی مناسب است که بدانید دستور چه تغییری در سیستم ایجاد میکند.
محدودیتهای امنیتی سیستم
گاهی با وجود مجوزهای ظاهراً صحیح، محدودیتهای امنیتی دیگری مانع دسترسی میشوند. برای نمونه، تنظیمات SELinux، فهرستهای کنترل دسترسی یا گزینههای اتصال فایلسیستم میتوانند در دسترسی به فایل تأثیر داشته باشند. بنابراین، اگر روشهای معمول جواب ندادند، باید این موارد نیز بررسی شوند.
چگونه خطای Permission Denied در لینوکس را رفع کنیم؟
پیش از اجرای دستورات اصلاحی، بهتر است با چند بررسی ساده مشخص کنید مشکل از مجوزها، مالکیت یا سطح دسترسی کاربر است.
بررسی مجوزها و مالکیت فایل
مرحله اول: مشاهده مجوزهای فایل
برای بررسی مجوزها و مالکیت یک فایل، دستور زیر را اجرا کنید. بهجای filename نام فایل موردنظر را قرار دهید.
ls -l filename
این دستور اطلاعاتی درباره مجوزها، مالک فایل، گروه و نام فایل نمایش میدهد. برای مثال، خروجی زیر را در نظر بگیرید:
-rw-r--r-- 1 user user 1200 Oct 14 script.sh
در این مثال، مالک فایل مجوز خواندن و نوشتن دارد، اما مجوز اجرا برای هیچیک از گروهها تعریف نشده است. اگر فایل یک اسکریپت باشد و قصد اجرای مستقیم آن را داشته باشید، ممکن است لازم باشد مجوز اجرا را اضافه کنید.
مرحله دوم: بررسی کاربر فعلی
برای مشاهده نام کاربری که در حال حاضر با آن وارد سیستم شدهاید، از دستور زیر استفاده کنید:
whoami
این دستور نام کاربر فعلی را نمایش میدهد. اگر مالک فایل با کاربر فعلی متفاوت باشد، باید بررسی کنید که آیا مجوزهای گروه یا سایر کاربران برای انجام عملیات موردنظر کافی هستند یا خیر.
اصلاح مجوز با دستور chmod
دستور chmod برای تغییر مجوزهای دسترسی فایلها و پوشهها استفاده میشود. اگر علت خطای Permission Denied نداشتن مجوز اجرا باشد، میتوانید فقط همان مجوز را اضافه کنید.
مرحله اول: افزودن مجوز اجرا
chmod u+x script.sh
در این دستور، u به مالک فایل اشاره دارد و +x مجوز اجرا را به او اضافه میکند. به این ترتیب، بدون تغییر مجوز سایر کاربران، امکان اجرای مستقیم اسکریپت برای مالک فراهم میشود.
مرحله دوم: اجرای اسکریپت
پس از اصلاح مجوز، میتوانید اسکریپت را با دستور زیر اجرا کنید:
./script.sh
علامت /. مشخص میکند که فایل از پوشه فعلی اجرا شود. اگر همچنان خطای Permission Denied مشاهده میکنید، باید مسیر فایل، مجوزهای پوشهها و محدودیتهای احتمالی دیگر را بررسی کنید.
نکته: دستور chmod باید متناسب با نیاز واقعی اجرا شود. برای مثال، مجوز 755 معمولاً برای اسکریپتهایی مناسب است که مالک اجازه تغییر آنها را دارد و سایر کاربران فقط باید بتوانند آنها را بخوانند و اجرا کنند؛ اما این مجوز برای همه فایلها مناسب نیست.
تغییر مالکیت با دستور chown
اگر فایل متعلق به کاربر اشتباهی باشد و دسترسی لازم برای تغییر مالکیت را داشته باشید، میتوانید از دستور chown استفاده کنید.
برای مثال، دستور زیر مالک فایل را به کاربر ali و گروه آن را به developers تغییر میدهد:
sudo chown ali:developers filename
در این دستور، ali نام کاربر و developers نام گروه موردنظر است. هر دو مقدار باید با کاربران و گروههای واقعی سیستم مطابقت داشته باشند.
پس از اجرای دستور، مالکیت فایل تغییر میکند و ممکن است مشکل دسترسی برطرف شود. بااینحال، تغییر مالکیت زمانی ضروری است که واقعاً مالک فعلی اشتباه باشد؛ برای رفع هر خطای Permission Denied نیازی به اجرای chown نیست.
اجرای دستور با sudo
دستور sudo امکان اجرای یک دستور با سطح دسترسی مدیریتی را برای کاربران مجاز فراهم میکند. اگر خطا به این دلیل رخ دهد که عملیات به دسترسی مدیریتی نیاز دارد، میتوانید در صورت اطمینان از دستور، آن را با sudo اجرا کنید.
برای مثال، مشاهده فایل تنظیمات سیستمی با دستور زیر امکانپذیر است:
sudo cat /etc/hosts
این دستور محتوای فایل را نمایش میدهد. اگر هدف شما ویرایش فایل باشد، باید از ویرایشگر مناسب با دسترسی مدیریتی استفاده کنید.
هشدار: از اجرای خودکار همه دستورات با sudo خودداری کنید. این کار میتواند باعث تغییر ناخواسته فایلهای سیستمی یا ایجاد مشکلات امنیتی شود. همچنین sudo جایگزین مجوزهای لازم برای همه عملیاتها نیست و ممکن است محدودیتهای امنیتی دیگر همچنان برقرار باشند.
بررسی مجوزهای پوشههای مسیر
گاهی مجوزهای خود فایل صحیح هستند، اما یکی از پوشههای مسیر مانع دسترسی میشود. برای نمونه، ممکن است کاربر مجوز اجرای فایل را داشته باشد، اما اجازه عبور از پوشهای که فایل داخل آن قرار دارد برای او تعریف نشده باشد.
برای بررسی مجوزهای پوشههای مسیر میتوانید از دستور زیر استفاده کنید:
namei -l /home/user/scripts/script.sh
در این مثال، مسیر فایل را با مسیر واقعی خود جایگزین کنید. دستور namei -l مجوزها و مالکیت اجزای مسیر را نمایش میدهد تا بتوانید پوشهای را که دسترسی به آن محدود شده است، شناسایی کنید.
پس از پیدا کردن مشکل، فقط مجوز یا مالکیت همان بخش را در صورت نیاز اصلاح کنید. تغییر گسترده مجوزهای تمام پوشههای مسیر ممکن است دسترسیهای غیرضروری ایجاد کند.


رفع خطای Permission Denied در اتصال SSH
خطای Permission Denied هنگام اتصال SSH معمولاً به احراز هویت یا مجوزهای فایل کلید مربوط است. برای مثال، ممکن است هنگام اتصال به سرور با پیامی مانند زیر روبهرو شوید:
برای بررسی مجوزهای پوشههای مسیر میتوانید از دستور زیر استفاده کنید:
Permission denied (publickey).
این پیام معمولاً نشان میدهد که روش احراز هویت با کلید عمومی موفق نبوده است؛ اما بهتنهایی مشخص نمیکند که مشکل دقیقاً از کدام تنظیم است.
برای بررسی این وضعیت، مراحل زیر را دنبال کنید.
مرحله اول: بررسی نام کاربری و آدرس سرور
ابتدا مطمئن شوید نام کاربری، آدرس IP و پورت اتصال صحیح هستند. برای اتصال با پورت پیشفرض میتوانید از دستور زیر استفاده کنید:
ssh username@server_ip
بهجای username نام کاربر سرور و بهجای server_ip آدرس IP واقعی را وارد کنید. اگر از پورت دیگری استفاده میکنید، باید آن را نیز در دستور مشخص کنید.
مرحله دوم: بررسی مجوز فایل کلید خصوصی
اگر از کلید خصوصی برای اتصال استفاده میکنید، مجوزهای آن باید بهاندازه کافی محدود باشند. برای نمونه، دستور زیر مجوز خواندن و نوشتن را فقط برای مالک فایل نگه میدارد:
chmod 600 ~/.ssh/id_rsa
این دستور را فقط در صورتی اجرا کنید که فایل کلید شما واقعاً در این مسیر قرار دارد. نام فایل کلید ممکن است متفاوت باشد. همچنین این دستور مجوزهای فایل کلید خصوصی را تغییر میدهد، نه مجوز کلید عمومی روی سرور.
مرحله سوم: اتصال با کلید مشخص
اگر چند کلید SSH دارید، میتوانید کلید موردنظر را بهصورت صریح مشخص کنید:
ssh -i ~/.ssh/id_rsa username@server_ip
در این مثال، اتصال با کلید خصوصی مشخصشده انجام میشود. اگر همچنان خطا دریافت میکنید، باید وجود کلید عمومی متناظر در تنظیمات کاربر مقصد، مجوزهای پوشه .ssh و فایل authorized_keys و همچنین تنظیمات سرویس SSH را بررسی کنید.
اگر به سرور دسترسی مدیریتی ندارید، برای بررسی تنظیمات سمت سرور باید از مدیر سرور یا ارائهدهنده خدمات کمک بگیرید.




























بدون دیدگاه