Bir dosyanın izinleri yalnızca son denetimdir. Dosyanın kendisi kusursuz görünürken yazmayı reddedebilecek başka birkaç şey daha vardır; bu durumu bu kadar kafa karıştırıcı yapan da budur.
1. Üstteki bir dizin
namei -l /var/www/site/storage/logs/app.log
Dosyaya ulaşabilmeniz için yoldaki her dizinin çalıştırma iznine ihtiyacı vardır. namei bütün zinciri izinleriyle birlikte yazdırır ve suçlu satır genelde göze çarpar.
2. Sorun süreçte, sizde değil
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
Kabuğunuz sizsiniz; web sunucusu ise www-data'dır. Doğru kullanıcıyla denemek, beş dakikalık bir çözümle bir öğleden sonra arasındaki farktır.
3. RHEL, Alma ve Rocky üzerinde SELinux
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'un reddettikleri uygulama kaydında hiç görünmez. İzinler doğruysa ve yazma o dağıtımların birinde yine de başarısız oluyorsa, sebep neredeyse her zaman budur.
4. Değiştirilemez ya da salt okunur bağlanmış
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
Salt okunur olarak yeniden bağlanmış bir dosya sistemi, çekirdeğin ölmekte olan bir diski koruması demektir. Başka her şeyden önce
dmesg -T | tail çıktısına bakın - bu bir donanım sorunudur, izin sorunu değil.Sonra doğru şekilde ayarlayın
777 değil. Doğru araçlar sahiplik ve grup bitidir - bakınız sahiplik, umask ve grup tuzağı.