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ğı.