ارور Permission denied در لینوکس ⛔ ، یکی از رایجترین خطاهایی است که کاربران این برنامه ممکن است با آن مواجه شوند. این ارور زمانی رخ میدهد که کاربر اجازه ویرایش یک پرونده را نداشته باشد. در این مطلب از رهنامه به آموزش ۴ روش رفع ارور Permission Denied در لینوکس میپردازیم.
حل خطای Permission denied در لینوکس کالی ، اوبونتو و…
How to Fix Permission Denied Error in Linux
کاربران Root به همه فایلها در لینوکس دسترسی دارند و میتوانند تمامی فایلها را ویرایش کنند. سایر کاربران مجاز به انجام همه ویرایشها نیستند و با خطای Permission denied در لینوکس مواجه شوند. در این مطلب نحوه رفع ارور Permission denied در لینوکس را آموزش میدهیم.
مثالی از نداشتن دسترسی روت در لینوکس
در این بخش مثالی از نداشتن دسترسی کامل در لینوکس میآوریم. وقتی دسترسی کامل وجود نداشته باشد، سیستم در هنگام تغییر فایلهای Root سیستمی چنین اروری خواهد داد:
[[email protected] ~]# su – manmohan
Last login: Wed Jan 24 14:34:36 UTC 2018 on pts/0
[[email protected] ~]$ ls -l /root
ls: cannot open directory /root: Permission denied
[[email protected] ~]$ cd /root
-bash: cd: /root: Permission denied
[[email protected] ~]$ id
uid=501(manmohan) gid=501(manmohan) groups=501(manmohan)
[[email protected] ~]$
توجه داشته باشید که نام کاربر در این مثال، Manmohan نام دارد.
حل مشکل Permission denied در لینوکس
رفع ارور Permission denied در کالی لینوکس تنها برای کاربرانی ممکن است که امتیاز Sudo دارند. با استفاده از دستور Chmod در اوبونتو میتوانید دسترسیها را تغییر دهید.
Flags گزینههای اضافی هستند که کاربران میتوانند آنان را تنظیم کنند.
Permissions هم نشاندهنده این است که کاربر میتواند فایلها را ویرایش کند یا خیر.
Filename نام فایلی است که مجوز و دسترسی آن تغییر کرده است. در ادامه مثالی درباره امکان خواندن، نوشتن و اجرا کردن یک فایل توسط کاربر میآوریم. این مثال در حالی است که گروه و دیگران تنها میتوانند فایل را بخوانند.
chmod u=rwx,g=r,o=r file
R: به معنای مجوز خواندن
W: مجوز نوشتن
X: مجوز اجرا کردن
chmod 744 file
۴: مجوز خواندن
۲: مجوز نوشتن
۱: مجوز اجرا کردن
۰: عدم مجوز
از مجموع این مجوزها برای توضیح دادن هر یک از انواع Author استفاده میشود.
انواع Flags شامل موارد زیر میشوند:
–help: باز کردن منوی Help
–version: نشان دادن شماره نسخه
-R, –recursive: تغییر مجوزها به صورت بازگشتی
–reference=file: تنظیم مجوزهای مشابه با فایل
–preserve-root: به صورت بازگشتی ‘/’ را فعال نکنید.
–no-preserve-root: به صورت بازگشتی پیش فرض ,’/’ فعال شود.
-v, –verbose: ارسال پیام برای هر فایل
-f, –silent, –quiet: از پیامهای ارور خروجی نگیرید
-c, –changes: گرفتن خروجی Verbose به هنگام ایجاد تغییر
تغییر پرمیشن در لینوکس چگونه انجام میشود؟
یکی از راههای جلوگیری از این ارورها دسترسی روت دادن به یوزر در لینوکس است. در این حالت کاربر میتواند از دستور SUID در لینوکس استفاده کند. البته این راهحل راه آن چنان توصیه نمیکنیم زیرا دسترسیهای غیرضروری به تمامی فایلهای روت سیستم ایجاد میشود.
برای رفع ارور Permission denied در کالی (ارور مربوط به اسکریپتنویسی شل) مثالی میآوریم. فرض کنید پس از اسکریپنویسی شل ارور زیر برایتان نمایان میشود:
[[email protected] tmp]# ./myshell.sh
-bash: ./myshell.sh: Permission denied
[[email protected] tmp]#
حال برای جلوگیری از چنین مواردی باید مجوز «X» را با استفاده از دستور Chmod به فایل myshell.sh اضافه کنید:
[[email protected] tmp]# ls -l myshell.sh
-rw-r–r– ۱ root root 27 Jan 25 00:31 myshell.sh
[[email protected] tmp]# chmod u+x myshell.sh
[[email protected] tmp]# ls -l myshell.sh
-rwxr–r– ۱ root root 27 Jan 25 00:31 myshell.sh
[[email protected] tmp]#
همان طور که میبینید در آخرین خروجی حرف X وجود دارد که به معنای مجوز اجرا است. این حرف بعد از اجرای دستور Chmod اضافه میشود. در نتیجه، دفعه بعدی که بخواهیم اسکریپتنویسی شل انجام دهید، دیگر ارور نخواهید دید.
[[email protected] tmp]# cat myshell.sh
echo “My name is Manmohan”
[[email protected] tmp]# ./myshell.sh
My name is Manmohan
[[email protected] tmp]#
برای دانلود لینوکس به مطلب بررسی بهترین نسخههای لینوکس برای دانلود و استفاده مراجعه کنید.
حل ارور Permission denied در ترموکس به هنگام فهرست یا رایت کردن فایل
میتوانید ارور permission denied در لینوکس را در این حالت در ادامه ببینید:
[[email protected] tmp]$ cd myfolder/
-bash: cd: myfolder/: Permission denied
[[email protected] tmp]$
اگر به مجوزهای دایرکتوری myfolder نگاه کنید، متوجه دستور ls –l خواهید شد.
[[email protected] tmp]# ls -ltr
total 4
drwx—— ۲ root root 4096 Jan 25 00:48 myfolder
[[email protected] tmp]# pwd
/tmp
[[email protected] tmp]#
برای دسترسی به مجوزها در این حالت، باید از دستور chmod زیر استفاده کنید:
[[email protected] tmp]# chmod o+rx myfolder/
[[email protected] tmp]# ls -lt
total 4
drwx—r-x 2 root root 4096 Jan 25 00:48 myfolder
[[email protected] tmp]#
پس از اجرای این دستور، کاربر که Manmohan نام دارد، دیگر مشکلی نخواهد داشت و با این پیام مواجه خواهد شد:
[[email protected] tmp]$ ls -lt myfolder/
total 0
[[email protected] tmp]$ cd myfolder/
[[email protected] myfolder]$
در صورتی که میخواهید مجوزی را برای این دایرکتوری بنویسید، باید از w flag در دستور Chmod استفاده کنید:
[[email protected] tmp]# chmod o+rwx myfolder/
[[email protected] tmp]# ls -lt
total 4
drwx—rwx 2 root root 4096 Jan 25 00:48 myfolder
[[email protected] tmp]#
همین امر برای مجوز File level قابل اجرا است.
راه دیگر این است که با استاده از دستور Chown مالکیت دایرکتوری را تغییر دهید. در نتیجه، تغییر مالکیت دایرکتوری myfolder برای کاربر Manmohan به شرح زیر خواهد بود:
[[email protected] tmp]# chown manmohan:manmohan myfolder/
[[email protected] tmp]# ls -l
total 4
drwx—rwx 2 manmohan manmohan 4096 Jan 25 00:48 myfolder
[[email protected] tmp]#
حال این کاربر مالک دایرکتوری است و میتواند هر عملیاتی را روی آن انجام دهد. در صورتی که میخواهید مجوزها را برگردانید، فراموش نکنید که r- را به دستور Chown اضافه کنید:
[[email protected] tmp]# chown -R manmohan:manmohan myfolder/
اگر با استفاده از فلش و USB در لینوکس مشکل دارید، میتوانید به مطلب آموزش استفاده و شناسایی درایو USB و فلش در لینوکس مراجعه کنید.
رفع ارور Permission denied در لینوکس در هنگام ایجاد پوشه
فرض کنید مشکلی برای کپی کردن فایل در Ubuntu 12.04 دارید. یک دایرکتوری در Home directory ایجاد میکنید. پس راهی که میخواهید فایل را کپی کنید به شکل زیر است:
/home/sixven/camp_sms/inputs
اما با ارور زیر مواجه میشوید و نمیتوانید فایلها را به صورت مستقیم در دایرکتوری کپی کنید:
[email protected]:/home/sixven/camp_sms/inputs$ touch test_file.txt
برای رفع این ارور Permission denied در لینوکس، باید بدانید که مجوزها در Ubuntu به صورت پیشفرض ۶۴۴ هستند. در نتیجه، نمیتوانید در دایرکتوری که مالک ان نیستید فایلی را کپی کنید.
نام مالک در این بخش sixven است. در صورتی که نام کاربری شما به عنوان مثال francisco-vergara باشد، باید راه حل زیر را بروید:
شما میتوانید مجوز دایرکتوری را تغییر دهید و اجازه دهید دیگران هم در داخل ان فایل ایجاد کنند.
sudo chmod -R 777 /home/sixven/camp_sms/inputs
این دستور به صورت بازگشتی مجوز دایرکتوری را تغییر میدهد و تمامی کاربران میتوانند در دایرکتوری تغییراتی روی فایلها انجام دهند.
راهحل بعدی این است که مالکیت کاربر francisco-vergara برای این دایرکتوری تغییر دهید.
sudo chown -R francisco-vergara:francisco-vergara /home/sixven/camp_sms/inputs
در نتیجه، با توجه به این دستور، کاربر sixven نمیتواند در این پوشه کاری انجام دهد.
برای ایجاد دسترسی برای هر دو کاربر روش زیر را بروید:
مالکیت دایرکتوری را به francisco-vergara تغییر دهید و مالک گروه را sixven بگذارید.
sudo chown -R francisco-vergara /home/sixven/camp_sms/inputs
روش دیگر این است که مالکیت فایل را در حالت Root تغییر دهید:
chown -R user:user /home/sixven
با دستور Chmod:
chmod -R g+rw /home/sixven
یا:
chmod -R o+rw /home/sixven
توجه کنید که این راه آن چنان امن نیست و رهنامه هیچ مسئولیتی در برابر مشکلات امنیتی نخواهد داشت.
نظرات و پیشنهادات شما؟
در این مطلب از رهنامه حل ارور Permission Denied در لینوکس را آموزش دادیم. شما از کدام روش برای رفع این ارور استفاده کردید؟ لطفا نظرات و پیشنهادات خود را در بخش دیدگاه با ما در میان بگذارید.