[#] [Из песочницы] Изоляция виртуальных серверов в apache2 — ugidctl
habrabot(difrex,1) — All
2015-10-30 16:00:03


Некоторое время назад я сделал для себя решение, которое позволяет эффективно изолировать процессы apache2. Теперь он может обрабатывать каждый запрос от имени своего системного пользователя. Сегодня я хочу поделиться этим решением. Вот о чем речь:

<VirtualHost *:80>
ServerName host1.example.com
ServerAdmin webmaster1@example.com
ServerUserGroup user1 group1
DocumentRoot /var/www/host1
</VirtualHost>
<VirtualHost *:80>
ServerName host2.example.com
ServerAdmin webmaster2@example.com
ServerUserGroup user2 group2
DocumentRoot /var/www/host2
</VirtualHost>


При этом корневые директории виртуальных хостов могут быть доступны только соответсвующим пользователям:

# ls -la /var/www
total 16
drwxr-xr-x 4 root root 4096 Oct 26 16:10 .
drwxr-xr-x 21 root root 4096 Oct 26 01:13 ..
drwxr-x--- 2 user1 group1 4096 Oct 26 16:10 host1
drwxr-x--- 2 user1 group2 4096 Oct 26 16:10 host2


Это не очередные танцы с бубном вогруг многопоточности, запуска процессов от рута и т.п. Основная идея в том, чтобы процесс самостоятельно решил, с какими правами ему необходимо обработать запрос, взял себе эти права, обработал, и снова вернул себе права основного пользователя apache. [Читать дальше →][1]

[1]: http://habrahabr.ru/post/269835/#habracut