Виртуальный хостинг, PHP как модуль Apache
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
- FSA
- рядовой
- Сообщения: 25
- Зарегистрирован: 2007-09-17 0:38:42
- Откуда: Тавда, Россия.
- Контактная информация:
Виртуальный хостинг, PHP как модуль Apache
На этом сайте нашёл как настроить подобное, что 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 файлов.
Пользователи заводятся в системе как обычно, без каких либо особенностей, разве что их домашние папки помещаются на отдельный раздел. Во-первых, это помогает избежать проблем в работе сервера из-за переполнения раздела, во-вторых, позволяет обезопасить сервер, т.к. данный раздел должен быть смонтирован с опцией 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 файлов.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
- Alex Keda
- стреляли...
- Сообщения: 35418
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Виртуальный хостинг, PHP как модуль Apache
всё-таки невижу смысла....
сколько процентов быстродействия будет выиграно?
Окупится ли возросшая сложность поддержки?
сколько процентов быстродействия будет выиграно?
Окупится ли возросшая сложность поддержки?
Убей их всех! Бог потом рассортирует...
- FSA
- рядовой
- Сообщения: 25
- Зарегистрирован: 2007-09-17 0:38:42
- Откуда: Тавда, Россия.
- Контактная информация:
Re: Виртуальный хостинг, PHP как модуль Apache
Думаю смыл есть. В своё время тема мусолилась на одном из форумов в сети, очень активно вёл себя администратор хостинга на котором у меня находятся сайты (чтобы не было рекламы не называю, кому надо сам узнает). Он как раз и говорил о таком хостинге.
Кстати, подобный механизм я вывел как раз исследуя настройки хостинга, где у меня размещается сайт (ко всему прочему у них ещё и открыт SSH доступ).
P.S. Кстати, интерес уже чисто спортивный. Сервер у меня стоит сейчас, но им никто не пользуется.
Кстати, подобный механизм я вывел как раз исследуя настройки хостинга, где у меня размещается сайт (ко всему прочему у них ещё и открыт SSH доступ).
P.S. Кстати, интерес уже чисто спортивный. Сервер у меня стоит сейчас, но им никто не пользуется.
- Alex Keda
- стреляли...
- Сообщения: 35418
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: Виртуальный хостинг, PHP как модуль Apache
вишь....
а я до фастЦГИ дополз и пока успокоился.
есть голубая мечта - нгинкс с фастЦГИ - вообще без апача - но пока не видел подобных реализаций, или искал плохо...
а я до фастЦГИ дополз и пока успокоился.
есть голубая мечта - нгинкс с фастЦГИ - вообще без апача - но пока не видел подобных реализаций, или искал плохо...
Убей их всех! Бог потом рассортирует...
- XoRe
- рядовой
- Сообщения: 13
- Зарегистрирован: 2007-10-15 18:04:04
- Откуда: Россия
- Контактная информация:
Re: Виртуальный хостинг, PHP как модуль Apache
Если загрузка файлов идет по ftp, то...FSA писал(а):2. Требуется патч для правильной реализации Upload файлов.
man proftpd:
Код: Выделить всё
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 002
<'\/'>
- FSA
- рядовой
- Сообщения: 25
- Зарегистрирован: 2007-09-17 0:38:42
- Откуда: Тавда, Россия.
- Контактная информация:
Re: Виртуальный хостинг, PHP как модуль Apache
http://wiki.sysfaq.ru/w/index.php/%D0%A ... 0%B3%D0%B0
Вот тут описали то, что я пытался реализовать.
Вот тут описали то, что я пытался реализовать.