أذوناتُ الملفّ ليست إلّا الفحصَ الأخير. وأشياءُ أخرى عدّة قد تمنع الكتابة والملفُّ نفسه يبدو سليمًا تمامًا، وهذا ما يجعل هذه المسألة بهذه الحيرة.
١. دليلٌ أعلى
namei -l /var/www/site/storage/logs/app.log
كلُّ دليلٍ في المسار يحتاج إذنَ التنفيذ لتبلغ الملفّ. وnamei يطبع السلسلة كلَّها بأذونها، والسطرُ الجاني بيّنٌ في العادة.
٢. إنّها العمليّة لا أنت
ps aux | grep php-fpm | head -3 # which user is it running as
sudo -u www-data test -w /var/www/site/storage && echo writable || echo NOT
صَدَفتُك أنت، وخادم الوِب www-data. والاختبارُ بالمستخدم الصحيح هو الفرق بين إصلاحٍ في خمس دقائق وأصيلةٍ كاملة.
٣. SELinux على RHEL وAlma وRocky
ls -Z /var/www/site/storage
sudo ausearch -m avc -ts recent | tail
sudo chcon -R -t httpd_sys_rw_content_t /var/www/site/storage
sudo setsebool -P httpd_can_network_connect on
منعُ SELinux لا يظهر في سجلّ التطبيق البتّة. فإن كانت الأذون صحيحةً والكتابةُ ما زالت تفشل على إحدى تلك التوزيعات فهذا هو السبب في الغالب الأعمّ.
٤. غيرُ قابلٍ للتغيير، أو تركيبٌ للقراءة فقط
lsattr /var/www/site/config.php # ----i--------- means immutable
sudo chattr -i /var/www/site/config.php
mount | grep " / " # ro means read-only, often after a disk error
نظامُ ملفّاتٍ أُعيد تركيبه للقراءة فقط معناه أنّ النواة تحمي قرصًا يوشك أن يتلف. افحص
dmesg -T | tail قبل أيّ شيء آخر — فتلك مشكلةُ عتاد لا مشكلةُ أذون.ثمّ اضبطه على وجهه
لا 777. فالملكيّة وبتُّ المجموعة هما الأداتان الصحيحتان — انظر الملكيّة وumask ومصيدة المجموعة.