ارور Permission denied در لینوکس ⛔ ، یکی از رایجترین خطاهایی است که کاربران این برنامه ممکن است با آن مواجه شوند.
این ارور زمانی رخ میدهد که کاربر اجازه ویرایش یک پرونده را نداشته باشد. در این مطلب از انزل وب به آموزش ۴ روش رفع ارور Permission Denied در لینوکس میپردازیم.
حل خطای Permission denied در لینوکس کالی ، اوبونتو و…
How to Fix Permission Denied Error in Linux
کاربران Root به همه فایلها در لینوکس دسترسی دارند و میتوانند تمامی فایلها را ویرایش کنند. سایر کاربران مجاز به انجام همه ویرایشها نیستند و با خطای Permission denied در لینوکس مواجه شوند. در این مطلب نحوه رفع ارور Permission denied در لینوکس را آموزش میدهیم.
مثالی از نداشتن دسترسی روت در لینوکس
در این بخش مثالی از نداشتن دسترسی کامل در لینوکس میآوریم. وقتی دسترسی کامل وجود نداشته باشد، سیستم در هنگام تغییر فایلهای Root سیستمی چنین اروری خواهد داد:
[root@rhel ~]# su – manmohan
Last login: Wed Jan 24 14:34:36 UTC 2018 on pts/0
[manmohan@rhel ~]$ ls -l /root
ls: cannot open directory /root: Permission denied
[manmohan@rhel ~]$ cd /root
-bash: cd: /root: Permission denied
[manmohan@rhel ~]$ id
uid=501(manmohan) gid=501(manmohan) groups=501(manmohan)
[manmohan@rhel ~]$
توجه داشته باشید که نام کاربر در این مثال، 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 در کالی (ارور مربوط به اسکریپتنویسی شل) مثالی میآوریم. فرض کنید پس از اسکریپنویسی شل ارور زیر برایتان نمایان میشود:
[root@rhel tmp]# ./myshell.sh
-bash: ./myshell.sh: Permission denied
[root@rhel tmp]#
حال برای جلوگیری از چنین مواردی باید مجوز «X» را با استفاده از دستور Chmod به فایل myshell.sh اضافه کنید:
[root@rhel tmp]# ls -l myshell.sh
-rw-r–r– 1 root root 27 Jan 25 00:31 myshell.sh
[root@rhel tmp]# chmod u+x myshell.sh
[root@rhel tmp]# ls -l myshell.sh
-rwxr–r– 1 root root 27 Jan 25 00:31 myshell.sh
[root@rhel tmp]#
همان طور که میبینید در آخرین خروجی حرف X وجود دارد که به معنای مجوز اجرا است. این حرف بعد از اجرای دستور Chmod اضافه میشود. در نتیجه، دفعه بعدی که بخواهیم اسکریپتنویسی شل انجام دهید، دیگر ارور نخواهید دید.
[root@rhel tmp]# cat myshell.sh
echo “My name is Manmohan”
[root@rhel tmp]# ./myshell.sh
My name is Manmohan
[root@rhel tmp]#
برای دانلود لینوکس به مطلب بررسی بهترین نسخههای لینوکس برای دانلود و استفاده مراجعه کنید.
حل ارور Permission denied در ترموکس به هنگام فهرست یا رایت کردن فایل
میتوانید ارور permission denied در لینوکس را در این حالت در ادامه ببینید:
[manmohan@rhel tmp]$ cd myfolder/
-bash: cd: myfolder/: Permission denied
[manmohan@rhel tmp]$
اگر به مجوزهای دایرکتوری myfolder نگاه کنید، متوجه دستور ls –l خواهید شد.
[root@rhel tmp]# ls -ltr
total 4
drwx—— 2 root root 4096 Jan 25 00:48 myfolder
[root@rhel tmp]# pwd
/tmp
[root@rhel tmp]#
برای دسترسی به مجوزها در این حالت، باید از دستور chmod زیر استفاده کنید:
[root@rhel tmp]# chmod o+rx myfolder/
[root@rhel tmp]# ls -lt
total 4
drwx—r-x 2 root root 4096 Jan 25 00:48 myfolder
[root@rhel tmp]#
پس از اجرای این دستور، کاربر که Manmohan نام دارد، دیگر مشکلی نخواهد داشت و با این پیام مواجه خواهد شد:
[manmohan@rhel tmp]$ ls -lt myfolder/
total 0
[manmohan@rhel tmp]$ cd myfolder/
[manmohan@rhel myfolder]$
در صورتی که میخواهید مجوزی را برای این دایرکتوری بنویسید، باید از w flag در دستور Chmod استفاده کنید:
[root@rhel tmp]# chmod o+rwx myfolder/
[root@rhel tmp]# ls -lt
total 4
drwx—rwx 2 root root 4096 Jan 25 00:48 myfolder
[root@rhel tmp]#
همین امر برای مجوز File level قابل اجرا است.
راه دیگر این است که با استاده از دستور Chown مالکیت دایرکتوری را تغییر دهید. در نتیجه، تغییر مالکیت دایرکتوری myfolder برای کاربر Manmohan به شرح زیر خواهد بود:
[root@rhel tmp]# chown manmohan:manmohan myfolder/
[root@rhel tmp]# ls -l
total 4
drwx—rwx 2 manmohan manmohan 4096 Jan 25 00:48 myfolder
[root@rhel tmp]#
حال این کاربر مالک دایرکتوری است و میتواند هر عملیاتی را روی آن انجام دهد. در صورتی که میخواهید مجوزها را برگردانید، فراموش نکنید که r- را به دستور Chown اضافه کنید:
[root@rhel tmp]# chown -R manmohan:manmohan myfolder/
اگر با استفاده از فلش و USB در لینوکس مشکل دارید، میتوانید به مطلب آموزش استفاده و شناسایی درایو USB و فلش در لینوکس مراجعه کنید.
رفع ارور Permission denied در لینوکس در هنگام ایجاد پوشه
فرض کنید مشکلی برای کپی کردن فایل در Ubuntu 12.04 دارید. یک دایرکتوری در Home directory ایجاد میکنید. پس راهی که میخواهید فایل را کپی کنید به شکل زیر است:
/home/sixven/camp_sms/inputs
اما با ارور زیر مواجه میشوید و نمیتوانید فایلها را به صورت مستقیم در دایرکتوری کپی کنید:
francisco-vergara@Francisco-Vergara:/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 در لینوکس را آموزش دادیم. شما از کدام روش برای رفع این ارور استفاده کردید؟ لطفا نظرات و پیشنهادات خود را در بخش دیدگاه با ما در میان بگذارید.
ناموسن کد هارو همینجوری به صورت متن نزارید قاطی میشه، توی یه کد ادیتوری چیزی
bash: ./Anaconda3-2022.05-Linux-x86_64.sh: Permission denied
این ارور رو چطورب رفع کنم؟