Rammu ve MV'nin cevaplarını teknik bir çözümle tamamlayacağım. Aşağıdaki her şey yalnızca UNIX benzeri sistemler için geçerlidir.
UNIX dosya modlarından daha güçlü bir araç olan ACL'leri kullanarak bir örnek için chmod / chown bölümünü kaydırın.
Web sunucusu kullanıcı adınızı bulma
İlk olarak, web sunucunuzun altında çalıştığı kullanıcı adını bilmeniz gerekir. Apache kullanıyorsanız, bu olabilir apache
ya httpd
, www-data
Debian benzeri sistemlerde, Apache en On vb www-data
. Nginx için genellikle aynıdır www-data
.
Kontrol etmek için şunu deneyin:
ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1
Bu komutun döndürdüğü kullanıcı adının tutarlı olduğundan emin olun (örneğin,% 99 oranında nginx kullanıyorum, ancak bu komut tomcat7
bir kez yüklediğim bir Java web sunucusu döndürüyor ) .
Web sunucusuna izin verme: chmod
ve kullanmachown
Bir yaparak chmod
şeyleri yapmaya çalışıyordum sihirli yapabilirsiniz 666 veya 777 (kötü dokümantasyon / öğreticiler sorunların bu tür yöneldiği bir çözelti) ki, ama güvensiz olduğunu. 666 veya 777 izinleri vermek "diğerlerine" erişim sağlayacaktır. Bu yüzden sadece Apache değil, aynı zamanda grandmother
ve nsa
(bu kullanıcı hesaplarının makinenizde bulunması şartıyla - ancak gerçekten hayır, lütfen sadece test / sorun giderme için olmadıkça bunu yapmaktan kaçının).
Daha spesifik olmak ve sadece size ve Apache'ye izin vermek daha iyidir. Web sunucusunda dosyalarınız üzerinde tam kontrol sağlamak için dosya grubunuzu değiştirin. Bunu yapmak için sahibini tekrar tekrar değiştirin:
chown -R www-data:www-data your/folder/
Ancak büyük olasılıkla, yalnızca grubu değiştirerek dosyalarınıza tam erişim sağlamak isteyebilirsiniz:
chown -R yourusername:www-data your/folder/
Ardından, chmod
gruba www-data
sizinle aynı izinleri vermek için uygun olanı yapın. Örneğin, geçerli mod 640 ise (sizin için 6, www verileri için 4, diğerleri için 0, -rw-r -----'ye çeviri) 660 (sizin için 6, www- için 6 ) olarak ayarlayın. veri, diğerleri için 0, -rw-rw ---- 'ya çeviri) . Dosya modları hakkında daha fazla bilgi edinmek için rahmu'nun cevabına bakın, eski ama zarif bir mekanizmadır.
Gizli sayıları ile işlemekten kaçınmak için chmod
, bu sözdizimini de kullanabilirsiniz:
chmod -R g+rw your/folder/
" Klasöre ( ), klasörde okuma ve yazma ( ) izinlerini özyinelemeli olarak ( ) g
ekleyin ") anlamına gelir .+
rw
your/folder/
-R
Vakaların% 90'ında bu yeterli olmalıdır.
Tercih ettiğim yöntem: ACL'leri kullanma (Erişim Kontrol Listesi)
Bazen ilk çözüm yeterli olmaz. Çok fazla veri kaydeden ve önbelleğe alan Symfony Framework örneğini alacağım . Bu yüzden uygun klasöre yazma erişimi gerekir.
Ve CLI (kullanıcı hesabım altında) Symfony Konsolu ve Web (web sunucusu kullanıcısı) paralel kullanıyorsanız chmod
/ chown
yöntemi yeterli olmayabilir. Symfony sürekli izinleri değiştirdiği için bu birçok soruna neden oluyor.
Bu durumda, birçok UNIX sistemindeki izinleri yönetmenin daha gelişmiş bir yolu olan ACL'yi (Erişim Kontrol Listesi) kullanacağız.
Burada resmi Symfony belgeleri tarafından verilen komutlar ( lütfen ihtiyaçlarınıza app/cache
ve app/logs
ihtiyaçlarınıza göre değiştirin ):
Destekleyen bir sistemde chmod +a
(yani Debian / Ubuntu değil)
sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
Desteklemeyen bir sistemde chmod +a
(en yaygın)
setfacl
Araca ihtiyacınız olacak ; belki de sisteminizde varsayılan olarak yüklüdür, bu yüzden setfacl -v
komutun mevcut olup olmadığını kontrol etmeyi deneyin .
Komut kullanılamıyorsa ve Ubuntu 14.04+ kullanıyorsanız, aracı yüklemeniz yeterlidir:
sudo apt install acl
Aksi takdirde, bölümünüzün nasıl monte edileceğini değiştirmeniz gerekebileceğinden işletim sistemi belgelerinizi takip edin ( Ubuntu belgeleri burada ).
Ve işte buradayız:
sudo setfacl -R -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:`whoami`:rwX app/cache app/logs
Bu yöntemle hiç problem yaşamadım, memnunum ya da paranız geri.