Konfiguruję serwer WWW, który będzie hostował wiele różnych stron internetowych jako Apache VirtualHosts, każda z nich będzie miała możliwość uruchamiania skryptów (głównie PHP, możliwe inne).
Moje pytanie brzmi: w jaki sposób izoluję każdy z tych VirtualHostów od siebie nawzajem i od reszty systemu? Nie chcę, aby np. Strona X odczytywała konfigurację strony Y lub któregokolwiek z „prywatnych” plików serwera.
W tej chwili skonfigurowałem VirtualHosts z FastCGI, PHP i SUExec, jak opisano tutaj ( http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec -easy-way.html ), ale SUExec uniemożliwia użytkownikom edycję / wykonywanie plików innych niż ich własne - użytkownicy nadal mogą czytać poufne informacje, takie jak pliki konfiguracyjne.
Myślałem o usunięciu globalnego uprawnienia odczytu UNIX dla wszystkich plików na serwerze, ponieważ rozwiązałoby to powyższy problem, ale nie jestem pewien, czy mogę to bezpiecznie zrobić bez zakłócania działania serwera.
Zastanawiałem się również nad użyciem chroot, ale wydaje się, że można to zrobić tylko dla poszczególnych serwerów, a nie dla hostów wirtualnych.
Szukam sugestii, które odizolują moje VirtualHosts od reszty systemu.
PS Używam serwera Ubuntu 12.04
Moja ODPOWIEDŹ: Skończyłem z prawie śledzeniem mojej bieżącej konfiguracji, ale zrobieniem więzienia chroot dla wszystkich hostów wirtualnych, np. Mając więzienie chroot, /var/www
a następnie przechowując dane wszystkich użytkowników w podfolderach, każdy z uprawnieniami grupy / innych r / w / x niepełnosprawny. Ta opcja była pożądana, zwłaszcza że jest to możliwe bez żadnych modyfikacji kodu źródłowego.
Wybrałem odpowiedź @Chris, ponieważ została dokładnie napisana, a także rozważała FTP i SELinux
źródło
mod_userdir
oferuje wirtualny hosting oddzielnych domen. Ponadto mam obawy dotyczące bezpieczeństwa w związku z izolacją, ponieważ nie jestem w stanie znaleźć niczego na ten temat między katalogami użytkowników w Apache. Wygląda na to, że nie oferuje tej funkcji.Proponuję przyjrzeć
suphp
lub PHP-FPM .Zasadniczo umożliwi to interpreterowi PHP „su” dla określonego użytkownika skonfigurowanego dla tego VirtualHost. To pozwoli ci wykorzystać ogólne uprawnienia systemu plików do odizolowania każdego VirtualHost.
Polecam FPM ze względu na wydajność. Ze strony głównej najbardziej Cię interesują:
źródło
Zajrzyj do
chroot
.Niektóre punkty początkowe:
Chrootowanie Apache stało się proste
Środowisko chroot dla Apache (Debian)
Więzienie Apache Chroot: wirtualny hosting
źródło
/var/www
i mieć wszystkie hosty w tym podkatalogu, każdy z tych podkatalogów usunął globalne uprawnienia do wykonywania / odczytu?chroot
, że można to zrobić na serwerze wirtualnym. Oto przykład. W tym przypadku używająmod_chroot
.