Apache, suexec, PHP, suPHP

13

Chociaż czuję się komfortowo jako użytkownik Linuksa , mój Linux Admin-fu jest trochę słaby. Dlatego szukam wskazówek dotyczących serwera CentOS, który zamierzam zbudować.

Muszę skonfigurować serwer WWW Apache2 dla kilku naszych klientów. Chcę, aby zawartość internetowa każdego klienta znajdowała się w katalogu domowym ( USERDIRw apache.conf, prawda?) Dla statycznych stron HTML. Chcę, aby Apache działał jako klient ( suexec?). Niektóre z nich będą aplikacjami PHP i mam wrażenie, że też chcę się przyjrzeć suphp.

Zasadniczo chcę wyglądać jak mała wersja udostępnianej firmy hostingowej. Biorąc pod uwagę, jak często te są Myślałam, że łatwo znaleźć prąd piękny Jak to kierować na ustawienie tego wszystkiego, ale do tej pory miałem bardzo mało szczęścia. Podejrzewam, że moje wyszukiwane słowa są wyłączone.

Tak więc pytania (prosimy odpowiedzieć na dowolne lub wszystkie):

  1. Czy ktoś ma jakieś solidne linki do aktualnych / nowoczesnych przewodników, które pomogłyby mi to wszystko skonfigurować? Nie, strona z dokumentacją apache nie jest przewodnikiem ;-)
  2. Skoro mam mieszankę stron statycznych i aplikacji PHP, to czy chcę / muszę zainstalować zarówno suexec, jak i suphp? Jeśli tak, to czy wiąże się to z wyzwaniami, o których powinienem wiedzieć?
  3. Czy powinienem patrzeć na inne opcje zamiast suexec i suphp?

Planuję dać użytkownikom końcowym SSH, SFTP lub SCP dostęp do ich materiałów (jeśli to ma wpływ na cokolwiek).

Z góry dziękuje za twoją pomoc.

[Edytuj] Powinienem był o tym wspomnieć wcześniej: Jednym z głównych celów mojej misji jest emulacja współdzielonego dostawcy hostingu związanego z uprawnieniami do plików i własnością. Naprawdę chciałbym unikać informowania użytkowników o konieczności zmiany takich rzeczy, aby zobaczyć ich uzupełnienia / zmiany.

Chris_K
źródło

Odpowiedzi:

15

Użycie suexec i suphp wymusza inny typ separacji uprawnień niż domyślny.

Domyślnie oddziela się uprawnienia użytkownika od serwera WWW. Oznacza to, że użytkownik jest właścicielem plików i musi udzielić serwerowi sieci Web uprawnień do ich przeglądania i zmieniania.

Model suexec / suphp polega na tym, że serwer WWW (podczas uruchamiania skryptów) działa pod kontem użytkownika, więc strona internetowa ma uprawnienia do robienia wszystkiego, do czego użytkownik ma uprawnienia. W pewnym stopniu usuwa to separację między użytkownikiem a serwerem WWW, ale w zamian wymusza INNE oddzielenie: to znaczy między stroną internetową jednego użytkownika a stroną internetową innego użytkownika na tym samym urządzeniu.

Domyślnie PHP zawsze działa na koncie użytkownika Apache, więc skrypty PHP jednej witryny mogą uzyskiwać dostęp do plików, które mogą mieć skrypty PHP innej witryny. Dlatego jeśli jedno konto na serwerze zostanie zhakowane, infekcja może rozprzestrzenić się na inne. SuPHP zapobiega temu.

Ani suexec, ani suphp nie wpłyną na sposób, w jaki apache obsługuje zawartość statyczną . Nadal obowiązują wszystkie stare zasady. Zamiast tego suexec i suphp zmieniają konto, na którym będą działać odpowiednio CGI i PHP. Suexec umożliwia uruchamianie CGI na koncie właściciela, podczas gdy SuPHP umożliwia uruchamianie skryptów PHP na koncie właściciela.

Suexec i SuPHP niekoniecznie są lepsze . Oni są po prostu inni . Nie zapobiegną włamaniu się na witrynę (i prawdopodobnie mogą ułatwić włamanie się do witryny ), ale zapobiegną rozprzestrzenianiu się kompromisu na jednej stronie na wszystkie pozostałe. Dla administratora strony ta izolacja jest prawdopodobnie ważniejsza, dlatego niektóre współdzielone systemy hostingowe ustawiają suexec i suphp jako domyślny.

Jednym z bardzo powszechnych „gotcha” jest to, że SuPHP sprawdza własność i uprawnienia skryptu przed jego uruchomieniem i zwróci błąd 500, jeśli uprawnienia nie są odpowiednie.

W szczególności:

  • Właściciel i grupa pliku muszą być zgodne z właścicielem witryny (jako ustawienie w konfiguracji apache)
  • Plik nie może być dostępny do zapisu w świecie
  • Katalog nadrzędny nie może być dostępny do zapisu w świecie
tylerl
źródło
Wiedząc, że chcę emulować model hostowania współdzielonego (jak już wspomniałeś, utrzymując użytkowników od siebie), to model suexec / suphp, w który chcę iść, czy uważasz, że są lepsze opcje? Zredagowałem też post, aby wskazać, że jednym z kluczowych celów jest uniknięcie pouczania użytkowników o konieczności modyfikowania zezwoleń plików lub właścicieli tylko po to, aby zobaczyć ich zmiany lub uzupełnienia.
Chris_K,
2
suexec / suphp to dobre rozwiązanie dla tego, czego szukasz.
tylerl
Wolałbym suphp niż suexec. Myślę, że jest bezpieczniej.
Vladislav Rastrusny
@ FractalizeR: Zwykle używasz obu jednocześnie. SuPHP jest dla PHP, suexec jest dla CGI. Możesz uruchomić PHP ponad suexec, uruchamiając PHP jako CGI, ale to trochę niepotrzebne, ponieważ istnieją lepsze (bezpieczniejsze, wydajniejsze) opcje dla PHP.
tylerl
@tylerl: Dziękuję bardzo za odpowiedź. Jakie są bardziej bezpieczne / wydajne rozwiązania dla PHP?
benjamin