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?
Odpowiedzi:
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ń.
źródło
To nie jest prawda, nie musisz ustawiać
rwx
na „inne”. Powinieneś zmienić właściciela i / lub grupę określonego folderu / pliku, który próbujesz chronić. Na przykład:Teraz tylko członkowie grupy
www-data
mogą 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.
źródło