TL;DR: Cum pot activa mod_userdir într-un mod sigur? (adică: fiecare utilizator ar trebui să-și poată crea și difuza conținutul în ~/public_html, dar nu ar trebui să li se permită să citească reciproc conținutul și nici direct - cat /home/userX/public_html/file
- nici prin funcții PHP (file_get_contents('/home/userX/public_html/file'
))
Detalii:
Am configurat Apache cu mod_userdir pentru a le oferi utilizatorilor mei opțiunea de a-și difuza conținutul eliminând fișierele în folderul lor ~/public_html. Pentru a proteja accesul la fișiere și pentru a evita ca orice utilizator să poată citi fișierele altora, am configurat următoarele permisiuni:
/home/userA user.user drwx--x--x (711)
/home/userA/public_html user.user drwxrwx--x (771)
Am adăugat www-data
la grupul fiecărui utilizator:
usermod -a -G utilizator www-data
(ar putea funcționa și prin crearea unui grup și adăugarea tuturor utilizatorilor, inclusiv www-data
, la el)
Toată configurația funcționează conform așteptărilor. Orice utilizator își poate accesa conținutul de pe https://server/~user și nu poate citi fișierele altora:
userA@ubuntu:/home$ cat userB/public_html/index.php
cat: userB/public_html/index.php: Permisiune refuzată
Până acum, bine. Dar problema este că, deoarece Apache rulează ca www-data
și are acces de grup la orice fișier din /home/*, orice utilizator poate crea un fișier PHP pentru a citi conținutul altora folosind funcții precum exec
, sistem
, file_get_contents
, etc.
Știu că pot dezactiva astfel de funcții de la executarea adăugându-le la disable_functions
blocați php.ini
dar văd asta ca un patch, nu o soluție. Deci, mi se pare că ar trebui să existe o altă modalitate, mai sigură, de a configura această configurație Apache activată pentru userdir. Am căutat o modalitate de a face acest lucru corect, dar nu am găsit o soluție adecvată.