Dlaczego / var / www nie powinien mieć chmod 777

67

Podczas tworzenia strony na komputerze lokalnym czasami pojawia się błąd „Odmowa zezwolenia”, który mogę rozwiązać, uruchamiając chmod -R 777 /var/www. Jednak ludzie mówią mi, że jest to zły pomysł ze względów bezpieczeństwa.

Dlaczego nie /var/wwwmiałby mieć chmod 777?

Luis Alvarado
źródło
Chciałbym polecić ten wątek nad @ serverfault.com. Wykonuje świetną robotę, podając przykładową konfigurację apache2 i uprawnień. serverfault.com/q/6895/57036 PS Nie mogę komentować, więc muszę to dodać jako odpowiedź.
MystaMax

Odpowiedzi:

80

777 jest ogólnie złym pozwoleniem i pokażę ci, dlaczego.

Pomimo tego, jak może wyglądać w kasynie lub Las Vegas, 777 nie oznacza dla ciebie jackpota. Raczej jackpot dla każdego, kto chce zmodyfikować twoje pliki. 777 (i jego brzydki kuzyn 666) zezwalają na uprawnienia do odczytu i zapisu (aw przypadku 777 - Wykonaj) innym . Możesz dowiedzieć się więcej o tym, jak działają uprawnienia do plików , ale w skrócie istnieją trzy grupy uprawnień: właściciel, grupa i inne . Ustawiając uprawnienia na 6 lub 7 ( rw-lub rwx) dla innych , dajesz każdemu użytkownikowi możliwość edycji tych plików i folderów oraz manipulowania nimi. Zazwyczaj, jak można sobie wyobrazić, jest to szkodliwe dla bezpieczeństwa.

Oto mój przykład:

marco@desktop:~/Projects/AskUbuntu/20105$ cd ..
marco@desktop:~/Projects/AskUbuntu$ chmod 0777 20105
marco@desktop:~/Projects/AskUbuntu$ cd 20105/
marco@desktop:~/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:32 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
marco@desktop:~/Projects/AskUbuntu/20105$ touch test
marco@desktop:~/Projects/AskUbuntu/20105$ chmod 0666 test 

Do tej pory utworzyłem folder i utworzyłem plik z „złymi” uprawnieniami (777 i 666). Teraz przełączę się na innego użytkownika i spróbuję manipulować tymi plikami.

marco@desktop:~/Projects/AskUbuntu/20105$ sudo su - malicious
malicious@desktop:~$ cd /home/marco/Projects/AskUbuntu/20105
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls
test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ ls -lah
total 8.0K
drwxrwxrwx 2 marco marco 4.0K 2011-01-04 20:33 .
drwxr-xr-x 3 marco marco 4.0K 2011-01-04 20:32 ..
-rw-rw-rw- 1 marco marco    0 2011-01-04 20:33 test
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ touch bad
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ echo "OVERWRITE" > test 
malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cat test 
OVERWRITE

Jako „złośliwy” użytkownik byłem w stanie umieścić pliki w katalogu i wstrzyknąć tekst do już istniejących plików. Podczas gdy poniżej, w katalogu z 755 i plikami z 644, widzę wewnętrzne pliki i katalogi, ale nie mogę edytować plików ani tworzyć nowych:

malicious@desktop:/home/marco/Projects/AskUbuntu/20105$ cd /home/marco/Projects
malicious@desktop:/home/marco/Projects$ touch hey
touch: cannot touch `hey': Permission denied

W przypadku uprawnień Apache będziesz chciał trzymać się 0755 i 0644 (AKA umask 022) odpowiednio dla folderów i plików. Dzięki temu, jako właściciel plików, możesz je edytować i nimi manipulować, a Apache zapewnia minimalny poziom dostępu niezbędny do działania.

Marco Ceppi
źródło
13
Przykro mi z powodu tego języka, ale to jest kpiąca odpowiedź. Dziękuję Marco.
Luis Alvarado,
Co się stanie, jeśli utworzysz użytkowników tylko dla osób, które mogą swobodnie zarządzać folderem / var / www? Używam dedykowanych maszyn wirtualnych dla każdego serwera, który uruchamiam i zastanawiam się, czy nadal jest prawdą, że powinieneś być bardzo ostrożny.
UrkoM,
1
@UrkoM Nigdy nie możesz być zbyt ostrożny. Jeśli chcesz, aby ludzie mieli dostęp do tych samych plików, możesz podnieść uprawnienia grupy do 6/7 (0664/0775) i dodać każdego użytkownika do tej grupy. Chociaż ta konfiguracja (i ta, którą opisałem w mojej odpowiedzi) nie spełnia wszystkich kryteriów, powiedziałbym, że dobre 90% czasu 0755/0644 to uprawnienia, których będziesz chciał użyć. Jeśli masz tylko systemy „jednego użytkownika”, ryzyko posiadania innych z uprawnieniami do zapisu nie jest tak duże.
Marco Ceppi
4
@UrkoM Inną rzeczą do rozważenia jest to, że istnieje wielu „użytkowników”, którzy nie reprezentują prawdziwych ludzi, ale istnieją, aby niektóre usługi mogły działać z ograniczonymi możliwościami (głównie ze względów bezpieczeństwa, ale także w celu zmniejszenia szkód, które mogą wystąpić od błędu stabilności). Przeglądać zawartość /etc/passwdi zobaczysz użytkowników, takich jak mail, newsi nobody. Nawet jeśli jest to w porządku dla wszystkich prawdziwych użytkowników twojego systemu, aby móc modyfikować zawartość /var/www, nie oznacza to, że chcesz, aby wszystkie procesy były uruchamiane, ponieważ ci „sztuczni” użytkownicy mogą to zrobić.
Eliah Kagan,
1) Jak najprostsza odpowiedź. Nie wyjaśnia, w jaki sposób Apache lub Nginx mogą manipulować folderami lub plikami. Apache lub Nginx są serwery, dzięki czemu aplikacje nie są one swoją „złośliwy” użytkownik, nie można wpisać ls -lah, touch badalbo jakieś inne polecenia. Jak mogą manipulować folderami i plikami? 2) Dziedziczenie. Nie uwzględniono żadnego dziedziczenia między folderami i zawartymi w nich plikami. Istnieją co najmniej 2-3 krok przed pliku: /var, /var/www, /var/www/project. Jakie uprawnienia użytkownika / grupy powinny /varmieć? Jakie uprawnienia użytkownika / grupy powinny /var/wwwmieć? I tak dalej. Jak współpracują?
Zielony
15

Zasadniczo, posiadanie uprawnień 777 nie spowoduje, że zostaniesz zhakowany na własną rękę, ale jeśli ktoś w ogóle gdzieś się pojawi, możesz go wykorzystać do eskalacji uprawnień i uzyskania pełnej kontroli nad komputerem. Najgorsze jest to, że twoje uprawnienia używają „7” - oznacza to uprawnienia do odczytu, zapisu i wykonywania .

Powiedzmy, że haker chce przejąć twój komputer. Może połączyć się z twoim komputerem za pomocą przeglądarki internetowej, łącząc się z http://yourcomputer.example.com:80/. Jeśli masz dostępne strony, które pozwalają mu przesyłać obrazy, może zmienić nazwę pliku wykonywalnego na „.jpg” i przesłać go na serwer. Teraz przegląda ten plik w przeglądarce i uruchamia go, ponieważ Linux nie dba o rozszerzenie, widzi tylko, że jest to plik wykonywalny. To może nie dać mu wiele, ale ponieważ w ogóle działało, wie, że działało jako użytkownik apache. Następnie przesyła zmodyfikowaną wersję, która będzie edytować pliki konfiguracyjne apache, zapewniając mu jeszcze większy dostęp - powiedzmy, że apache wyświetli zawartość / etc / passwd. Następnie może wykorzystać te informacje, aby zobaczyć, którzy użytkownicy istnieją w systemie. Następnie może połączyć się za pomocą ssh i spróbować wspólnych haseł, aby zalogować się jako ci użytkownicy - jeśli to nie zadziała, przejdzie do użycia pełnego ataku brute-force. Jeśli wejdzie jako użytkownik z dostępem sudo,

Teraz możesz powiedzieć, że to mało prawdopodobne lub że nie tak działałby prawdziwy haker. To prawda, ale chodzi o to, że ustawiając pliki na chmod 777, otworzyłeś lukę w zabezpieczeniach, z której haker może korzystać w dowolny sposób.

Jeśli zamiast tego zastosujesz się do zasady najmniejszych uprawnień , dziura ta nie występuje, a Twój system jest o wiele trudniejszy do zhakowania. Chociaż trudniej jest robić rzeczy właściwie, nadal powinieneś dołożyć wszelkich starań, aby to zrobić.

ImaginaryRobots
źródło
+1 za „toehold” i „escalate”. Dobrze opisuje tę koncepcję.
Kari Kääriäinen
3
Czy możesz wyjaśnić, w jaki sposób plik ukryty jako jpg może być wykonany na serwerze?
Anurag Peshne