Bunun çok eski bir soru olduğunu biliyorum, ancak iyi çözümü derinlemesine bir açıklama ile eklemek istedim. Ubuntu benzeri sistemlerde iki ifade yürütmeniz gerekecek ve sonra bir cazibe gibi çalışacak.
Linux'ta izinler üç basamakla gösterilebilir. İlk hane, dosyaların sahibinin iznini tanımlar. İkinci basamak, belirli bir kullanıcı grubunun izinlerini belirtir. Üçüncü hane, grubun sahibi veya üyesi olmayan tüm kullanıcılar için izinleri tanımlar.
Web sunucusunun grubun bir üyesi olan bir id ile çalışması beklenir. Web sunucusu, dosya ve dizinlerin sahibiyle asla aynı kimlik ile çalışmamalıdır. Ubuntu'da www-data kimliği altında apache çalıştırır. Bu kimlik, izinlerin belirtildiği grubun bir üyesi olmalıdır.
Dosyaların içeriğini değiştirmek istediğiniz dizine uygun hakları vermek için şu ifadeyi yürütün:
find %DIR% -type d -exec chmod 770 {} \;
Bu, OP sorusunda,% ROOT% / veritabanı dizini için izinlerin buna göre değiştirilmesi gerektiği anlamına gelir. Bu nedenle, o dizinde asla değiştirilmemesi veya kaldırılmaması gereken dosyalara sahip olmamak önemlidir. Bu nedenle, içeriğinin değiştirilmesi gereken dosyalar için ayrı bir dizin oluşturmak en iyi uygulamadır.
Bir dizin için okuma izinleri (4), tüm dosya ve dizinleri meta verileriyle birlikte bir dizin içinde toplayabilmek anlamına gelir. Yazma izinleri (2) dizinin içeriğini değiştirme izni verir. Dosya ekleme ve kaldırma, izinleri değiştirme vb. İma etmek. Yürütme izni (1), o dizine girme hakkına sahip olduğunuz anlamına gelir. İkincisi olmadan dizinin daha derinlerine inmek imkansızdır. Bir dosyanın içeriğinin değiştirilmesi gerektiğinde, web sunucusunun okuma, yazma ve yürütme izinlerine ihtiyacı vardır. Bunun için grubun 7 rakamına ihtiyacı var.
İkinci ifade, OP'nin sorusundadır:
find %DOCUMENT_ROOT%/database -type f -exec chmod 760 {} \;
Bir belgeyi okuyup yazabilmek gerekir, ancak dosyayı yürütmek gerekli değildir. Dosyaların sahibine 7, gruba 6 verilir. Web sunucusunun içeriğini değiştirmek için dosyayı yürütme iznine sahip olması gerekmez. Bu yazma izinleri yalnızca o dizindeki dosyalara verilmelidir.
Diğer tüm kullanıcılara herhangi bir izin verilmemelidir.
Dosyalarının değiştirilmesi gerekmeyen dizinler için 5 grup izinleri yeterlidir. İzinler ve bazı örneklerle ilgili belgeler:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.linux.org/threads/file-permissions-chmod.4094/
php.ini
Dosya erişimini engelleyebilecek herhangi bir şey için dosyaya baktınız mı ?