Jakim użytkownikiem powinien być apache i PHP? Jakie uprawnienia powinny mieć pliki / var / www?

41

Właśnie podkręciłem pudełko Ubuntu 11.10, a następnie pobiegłem, apt-get install apache2 php5aby zainstalować na nim apache2 i PHP 5. Teraz działa jako „serwer WWW” i ładuje „To działa!” strona. Teraz próbuję zaostrzyć zabezpieczenia i mam następujące pytania dotyczące serwerów linuksowych:

  1. Kto powinien działać jako apache?
  2. W jakich grupach powinien znajdować się ten użytkownik?
  3. Jakie pakiety mogą sprawić, że PHP (i Apache?) Będą działać jako właściciel plików? (jak na współdzielonych hostach) Czy powinienem używać tych pakietów? Czy są łatwe / wykonalne w małym systemie?
  4. Jakie powinny być domyślne uprawnienia do plików i folderów udostępnianych w Internecie przy uruchomionym apache www-data? Dla apache / php działającego jako użytkownik?

Zrobiłem następujące rzeczy, sprawdzając domyślną konfigurację:

Struktura pliku

Kiedy cd /robię ls -allistę zawartości, widzę /var:

drwxr-xr-x 13 root root  4096 2012-02-04 20:47 var/

Jeśli cdwejdę vari ls -alzobaczę:

drwxr-xr-x  2 root root  4096 2012-02-04 20:47 www/

Wreszcie w środku /var/wwwwidzę:

drwxr-xr-x  2 root root 4096 2012-02-04 20:47 ./
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 ../
-rw-r--r--  1 root root  177 2012-02-04 20:47 index.html

Najważniejsze jest to, że jak dotąd wszystkie te pliki należą root:root, pliki mają uprawnienia 644, a katalogi mają uprawnienia 755.

Uprawnienia Apache

Jeśli utworzę plik jako root /var/www/test.phpz zawartością:

<?php echo shell_exec('whoami');

i załaduj ten plik do przeglądarki www-data, która mi mówi , która jest taka sama jak w /etc/apache2/envvarspliku:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

Jeśli tak ps aux | grep -i apache, widzę następujące informacje:

root      1916  1.2 104664  7488 Ss   20:47 /usr/sbin/apache2 -k start
www-data  1920  0.8 105144  5436 S    20:47 /usr/sbin/apache2 -k start
www-data  1921  1.0 105144  6312 S    20:47 /usr/sbin/apache2 -k start
www-data  1922  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1923  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1924  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start
www-data  1925  0.7 104688  4624 S    20:47 /usr/sbin/apache2 -k start

Kto więc działa jako apache? Wygląda na to, że być może pierwszy proces jest taki root, jak na przykład ze /etc/init.d/apacheskryptu, kiedy system się uruchamiał, a pozostałe jako www-dataodradzane od pierwszego. Czy to jest poprawne?

Następnie, jeśli wpisuję, groups www-datato widzę www-data : www-data- więc wygląda na to, że jest tylko w www-datagrupie. Domyślam się, że to także standardowa praktyka.

Shared Hosting and Security

Więc jeśli dobrze rozumiem, jeśli apache działa jako www-datai chcę, aby apache mógł czytać katalog, xbit należy ustawić dla grupy world (other) ( o+x), a także dla wszystkich elementów nadrzędnych katalogi na całej długości łańcucha ( www, var). A jeśli chcę, aby apache mógł czytać z pliku, o+rbit należy ustawić.

Niestety uważam, że wprowadza to lukę w zabezpieczeniach dla wielu aplikacji i / lub wielu użytkowników w tym samym systemie Linux: Wszystkie pliki internetowe muszą być czytelne dla całego świata, dlatego też są dostępne dla innych aplikacji i innych użytkowników systemu. Jeśli jedna aplikacja zainstalowana w systemie ma lukę w zabezpieczeniach, która zezwala na surowe, nieważne dane wejściowe użytkownika, które zostały następnie wykonane przez PHP, zdalny atakujący może następnie przeglądać wszystkie inne pliki w systemie internetowym, które można odczytać na całym świecie. Podobnie, jeśli w pudełku było wielu użytkowników, a użytkownik znał ścieżkę plików internetowych innego użytkownika, mógł wtedy odczytać zawartość pliku (i zobaczyć wrażliwe rzeczy, takie jak parametry połączenia z bazą danych itp.).

Słyszałem o dwóch pakietów, suphpa phpsuexecktóre dotyczą pozwalając pliki użytkowników, aby Mu służono się «jak oni» na wspólnym systemie. Jedną z zalet tego jest to, że pozwala aplikacjom internetowym (takim jak Wordpress) tworzyć i modyfikować pliki - bardzo pomocne przy dodawaniu motywów, wtyczek i aktualizacji oprogramowania. Oczywiście prawdopodobnie bezpieczniej jest robić te rzeczy ręcznie, ale czy można pójść na kompromis z jednym z wyżej wymienionych pakietów? A może poprzez użycie, chownaby grupa katalogów wordpress należała do www-datai ustawiła bit lepki na group ( g+s)?

Użyłem ich tylko jako użytkownik końcowy firmy hostingowej, więc nie znam ich szczegółów i czy można je nawet zainstalować w małym systemie, czy też są jakieś inne środki bezpieczeństwa, których powinienem użyć, ale pomyślałem, że wspomnę o nich tutaj, ponieważ wydają się one jednym z możliwych sposobów rozwiązania niektórych moich obaw.

Powrót do pytań

  1. Kto powinien działać jako apache?
  2. W jakich grupach powinien znajdować się ten użytkownik?
  3. Jakie pakiety mogą sprawić, że PHP (i Apache?) Będą działać jako właściciel plików? (jak na współdzielonych hostach) Czy powinienem używać tych pakietów? Czy są łatwe / wykonalne w małym systemie?
  4. Jakie powinny być domyślne uprawnienia do plików i folderów udostępnianych w Internecie przy uruchomionym apache www-data? Dla apache / php działającego jako użytkownik?
cwd
źródło
Możliwy duplikat serverfault.com/questions/339948/…
AD7six

Odpowiedzi:

17
  1. nie rootować
  2. nie rootować
  3. SuEXEC
  4. Zależy. Domyślnie bezpieczne są pliki 644 dla plików i 755 dla folderów.

Nie zmieniaj własności niczego na www-data, chyba że chcesz, aby php mógł edytować zawartość tego pliku / folderu

Niezależnie od wszystkiego, co robisz: foldery muszą mieć uprawnienia do odczytu i wykonywania, aby użytkownik mógł znaleźć pliki; pliki wymagają uprawnień do odczytu, aby użytkownik mógł je odczytać. Jeśli podczas zmiany rzeczy pojawią się błędy uprawnień - udało Ci się usunąć te zasadniczo wymagane uprawnienia.

Jeśli nie piszesz żadnych plików za pośrednictwem aplikacji php, możesz zostawić pliki należące do ciebie: ciebie. W tej sytuacji obowiązuje zezwolenie światowe (xx4 / 5).

Jeśli pozostawisz pliki jako posiadane przez Ciebie: masz uprawnienia do pliku 644 (pliki), co oznacza, że tylko ty możesz edytować pliki stron internetowych - www-data nie jest tobą - więc nie może edytować plików.

Jeśli chcesz ograniczyć dostęp do apache + you i zablokuj cały pozostały dostęp chown -R you:www-data *. Z uprawnieniami do plików 640 i uprawnieniami do folderów 750 możesz edytować, dane www mogą czytać - ponieważ wtedy apache odczytuje uprawnienia grupy (x4 / 5x).

Ograniczyć do minimum ścieżki ty pozwalają apache / php do zapisu - jeżeli istnieje tmp reż potrzeb aplikacji na zapis - pozwalają na zapisywanie do tylko tego folderu - i za wszelkie zapisywalnych lokalizacjach, jeśli w ogóle możliwe, upewnij się, że znajduje się poza rootuj dokument lub podejmij kroki, aby ta zapisywalna ścieżka nie była dostępna w Internecie.

Pamiętaj, że „ty” nie powinien być rootem. Zezwalanie na bezpośredni dostęp ssh jako root jest wskaźnikiem innych braków bezpieczeństwa (takich jak nie blokowanie logowania hasłem), ale to jest cała masa pytań.

AD7six
źródło
10

Więc jeśli dobrze rozumiem, jeśli apache działa jako dane www i chcę, aby apache mógł czytać katalog, bit x musi być ustawiony dla grupy świata (innej) (o + x), i to również należy ustawić we wszystkich katalogach nadrzędnych w całym łańcuchu (www, var). A jeśli chcę, aby apache mógł czytać z pliku, należy ustawić bit o + r.

To nie jest prawda, nie musisz ustawiać rwxna „inne”. Powinieneś zmienić właściciela i / lub grupę określonego folderu / pliku, który próbujesz chronić. Na przykład:

chown -R cwd:www-data /var/www/cwd.com
chmod 750 /var/www/cwd.com

Teraz tylko członkowie grupy www-datamogą czytać /var/www/cwd.com. I tylko ty (cwd) możesz do niego pisać. Jeśli chcesz zezwolić aplikacjom (przez Apache) na zapisywanie / modyfikowanie plików w tym katalogu, możesz także chmod na 770.

Myślę, że dotyczy to wszystkich twoich problemów, nie widzę powodu, by zmieniać użytkownika, na którym działa apache.

Rob Wouters
źródło
2
Dziękuję Ci. Nie jest to złe rozwiązanie, ale jeśli jeden użytkownik zna ścieżkę do pliku innego użytkownika, mógłby napisać skrypt, który odczytałby zawartość pliku, a następnie załadować go do przeglądarki internetowej, która uruchomiłaby go jako apache - skutecznie czytając plik z katalogu drugiego użytkownika. Czy to ma sens? Nawet jeśli ustawisz uprawnienia do folderu na 750, nadal istnieje potencjalna luka w zabezpieczeniach.
cwd
@cwd skończyło się to rozgryzać?
Ricky Boyce,
@cwd Dokładnie takie pytanie miałem. Właśnie dlatego zadałem to pytanie: serverfault.com/questions/807723
Nandakumar Edamana,