Właśnie podkręciłem pudełko Ubuntu 11.10, a następnie pobiegłem, apt-get install apache2 php5
aby 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:
- Kto powinien działać jako apache?
- W jakich grupach powinien znajdować się ten użytkownik?
- 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?
- 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 -al
listę zawartości, widzę /var
:
drwxr-xr-x 13 root root 4096 2012-02-04 20:47 var/
Jeśli cd
wejdę var
i ls -al
zobaczę:
drwxr-xr-x 2 root root 4096 2012-02-04 20:47 www/
Wreszcie w środku /var/www
widzę:
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.php
z 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/envvars
pliku:
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/apache
skryptu, kiedy system się uruchamiał, a pozostałe jako www-data
odradzane od pierwszego. Czy to jest poprawne?
Następnie, jeśli wpisuję, groups www-data
to widzę www-data : www-data
- więc wygląda na to, że jest tylko w www-data
grupie. 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-data
i chcę, aby apache mógł czytać katalog, x
bit 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+r
bit 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, suphp
a phpsuexec
któ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, chown
aby grupa katalogów wordpress należała do www-data
i 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ń
- Kto powinien działać jako apache?
- W jakich grupach powinien znajdować się ten użytkownik?
- 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?
- 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?