Buradaki çoğu cevap akılda güvenlik ile yazılmaz. sudoHer seferinde koşmanın pek akıllıca olmadığını hissetmek güzel . Bir yazım hatası yaparsanız (örneğin, yanlış bir yerde tek bir beyaz boşluk: sudo rm -rf / var/www/dir yürütme! ), Sisteminizi çöpe atabilirsiniz.
Not: Apache 2.4.7 / Ubuntu 14.04 ile başlayarak, /var/wwwtaşındı /var/www/htmlbuna göre bu cevap komutları ayarlayın.
Görmek:
Kötü fikirler:
chmod 777(sagarchalise) - Bu, sisteminize erişimi olan herkesin dizinlere ve dosyalara girmesini ve böylece davetsiz misafirin www-datakullanıcı altında herhangi bir kodu çalıştırmasını sağlar
chgrp -R www-data $HOME(koçanı) - bu www-data, ana dizindeki herhangi bir dosyayı okumanıza veya yazmanıza izin verir . Bu, En Az Ayrıcalık kuralını akılda tutmuyor
chown -R $USER:$USER /var/www(kv1dr) - dünya üzerinde okuma izinleri olmadığı sürece, /var/wwwaltında çalışan web sunucusu www-datadosyaları okuyamaz (sunamaz) . Dosya herkese açık bir HTML belgesi ise, dünya dosyayı okuyabilirse sorun olmayabilir. Ancak, dosya parola içeren bir PHP dosyasıysa, öyledir.
NOT : Aşağıdaki çözümlerde, www-datayazma ayrıcalıkları verdim . Bununla birlikte, şunu /usr/share/doc/base-passwd/users-and-groups.txt.gzbelirtir:
www veri
Bazı web sunucuları www-data olarak çalışır. Web içeriği bu kullanıcıya ait olmamalıdır, aksi halde tehlikeye atılmış bir web sunucusu bir web sitesini yeniden yazabilir. Web sunucuları tarafından yazılan veriler www verisine aittir.
Mümkün olan yerlerde, do not yazma izni vermek www-datagrubunda. www-datasadece web sunucusu hizmet verebilmesi için dosyaları okuyabilmesi gerekir. www-dataİhtiyaç yazma izinlerinin alındığı tek durum , yükleme yapan dizinler ve yazılması gereken diğer yerler içindir.
1. Çözüm
Kendinizi www-datagruba ekleyin ve /var/wwwdizinin üzerindeki setgid bitini ayarlayın, böylece yeni oluşturulan tüm dosyalar da bu gruba geçer.
sudo gpasswd -a "$USER" www-data
Önceden oluşturulan dosyaları düzeltin (yalnızca kullanıcı olduğunuzu varsayarak /var/www):
sudo chown -R "$USER":www-data /var/www
find /var/www -type f -exec chmod 0660 {} \;
sudo find /var/www -type d -exec chmod 2770 {} \;
(daha güvenli: web sunucusu tarafından yazılabilir olması için 640veya veya 2750manuel olarak kullanın chmod g+w file-or-dir)
2. Çözüm
Her proje için ana dizininize bir bağlantı oluşturun. Projenizi bulunduğunu ~/projects/foove sizin yerleştirilmesini istediğinizi söyleyin /var/www/foo, çalıştırın:
sudo ln -sT ~/projects/foo /var/www/foo
Giriş dizininizde other(güvenlik nedeniyle ) ayarlanmış yürütme biti (alçalma) yoksa , grubunu değiştirin www-data, ancak çalıştırma biti olarak ayarlayın (okuma / yazma yok). İçin de yapın ~/projectso www dışındaki projeler içerebilir olarak klasörde. ( sudoKullanıcıyı daha önce www-datagruba eklediyseniz buna gerek yoktur .)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Grubun Set www-dataüzerinde ~/projects/foove web sunucusu okumak ve dosyaları ve dosyaların + dizinlere yazmak ve dizinlere inmek için izin:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Daha güvenli: varsayılan olarak 640 ve 2750'yi kullanın ve web sunucusu kullanıcısı tarafından yazılabilmesi gereken dosyaları ve dizinleri elle chmodlayın. Setgid biti sadece yeni yaratılan her dosyanın ~/projects/foogrup tarafından erişilebilir olmasını istiyorsanız eklenmelidir .
Artık sitenize erişebilir http://localhost/foove proje dosyalarınızı düzenleyebilirsiniz ~/projects/foo.
Ayrıca bakınız