Страница 1 из 1

Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-09-18 15:16:16
FSA
На этом сайте нашёл как настроить подобное, что PHP работает через CGI. Однако хотелось бы заставить PHP работать как модуль Apache. Частично задача решена, но остались явные дыры в безопасности и кой-какой глюк. Итак о реализации.

Пользователи заводятся в системе как обычно, без каких либо особенностей, разве что их домашние папки помещаются на отдельный раздел. Во-первых, это помогает избежать проблем в работе сервера из-за переполнения раздела, во-вторых, позволяет обезопасить сервер, т.к. данный раздел должен быть смонтирован с опцией SUIDDIR (зачем поясню позже).
Все домашние папки пользователей имеют права 4770, т.е. работает SUIIDDIR, полный доступ для пользователя, полный поступ для группы, всем остальным запрет. Папки пользователя принадлежат ему, а вот группа указывается www, т.е. той, от имени которой работает Apache. Т.о. всем пользователи и Apache (в том числе и PHP) имею права работать с файлами и папками. При чём при создании файлов и папок с домашнем каталоге мы имеем владельца для них user:www за счёт SUIDDIR.
Теперь о работе Apache. PHP работает в обычном режиме, т.е. фактически от www:www. Safe_mode можем не включать, разграничение пользователей происходит за счёт open_basedir. Тут поджидает первая засада, которую я так и не преодолел: при вызове внешних приложений они запускаются от имени www:www, что нам абсолютно ненужно. Выходов два:
1. Запрещать полностью запуск внешних программ.
2. Пропатчить PHP таким образом, чтобы при вызове внешних программ он запускал их через suexec (меня интересует имено этот вариант).
Работа CGI производится в обычном режиме, в настройках вируальных хостов используются директивы User и Group. Вот тут вторая засада. Поскольку мы используем нестандартные права на папки пользователей user:www suexec отказывается работать, т.к. видит, что группа чужая. Следовательно патчим suexec.c таким образом, чтобы не проводить проверку группы, либо сравнивать её не с текущим пользователем, а с gid пользователя Apache. Задача не такая сложная, тем более файл где копать нужно я уже указал.
Да, ещё нужно не забыть перед запуском Apache дать команду umask 007, дабы создаваемые файлы имели права типа 660, т.е. с запретом работы с файлом никому, кроме user и group.

Теперь о глюке, который также не смог преодолеть. Каким то странным образом при загрузке файлов на сервер файл принимается благополучно во временную папку при этом приобретая атрибуты user:www 0700. Вот тут то и есть засада - PHP после загрузки ничего не может сделать с файлом, поскольку для группы www возникает запрет. Откуда появилась umask 077 я так и не понял. При этом файлы, создаваемые PHP имею правильные атрибуты.

Итак, подводя итог, напишу о нерешённых проблемах:
1. Требуется патч для PHP, чтобы вызов внешних программ производился через suexec.
2. Требуется патч для правильной реализации Upload файлов.

Re: Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-09-25 1:02:32
Alex Keda
всё-таки невижу смысла....
сколько процентов быстродействия будет выиграно?
Окупится ли возросшая сложность поддержки?

Re: Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-09-25 15:48:07
FSA
Думаю смыл есть. В своё время тема мусолилась на одном из форумов в сети, очень активно вёл себя администратор хостинга на котором у меня находятся сайты (чтобы не было рекламы не называю, кому надо сам узнает). Он как раз и говорил о таком хостинге.
Кстати, подобный механизм я вывел как раз исследуя настройки хостинга, где у меня размещается сайт (ко всему прочему у них ещё и открыт SSH доступ).
P.S. Кстати, интерес уже чисто спортивный. Сервер у меня стоит сейчас, но им никто не пользуется.

Re: Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-09-25 18:00:30
Alex Keda
вишь....
а я до фастЦГИ дополз и пока успокоился.
есть голубая мечта - нгинкс с фастЦГИ - вообще без апача - но пока не видел подобных реализаций, или искал плохо...

Re: Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-10-15 21:10:34
XoRe
FSA писал(а):2. Требуется патч для правильной реализации Upload файлов.
Если загрузка файлов идет по ftp, то...
man proftpd:

Код: Выделить всё

# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask                           002
А если не по ftp, то расскажите подробнее, как )

Re: Виртуальный хостинг, PHP как модуль Apache

Добавлено: 2007-10-15 21:25:51
FSA
http://wiki.sysfaq.ru/w/index.php/%D0%A ... 0%B3%D0%B0
Вот тут описали то, что я пытался реализовать.