Web sunucusunun yazamadığı bir dosya çoğu kez 777 ile düzeltilir ve işe de yarar. Ama bu, makinedeki herhangi bir sürecin - bir saldırganın az önce yüklediği süreç de dahil - onu yeniden yazabilmesi demektir. Asıl soru izinlerin ne olduğu değil, dosyanın kime ait olduğudur.
Doğru düzen
sudo chown -R sara:www-data /var/www/site
sudo find /var/www/site -type d -exec chmod 2750 {} \;
sudo find /var/www/site -type f -exec chmod 640 {} \;
# only what genuinely must be written
sudo chmod -R 2770 /var/www/site/storage /var/www/site/uploads
Dosyalar sizin, grup web sunucusunun; o her şeyi okur ve yalnızca buna ihtiyacı olan iki dizine yazar.
Baştaki 2, grup tuzağıdır
O setgid'dir. O olmadan, dizinin içinde oluşturulan bir dosya kendi oluşturucusunun grubunu alır; böylece web sunucusunun yüklediği bir dosyayı siz okuyamazsınız, sizin oluşturduğunuzu da o yazamaz. Başka biri bir dosya ekleyene kadar her şey yolunda görünür - arızanın rastgele görünmesinin sebebi de budur.
sudo chmod g+s /var/www/site/uploads
ls -ld /var/www/site/uploads # drwxrws--- - the s is the setgid bit
YENİ dosyaların ne alacağına umask karar verir
umask # 0022 typical: new files 644, new dirs 755
umask 0007 # files 660, dirs 770 - nothing for others
Bir art süreç için onu kabuk profilinizde değil hizmet biriminde ayarlayın; yoksa yalnızca elle oluşturduğunuz dosyalara işler.
# /etc/systemd/system/app.service
[Service]
UMask=0007
Asla 777
Zaten yanlış olanı bulun
find /var/www -perm -o=w -not -type l | head -20
