[Comm] PHP: Виртуальный хостинг

Прокопьев Евгений =?iso-8859-1?q?john_=CE=C1_rmts=2Edonpac=2Eru?=
Вс Ноя 23 12:59:41 MSK 2003


Здравствуйте!

Необходимо организовать виртуальный хостинг для PHP, пользователям 
которого требуется:

1. Возможность исполнять php-скрипты от своего имени, а не от имени 
пользователя apache
2. Возможность творить в своем домашнем каталоге (и только в нем) 
средствами php все что угодно (удалять и создавать каталоги, файлы).

Первая задача легко решается средствами suexec и использованием php в 
виде cgi (это единственное решение?). В этом случае приходится создавать 
виртуальный хост следующего вида:

<VirtualHost 192.168.1.1>
     User web1
     Group webusers
     ServerName web1.athlon.home
     DocumentRoot /home/web1/web
     ScriptAlias /bin/ "/home/web1/web/bin/"
     AddType appication/x-httpd-php .php
     Action appication/x-httpd-php /bin/php
</VirtualHost>

Структура каталогов пользователя web1 и права доступа в этом случае 
выглядят так:

# ls -l /home/
total 866
...
drwxr-xr-x    5 web1     webusers      208 Nov 22 14:17 web1
# ls -l /home/web1/
total 1
drwx------    7 web1     webusers      224 Nov 22 14:08 tmp
drwxr-xr-x    3 web1     webusers      136 Nov 22 14:08 web
# ls -l /home/web1/web/
total 9
drwxr-xr-x    2 web1     webusers       96 Nov 22 11:02 bin
-rw-r--r--    1 web1     webusers      207 Nov 22 14:13 index.html
-rw-r--r--    1 web1     webusers       17 Nov 22 11:36 index.php
# ls -l /home/web1/web/bin/
total 1300
-rwxr-xr-x    1 web1     webusers  1293658 Nov 22 11:02 php
-rw-r--r--    1 web1     webusers    36754 Nov 22 11:02 php.ini

И вот такое решение не дает решить вторую задачу, а именно, ограничить 
пользователя web1 своим каталогом, запретив ему средствами php читать 
чужие файлы (или хотя бы файлы пользователей web2 и web3, у которых 
структура каталогов и описание хоста аналогичны).

Если выставить для домашних каталогов пользователей права rwx------, то 
при обращении к любому файлу витруального хоста получаем "You don't have 
permission to access /index.php on this server".

Если включить safe_mode=on в php.ini, то очевидно, что никто не помешает 
пользователю выключить его, то же касается любых вариантов ограничить 
действия пользователя средствами php. Чтобы пользователь не смог 
модифицировать php.ini или бинарник php, необходимо сделать владельцем 
его домашего каталога другого пользователя - тем самым мы сломаем suexec.

Что остается?

-- 
С уважением, Прокопьев Евгений




Подробная информация о списке рассылки community