لينكس / دليل حلول تحريري
برنامج صدفة يبلغ Permission denied
افصل بتات التنفيذ وعبور المجلدات وسياسة التركيب وتوفر المفسر والضوابط الإلزامية قبل تعديل وصول البرنامج.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
يتعذر بدء ./report.sh افتراضي مباشرة وتطبع الصدفة Permission denied. وقد يبدو bash report.sh ناجحاً. الفرق دليل مفيد لكنه لا يسمح بتجاوز سياسة تنفيذ مقصودة. اعمل فقط على برنامج مختبري جديد.
افهم الأسباب المحتملة
- يحتاج التنفيذ المباشر إذن تنفيذ مناسباً وعبور الآباء ومفسراً متاحاً وسياسة ملفات وأمان تسمح. أما قراءته بـ bash فعملية مختلفة تفتح المحتوى كإدخال. وقد تسبب مسارات مفسر غائبة ونهايات أسطر Windows أعطالاً مرتبطة برسائل دقيقة مختلفة.
1. تحديد العملية والهوية بدقة
سجل الأمر والخطأ والمجلد والهوية. لا تثبت القراءة الناجحة السماح بالتنفيذ. أكد أنه البرنامج المصطنع المقصود لا اسم مشابه في PATH. افحص أول سطر والمفسر قبل التعديل، ولا تنشر برنامجاً أو بيئة حقيقية تحوي اعتماداً.
id
pwd
ls -l -- ./report.sh
head -n 1 -- ./report.sh
تفترض أوامر القراءة وجود البرنامج المختبري ولا تغير الملكية أو النمط.
2. فحص المسار والنمط المقصود
افحص عبور كل أب واقرأ النمط بالحساب الفعلي. إذا ملكت ملف المختبر الخاص وكان التنفيذ مقصوداً فإن chmod u+x إصلاح محدود. لا يصلح أباً محجوباً أو مفسراً معطوباً أو تركيب noexec. تجنب chmod التكراري و777 لإخفاء رفض مجهول.
lab=$(mktemp -d)
printf '%s\n' '#!/bin/sh' 'printf "lab-ok\n"' > "$lab/report.sh"
chmod u+x "$lab/report.sh"
"$lab/report.sh"
يفترض المثال غير القابل للتشغيل وجود /bin/sh وسماح المؤقت بالتنفيذ، ويغير الملف الجديد فقط لا برنامج المضيف.
3. فحص التركيب وسياق الأمان
استخدم findmnt --target ./report.sh لتحديد التركيب وخياراته. إذا كان noexec مقصوداً فانقل المختبر المصرح إلى موقع مناسب بدلاً من تجاوزه أو إعادة تركيب المضيف. إذا صحت الأذونات افحص أدلة الضوابط الإلزامية بأدوات التوزيعة. افحص المفسر ونهايات الأسطر مستقلاً؛ فلا تنشئ بتات الوصول مفسراً غائباً.
4. تغيير السبب المثبت وحده
دوّن الفحص الفاشل ولماذا تسمح السياسة بإصلاحه. طبق أصغر إصلاح مصرح في النسخة المؤقتة واحفظ النمط والمحتوى الأصليين للمقارنة. إذا كان الرفض حداً مقصوداً فاتبع النشر الموثق بدل إضعافه. احفظ الدليل لربط نجاح الإعادة بالتغيير.
تحقق من نجاح الإصلاح
كرر الاستدعاء الأصلي بالحساب والمجلد نفسيهما. أكد العلامة المتوقعة والصفر ثم النمط النهائي. تحقق من عدم منح الآخرين وصولاً وعدم تعطيل سياسة تركيب أو إلزامية. نجاح استدعاء مختلف ليس نجاح الاختبار الأصلي.
امنع تكرار المشكلة
- أعلن المفسر ووحد نهايات الأسطر واحفظ نمط التنفيذ عمداً في إدارة الإصدارات واختبر المسار بهوية الخدمة. وثق سماح التركيب. افصل تشخيص الوصول عن أخطاء التطبيق كي لا تصبح الأذونات الواسعة حلاً معتاداً.