Nigdy nie powinieneś prowadzić strony internetowej z katalogu domowego . ZAWSZE. W przeciwnym razie serwer sieciowy miałby możliwość przechodzenia przez strukturę katalogów, ale także do (katalogu domowego użytkownika, gdzie możemy spróbować zobaczyć, co jeszcze istnieje w katalogu użytkownika), a także innych podfolderów tam. Źle skonfigurowany lub źle skonfigurowany lub niepoprawny serwer sieciowy może w ten sposób spowodować masowy wyciek danych lub utratę danych uwierzytelniających, co naraziłoby Twoje dane osobowe i dane logowania na różne rzeczy. Podejście do dowiązania symbolicznego nie pomaga ani z tego samego powodu, co próba nadania Apacheowi uprawnień do odczytu- serwer WWW musi mieć możliwość przeglądania twojego katalogu domowego, aby dostać się do lokalizacji, w której znajduje się dowiązanie symboliczne/home/
/home/$USER/
/home/andre/www/moodle
/var/www/html
wskazywanej , co nadal stanowi zagrożenie bezpieczeństwa.
Po pierwsze, użyj sudo cp -r /home/andre/www/moodle/ /var/www/html/
. Spowoduje to skopiowanie twoich plików do /var/www/html
twojego katalogu domowego. Następnie powtórzymy uprawnienia, abyś ty i serwer sieciowy mieli dostęp do wszystkiego w tym katalogu i dali użytkownikowi pełny odczyt / zapis do wszystkich plików i katalogów. Wtedy będziesz musiał poćwiczyć tylko /var/www/html
dla swojej witryny.
Dzieje się tak, cztery kroki po skopiowaniu danych z powrotem do /var/www/html
:
- Daj Apacheowi dostęp do folderów i plików, aby mógł obsługiwać witrynę bez błędów 403.
- Daj swojemu właścicielowi „właściciela” nad plikami i folderami oraz daj sobie do odczytu / zapisu do wszystkich plików i folderów, a także możliwość przeglądania katalogów.
- (Opcjonalne, ale zalecane) Ustaw tak, aby wszystkie pliki lub foldery utworzone odtąd w całej strukturze katalogów miały ustawioną grupę
www-data
.
- (Opcjonalnie) Ostateczne czyszczenie zabezpieczeń, w którym konfigurujemy uprawnienia, aby użytkownik i serwer sieciowy mogli zobaczyć dane witryny, ale inni użytkownicy nie mogą uzyskać dostępu do plików ani struktury katalogów witryny.
(1) Zezwól Apacheowi na dostęp do folderów i plików.
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
To rekurencyjnie ustawia „grupę” www-data
dla folderów i plików. Daje to następnie serwerowi sieci Web uprawnienia do rekurencji i uzyskania dostępu do struktury katalogów głównych dokumentów serwisu (+x
tylko dla katalogów). Następnie zapewnia również, że serwer WWW ma uprawnienia do odczytu wszystkich plików, dzięki czemu można odbierać dane witryny.
Mogą wystąpić sytuacje, w których trzeba zezwolić serwerowi sieciowemu na zapis do pliku lub katalogu - można to zrobić, wykonując sudo chmod g+w /var/www/html/PATH
(gdzie PATH
jest ścieżka do pliku lub folderu w strukturze katalogów, w której należy zastosować uprawnienia do zapisu dla serwera WWW).
OSTRZEŻENIE : Istnieje wiele przypadków, w których może to ujawnić „bezpieczne” informacje o konfiguracji witryny (takie jak poświadczenia dostępu do bazy danych itp.), A użytkownik powinien usunąć „inne” uprawnienia dostępu do tych danych w poszczególnych plikach lub katalogach za pomocą następujące: sudo chmod o-rwx /var/www/html/FILEPATH
(zastępując FILEPATH
ścieżkę względem /var/www/html
folderu dla pliku).
Należy również pamiętać, że może być konieczne ponowne uruchomienie tych poleceń w przyszłości, jeśli „nowe pliki” napotkają problemy 403, aby nadać serwerowi internetowemu prawidłowe uprawnienia, aby móc nadal uzyskiwać dostęp do plików i folderów tworzonych lub kopiowanych i nie www-data
ustawiają poprawnie grupy.
(2) Nadaj właścicielowi uprawnienia do odczytu / zapisu do folderów i plików oraz zezwól na dostęp do folderów w celu przejścia przez strukturę katalogów.
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
Zastąp USER
w pierwszym poleceniu własną nazwę użytkownika!
Robimy tutaj trzy rzeczy. Po pierwsze, tworzymy użytkownika, który będzie „właścicielem” wszystkich plików i katalogów w /var/www/html
. Następnie ustawiamy uprawnienia do odczytu i zapisu w folderach i zezwalamy na dostęp do folderów, aby do nich wejść ( +x
pozycja w elementach katalogu). Następnie ustawiamy wszystkie pliki, aby miały uprawnienia do odczytu / zapisu dla właściciela, które właśnie ustawiliśmy.
(3) (Opcjonalnie) Upewnij się, że każdy nowy plik jest tworzony www-data
jako użytkownik „dostępu”.
sudo find /var/www/html -type d -exec chmod g+s {} +
To ustawia bit „set gid” dla grupy w katalogach. Pliki i foldery utworzone w tych katalogach zawsze będą miały www-data
jako grupę, umożliwiając dostęp do serwera WWW.
(4) (opcjonalnie) Ostateczne czyszczenie zabezpieczeń, jeśli nie chcesz, aby inni użytkownicy mogli widzieć dane
Potrzebujemy twojego użytkownika, aby zobaczyć katalogi i pliki. Potrzebujemy do tego również serwera WWW. Możemy nie chcieć, aby inni użytkownicy systemu (oprócz roota) widzieli dane. Więc nie dajmy im tego dostępu i spraw, aby tylko twój użytkownik i serwer sieciowy mogli zobaczyć dane.
sudo chmod -R o-rwx /var/www/html/
UWAGA: Nie będziesz musiał ponownie uruchamiać tego później ani edytować uprawnień dla kategorii „inne” uprawnień tutaj. Jeśli „inni” użytkownicy nie mogą się dostać /var/www/html/
(nie mają wymaganego +x
bitu)/var/www/html
aby przejść do struktury +r
plików i struktury katalogów, ani bitu do odczytania list plików), wówczas uprawnienia dla elementów w tym katalogu dla innych użytkowników lub grupy tak naprawdę nie będą miały większego znaczenia.
Jest też nieco mniej inwazyjne rozwiązanie tego problemu, chociaż nie gwarantuje się, że będzie działać dla wszystkich nowych plików, ani nie będzie działać na wszystkich systemach plików , w tym na listach kontroli dostępu do plików. To pozwala pozostawić własność plików www-data
na rzeczy, ale daje skuteczne prawa właściciela, do wszystkich celów i celów, nawet jeśli osobiście nie jesteś właścicielem plików.
To rozwiązanie jest nieco mniej inwazyjne i pozwala na posiadanie katalogu i wszystkich plików będących własnością www-data:www-data
lub, root:www-data
ale także daje ci dostęp. Korzysta z list kontroli dostępu , dzięki czemu wielu użytkowników ma uprawnienia bez konfigurowania poszczególnych grup. Pozwala to również naroot
www-data
użytkownikom lub użytkownikom systemu na posiadanie plików, ale pozwala także dodawać dodatkowe uprawnienia dla poszczególnych przypadków i dostosowywać uprawnienia dla niektórych użytkowników, aby mogli czytać, ale nie edytować, i tak dalej.
Zakładając, że nadal pracujemy /var/www/html/
i nie chcemy, aby szpiegujący użytkownicy inni niż my i system (i root oczywiście) widzieli nasze dane, musimy wykonać następujące czynności:
- Oddaj własność użytkownikowi systemu serwera WWW
www-data
.
sudo chown -R www-data: www-data / var / www / html
- Rekurencyjnie daje ci możliwość odczytu / zapisu plików, jednocześnie dając innym użytkownikom (wyłączając
www-data
i root
oczywiście) dostęp do plików.
sudo find / var / www / html -type f -exec setfacl -mu: NAZWA UŻYTKOWNIKA: rw -m inny :: --- {} \;
- Rekurencyjnie daj sobie odczyt / zapis / przeglądanie katalogów, usuń dostęp do folderów dla innych użytkowników (z wyłączeniem
www-data
i root
) i ustaw to jako „domyślną” listę ACL dla nowych plików w katalogach.
sudo find / var / www / html -type d -exec setfacl -d -mu: NAZWA UŻYTKOWNIKA: rwx -mo :: --- {} \;
- Musimy także ustawić
setgid
bit dla wszystkich katalogów, aby po utworzeniu pliku serwer WWW nadal mógł uzyskać do niego dostęp, jak www-data
za pośrednictwem uprawnień grupy.
sudo znajdź / var / www / html -type d -exec chmod g + x {} \;
A teraz masz dostęp do wszystkich katalogów i nie musiałeś odbierać dostępuwww-data
którego pomoc może, ponieważ serwer WWW może nadal tworzyć pliki wszędzie tam, gdzie jest to potrzebne (takie jak interfejsy oparte na PHP, mające własne katalogi pamięci podręcznej itp. do utworzenia i zapisania w celu prawidłowego działania).
Jedyne zastrzeżenie: jeśli ręcznie tworzysz nowe pliki, musisz je odpowiednio zmienić, aby nadać serwerowi własność. To proste sudo chown www-data:www-data filename
, a listy kontroli dostępu powinny nadal zapewniać skuteczne prawa właściciela pliku.
Istnieje wiele przypadków, w których musiałem to zrobić jako administrator systemu dla pewnego rodzaju niestandardowego dostępu bez zmiany właścicieli danego pliku. Działa to, ale ma własne problemy, ponieważ nie każdy system plików obsługuje listy dostępu do plików.
+x
do plików dawałby uprawnienia do plików wykonywalnych i nie chcemy, aby pliki PHP były wykonywane, koniecznie za pomocą wiersza poleceń PHP lub jako pliki wykonywalne na samym serwerze - chcemy, aby były przetwarzane przez parser PHP na serwerze WWW (i my nie potrzebujesz plików PHP, aby+x
parser PHP mógł je odczytać i przetworzyć). Katalogi potrzebują+x
, aby umożliwić przechodzenie przez katalogi - to znaczy, jeśli katalog nie jest,+x
a ja nie jestem rootem, nie mogę dostać się do katalogu, co jest problemem z Apache, który nie działa z twoimi dowiązaniami symbolicznymi i twoim domem informator.