Strona 1 z 1

konfiguracja php - który wariant bezpieczniejszy

: 09 maja 2009, 11:08
autor: zlywilk
Maszyna na której kilkunastu użytkowników uruchamia swoje aplikacje php.

Dwie opcje:
  1. Włączamy mechanizm pozwalający skryptom php działać z uprawnieniami użytkownika, który jest ich właścicielem (np. suphp).[list:07d057e7cc]+ aplikacja jednego użytkownika nie może grzebać w plikach należących do innego
    + pliki tworzone przez skrypty php mogą być usuwane/zmieniane przez ftp i vice-versa

    - skrypty php mają prawa do modyfikowania samych siebie
    - znacznie gorsza wydajność
[*]Zostawiamy domyślną konfiguracje. Skrypty php działają z uprawnieniami użytkownika www-data.
  • + skrypty php mogą zmieniać tylko utworzone przez siebie pliki
    + mniej problematyczna konfiguracja

    - brak uprawnień do nadpisywania eFTePem plików stworzonych przez aplikacje php
    - skrypty php jednego użytkownika mogą grzebać w plikach innego
Ten ostatni minus jest znaczący. Jeżeli aplikacja jednego z użytkowników będzie zawierała lukę to włamywacz prawie automatycznie zyskuje dostęp do wszystkich pozostałych. Czy to zagrożenie da się jakoś ograniczyć? Jak to rozwiązują dostawcy usług hostingowych?[/list :o :07d057e7cc]Który wariant byście wybrali? A może jest jakieś lepsze rozwiązanie? Czy ma sens uruchomienie osobnej instancji apache dla każdego użytkownika?

: 30 maja 2009, 12:48
autor: zlywilk
Trochę poeksperymentowałem i stanęło na czymś takim:

1. Nie bawię się w żadne suphp itp. Php mam uruchomione jako moduł Apache. Zależy mi na wydajności, a ramu maszyna ma więcej niż potrzebuje.

2. Użytkownicy tworzą pliki chmod 640. Użytkownik www-data należy do grup wszystkich użytkowników. Tym sposobem użytkownicy nie mogą grzebać nawzajem w swoich plikach, a mimo to strony mogą być serwowane przez serwer php. Użytkownicy mogą manipulować plikami tworzonymi przez www-data bo są właścicielami katalogów, w których są tworzone te pliki.

3. Problem dostępu do plików innych przez spreparowany skrypt php rozwiązuje dyrektywa open_basedir definiowana dla każdego vhosta oddzielnie. Dodatkowo zastosowałem bardzo restrykcyjne ograniczenia używanych funkcji za pomocą suhosin (function blacklist). Zwykłe disable_function się nie sprawdza bo nie można różnicować uprawnień (per vhost).

Może idea się komuś przyda. Uwagi mile widziane.