Buradaki çoğu cevap akılda güvenlik ile yazılmaz. sudo
Her 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/www
taşındı /var/www/html
buna 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-data
kullanı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/www
altında çalışan web sunucusu www-data
dosyaları 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-data
yazma ayrıcalıkları verdim . Bununla birlikte, şunu /usr/share/doc/base-passwd/users-and-groups.txt.gz
belirtir:
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-data
grubunda. www-data
sadece 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-data
gruba ekleyin ve /var/www
dizinin ü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 640
veya veya 2750
manuel 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/foo
ve 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 ~/projects
o www dışındaki projeler içerebilir olarak klasörde. ( sudo
Kullanıcıyı daha önce www-data
gruba eklediyseniz buna gerek yoktur .)
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Grubun Set www-data
üzerinde ~/projects/foo
ve 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/foo
grup tarafından erişilebilir olmasını istiyorsanız eklenmelidir .
Artık sitenize erişebilir http://localhost/foo
ve proje dosyalarınızı düzenleyebilirsiniz ~/projects/foo
.
Ayrıca bakınız