EACCES (errno 13)
errno 13
الرسالة الرسمية (كما تظهر على الشاشة): Permission denied
يُبحث عنه أيضًا باسم: Permission denied, errno 13, EACCES: permission denied, npm ERR! code EACCES, listen EACCES
ماذا يعني
تعني EACCES، أي 'Permission denied' (errno 13)، أن بتات أذونات الملف أو قوائم التحكم بالوصول (ACL) أو وحدة أمان رفضت الوصول المطلوب. تظهر عند قراءة الملفات أو الكتابة إليها أو تنفيذها، وعند الارتباط بمنافذ أقل من 1024 بحساب مستخدم عادي، وكثيراً مع 'npm install -g'.
ينطبق على: Linux, macOS (BSD errno), WSL, حاويات Docker
كيفية إصلاح EACCES (errno 13)
- افحص الأذونات والمالك على امتداد المسار كله بالأمر 'namei -l /full/path/to/file'؛ فكل مجلد يحتاج إذن التنفيذ (x) ليُجتاز
- أصلح ملكية ملفاتك بالأمر 'sudo chown -R $USER:$USER <dir>' بدلاً من تشغيل البرنامج بصلاحيات root
- إذا فشل تنفيذ سكربت، فأضف إذن التنفيذ بالأمر 'chmod +x script.sh'، وتأكد من أن نظام الملفات غير مركّب بالخيار 'noexec' ('mount | grep noexec')
- عند حدوث EACCES مع 'npm install -g'، استخدم مدير إصدارات Node (nvm أو fnm) أو اضبط بادئة يملكها المستخدم بالأمر 'npm config set prefix ~/.npm-global' بدلاً من sudo
- عند 'listen EACCES' على المنفذين 80/443، شغّل التطبيق خلف وكيل عكسي، أو استخدم منفذاً فوق 1024، أو امنح الصلاحية بالأمر 'sudo setcap cap_net_bind_service=+ep $(readlink -f $(which node))'
- افحص سياقات SELinux بالأمر 'ls -Z' واستعدها بالأمر 'restorecon -Rv <path>' إذا نُقلت الملفات إلى جذر الويب
- في وحدات Docker volumes، طابق UID/GID لمستخدم الحاوية مع ملفات المضيف أو استخدم المستخدم الموثق في الصورة
سبب حدوثه
يُفحص الوصول وفق بتات المالك/المجموعة/الآخرين وقوائم POSIX ACL ووحدات LSM مثل SELinux وAppArmor. وأسبابه المعتادة: غياب إذن التنفيذ على المجلدات الأم، وملفات أنشأها root، وأنظمة ملفات noexec، والمنافذ المميزة.
الأسئلة الشائعة
هل أستخدم sudo لإصلاح EACCES؟
تجنب ذلك كعادة. أصلح ملكية أو أذونات المسار المحدد، أو شغّل البرنامج في موقع يمكن للمستخدم الكتابة فيه؛ فقد ينشئ sudo ملفات يملكها root تسبب أخطاء أكثر لاحقاً.
لماذا يقول Node: 'listen EACCES: permission denied 0.0.0.0:80'؟
المنافذ الأقل من 1024 تتطلب صلاحيات في Linux. استخدم منفذاً أعلى خلف nginx أو امنح الصلاحية cap_net_bind_service.
أخطاء ذات صلة
المصدر: Linux kernel errno.h · حلول كتبها المحررون وراجعوها (راجع السياسة التحريرية)
آخر تحديث: