Większość odpowiedzi tutaj nie jest napisana z myślą o bezpieczeństwie. Dobrze jest mieć wrażenie, że bieganie za sudokażdym razem nie jest zbyt mądre. Jeśli popełnisz literówkę (na przykład pojedynczą białą spację w niewłaściwym miejscu: sudo rm -rf / var/www/dir nie wykonuj! ), Możesz zniszczyć swój system.
Uwaga: Począwszy od Apache 2.4.7 / Ubuntu 14.04, /var/wwwzostał przeniesiony, aby odpowiednio /var/www/htmldostosować polecenia w tej odpowiedzi.
Widzieć:
Złe pomysły:
chmod 777(sagarchalise) - umożliwia to każdemu, kto ma dostęp do twojego systemu, zapis do katalogów i plików, a tym samym pozwala intruzowi na wykonanie dowolnego kodu pod www-dataużytkownikiem
chgrp -R www-data $HOME(cob) - umożliwia www-dataodczyt lub zapis dowolnych plików w katalogu domowym. Nie chodzi tu o zasadę „najmniejszego przywileju”
chown -R $USER:$USER /var/www(kv1dr) - chyba że świat ma uprawnienia do odczytu /var/www, uruchomiony pod nim serwer WWW www-datanie będzie mógł odczytać (serwować) plików. Jeśli plik jest publicznie dostępnym zwykłym dokumentem HTML, może nie być problemem, jeśli świat może go odczytać. Ale jeśli plik jest plikiem PHP zawierającym hasła, to jest.
UWAGA : w poniższych rozwiązaniach przyznałem www-datauprawnienia do zapisu. Jednak /usr/share/doc/base-passwd/users-and-groups.txt.gzstwierdza:
www-data
Niektóre serwery WWW działają jako dane www. Ten użytkownik nie powinien należeć do treści internetowych, ponieważ zaatakowany serwer sieciowy mógłby przepisać witrynę. Dane zapisane przez serwery WWW będą własnością www-data.
Tam, gdzie to możliwe, nie udzielaj uprawnień do zapisu www-datagrupie. www-datamusi tylko być w stanie odczytać pliki, aby serwer mógł je obsłużyć. Jedyny przypadek, w którym www-datapotrzebne są uprawnienia do zapisu, dotyczy katalogów przechowujących przesłane pliki i innych lokalizacji, które należy zapisać.
Rozwiązanie 1
Dodaj się do www-datagrupy i ustaw bit setgid w /var/wwwkatalogu, aby wszystkie nowo utworzone pliki również dziedziczyły tę grupę.
sudo gpasswd -a "$USER" www-data
Popraw wcześniej utworzone pliki (zakładając, że jesteś jedynym użytkownikiem /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 {} \;
(jeszcze bezpieczniejsze: użyj 640lub 2750ręcznie, chmod g+w file-or-dirktóre muszą być zapisywane przez serwer)
Rozwiązanie 2
Utwórz dowiązanie symboliczne dla każdego projektu do katalogu domowego. Załóżmy, że Twój projekt znajduje się pod adresem ~/projects/fooi chcesz go mieć /var/www/foo, uruchom:
sudo ln -sT ~/projects/foo /var/www/foo
Jeśli twój katalog domowy nie ma ustawionego bitu wykonawczego (zejście) dla other(ze względów bezpieczeństwa), zmień jego grupę na www-data, ale ustaw tylko bit wykonawczy (bez odczytu / zapisu). Zrób to samo dla ~/projectsfolderu, ponieważ może on zawierać inne projekty niż www. (Nie potrzebujesz, sudojeśli wcześniej dodałeś swojego użytkownika do www-datagrupy).
sudo chgrp www-data ~ ~/projects
chmod 710 ~ ~/projects
Ustaw grupę www-datana ~/projects/fooi pozwolić serwer WWW do odczytu i zapisu do plików i katalogów i plików + zejście do katalogów:
sudo chgrp www-data ~/projects/foo
find ~/projects/foo -type f -exec chmod 660 {} \;
find ~/projects/foo -type d -exec chmod 2770 {} \;
Jeszcze bezpieczniej: używaj domyślnie 640 i 2750 i ręcznie chmod pliki i katalogi, które muszą być zapisywalne przez użytkownika serwera WWW. Bit setgid powinien zostać dodany tylko wtedy, gdy chcesz, aby każdy nowo utworzony plik ~/projects/foobył dostępny dla grupy.
Od teraz możesz uzyskiwać dostęp do swojej witryny http://localhost/fooi edytować pliki projektu w ~/projects/foo.
Zobacz też