LinuxForum.Fans
Тема

Apache - Запуск Perl и PHP скриптов от имени юзера

Автор: Planet_Dust 17 сообщений 7749 просмотров
#158335

Доброго дня! Занялся разворачиванием небольшого хостинг-сервера на openSUSE 11.4, впринципе все уже сконфигурировано апач работает, перл и пхп в режиме модулей тоже.
Но такой вариант меня не совсем устраивает. Мне нужно чтобы php и perl скрипты выполнялись через cgi интерфейс с указанием пользователя. Иначе говоря, я бы мог видеть кто например больше всего грузит своими скриптами машину, определить для каждого юзера опеределенное количество памяти и конф. php.
Насколько знаю, это реально реализовать с помощью suexec и suphp. Но ни тот, ни другой совершенно не завелись. Да еще и параметры suexec не поменять, они намертво вписаны, тут только перекомпил, что вообще не вариант.

Сейчас то уже я вернул все назад, так что конфиги/логи уже не показать. Мне, скажем так, сейсас больше нужна консультация человека кто проворачивал подобное под сусей, что писал в конфигах апача, особенно в директиве <VirtualHost>.

Неужели блин фрюбсдю ставить придется, неужели с разграничением прав апача в линуксах беда? Просто привык я к сусе, уже вслепую все что нужно могу заточить.

#158338

Planet_Dust, насколько знаю- нет. Никакого рукоприкладства к готовым бинарям. Можно конечно скомпилить и ставить из рпмки тот же suexec, не предусмотрено цивилизованных вариантов.
Почему же беда? В Линуксе есть все те же mod_cgi и suexec.
Надо ли оно тебе получается, если в репрозиторный суэкзек с правкой параметров не залезешь?

#158576

проще простого, не важно на какой платформе. Пересобрать апач с suexec, при сборке указать необходимый конфиг suexec, потом накатить старый конфиг от апача, добавить загрузку модуля

text
LoadModule suexec_module modules/mod_suexec.so

, а в <VirtualHost> добавить строку

text
SuexecUsegGroup username grpname

я такое на рабочем серваке за 15 минут сделал
все

#158578

Planet_Dust, /usr/sbin/suexec -V что скажет?

#158894
R4z0R написал:
Пересобрать апач с suexec

Апач стоит из бинарников, со всеми библиотеками и модулями, все детально настроено, он завязан в Yast'овский sysconfig (указание модулей и пр). Виртуал хосты прописаны, все cgi библиотеки стоят.
Пересобрать апач? Не вариант.

i2ks написал:
Planet_Dust, /usr/sbin/suexec -V что скажет?

Тут /usr/sbin/suexec2 -V, но не суть. Вот вывод:

text

 -D AP_DOC_ROOT="/srv/www"
 -D AP_GID_MIN=96
 -D AP_HTTPD_USER="wwwrun"
 -D AP_LOG_EXEC="/var/log/apache2/suexec.log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=96
 -D AP_USERDIR_SUFFIX="public_html"

Здесь только перекомпил походу. :(

В /srv/www лежит так называемый дефолтный пустой хост, который прогружается первым. Естественно ни о каких public_html речь и не идет.
Хосты лежат в /home и имеют примерный вид:
/home/host-username/cgi-bin/
/home/host-username/etc/
/home/host-username/logs/
/home/host-username/tmp/
/home/host-username/www/

Где cgi-bin, директория в которой в идеале лежит бинарный пхп и выполняются перлскрипты с различными инклудсами от имени юзера.
etc - папка где будет лежать php.ini для юзера и прочие настройки.
logs - ну понятно, логи они и есть логи, настроил ротацию логов с помощью cronolog, работает как часы, тут проблем нет.
tmp - сессии, кэши, кукисы и прочее отдельно для юзера, чтобы не засорять корневой /tmp.
www - папка где будут выполняться php скрипты от имени юзера и разумеется обыкновенный html.

R4z0R написал:
добавить загрузку модуля
text
LoadModule suexec_module modules/mod_suexec.so

, а в <VirtualHost> добавить строку

text
SuexecUsegGroup username grpname

Прописывал, модуль точно стоит, и настройки указаны, но не те к сожалению, после указания юзера в виртуалхостах апач тупо ругается:

text
Warning: SuexecUserGroup directive requires SUEXEC wrapper.

suPHP пробовал, там уже другая канитель - бинарник совершенно не обрабатывал скрипты или делал это ошибочно.

Вот мне лучше нужен человек, который настраивал подобное на сусе. Показал и объяснил как нафиг запустить Perl и PHP через CGI под определенным юзером. Так ведь никто этого и не объяснил, что писать в виртуалхосты то для запуска. Гуглил, разные варианты везде, и по-разному выпендриваются.

Сейчас оба как модуль запущены, но это не самый лучший вариант. Т.к. если какой то дядя мне положит машину, я лишь буду знать что это апач, юзер wwwrun с группой www. И у этих дядей один php.ini на всех, что тоже не приемлимо.

Как я понимаю чтобы весь мусор сливался в пользовательскую папку /tmp это нужно указать в php.ini, директива "session", так?

Denlookh написал:
В Линуксе есть все те же mod_cgi и suexec.

Далеко не те же, в BSD реализация таки несколько иначе.

Denlookh написал:
Надо ли оно тебе получается, если в репрозиторный суэкзек с правкой параметров не залезешь?

А как я копну бинарный suexec то?

#158899

А как я копну бинарный suexec то?

Вот и я о том. А насколько критична замена на хттпед из сорсов? И так понятно, что реповый не перенастроишь.

#158904
Denlookh написал:
А насколько критична замена на хттпед из сорсов?

В моем случае уже равносильна переустановке ОСи. Т.е. тут проще уже будет фряху воткнуть и из портов все собрать как захочется да перенастроить, чем ковырять и париться с сорсами на линупсе подтирая зависимости в Yast'е.
Дело то как раз в этом и есть, что все готово, все заточено, только вот Perl и PHP не под юзерами бегает.

#158941

просто соберите из SRPM

text
rpm -ivh httpd-2.0.46-57.ent.src.rpm 
mcedit /usr/src/redhat/SPECS/httpd.spec 
выбрать параметры
rpmbuild -bs /usr/src/redhat/SPECS/httpd.spec 
cd /usr/src/redhat/SRPMS/ 
rpmbuild --rebuild /usr/src/redhat/SRPMS/httpd-2.0.46-57.ent.src.rpm 
cd /usr/src/redhat/RPMS/i386/ 
rpm -ivh --replacepkgs --replacefiles httpd-2.0.46-57.ent.i386.rpm 
#158947

Ну, вы-первых, у меня не Red Hat, во вторых апач у меня не 2.0.46, а 2.2.17, в третьих тут все иначе.

#158949
Planet_Dust написал:
Тут /usr/sbin/suexec2 -V, но не суть. Вот вывод:

хотел удостовериться, работает ли suexec или нет. =)

Planet_Dust написал:
Ну, вы-первых, у меня не Red Hat, во вторых апач у меня не 2.0.46, а 2.2.17, в третьих тут все иначе.

под opensuse аналогично можно будет собрать apache.

#159004

Дык, я думаю тут больше стоит смотреть не на то, что настройки не те, а на то, что апач ругнулся, не увидел что мол suexec в нем прописан, причем прописан и влючен штатно, тем более я ничего не понимаю.

Насчет моего предыдущего сообщения, пардоньте, действительно у суси тоже есть репозиторий Source.

#159247
Planet_Dust написал:
Ну, вы-первых, у меня не Red Hat, во вторых апач у меня не 2.0.46, а 2.2.17, в третьих тут все иначе.

от дистрибутива ничего не зависит, только команды будут отличаться - апач он везде остается апачем и конфиги одинаковы. В чем отличие? что настройки разнесли в отдельные файлы?

#159444

Перекомпилил, вписал свои настройки:

-D AP_DOC_ROOT="/home"
-D AP_GID_MIN=96
-D AP_HTTPD_USER="wwwrun"
-D AP_LOG_EXEC="/var/log/apache2/suexec.log"
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=96
-D AP_USERDIR_SUFFIX="www"

Вписал SuexecUserGroup в конфиг хоста. Апач все также:

text

Warning: SuexecUserGroup directive requires SUEXEC wrapper.

Модуль прогружен. Ниче не понимаю...

И да.. таки-ведь! Никто так и не озвучил как запускал PHP и Perl в CGI ))))

#160545

а что пишется в /var/log/apache2/suexec.log и в логах апача при запуске?

#160576

В лог suexec ничего не пишется, потому что он не запускается. Что апач пишет я указал выше.

#162538

Ну не хотит и все, хоть как(( Может дистр в этом плане оказался дырявым или что-то вроде этого..
Может все таки есть аналоги Suexec?

#162798

Проблема решена.

1. Бэкапнул конфиги апача.

2. Деинсталил апач и все что с ним связано (кроме перла и пхп с их модулями, плюс заранее установлен mod_fastcgi для php, но не для апача).

3. Качнул с оффсайта apache.org сырцы, распаковал, выполнил:

text

./configure --enable-suexec --with-suexec-docroot=/home --with-suexec-userdir=www --with-suexec-logfile=/var/log/apache2/suexec.log --with-suexec-caller=wwwrun

make

4. Хапнул из папки support что в сырцах файл "suexec".

5. Затер сырцы, затер остальной мусор.

6. Установил из репозитория apache2, apache2-devel, apache2-prefork и т.д.

7. Копирнул ранее сохраненные конфиги назад.

8. Создал файл load_cgi.conf в папке conf.d следующего содержания:

text

#
# Load Perl & PHP as CGI
#
AddHandler cgi-script .cgi .pl
AddHandler application/x-httpd-php5 .php
AddHandler application/x-httpd-php5 .php3
AddHandler application/x-httpd-php5 .php4
AddHandler application/x-httpd-php5 .php5

Action application/x-httpd-php5 /cgi-bin/php

DirectoryIndex index.php index.php3 index.php4 index.php5

9. Откорректировал httpd.conf:

text

Include /etc/apache2/conf.d/*.conf
Include /etc/apache2/vhosts/*

10. Создаю файлы виртуалхостов примерного содержания:

text

#
# Test host - test.ru
#
<VirtualHost XXX.XXX.XXX.XXX:80>
    ServerAdmin webmaster@test
    ServerName test.ru
    ServerAlias www.test.ru
    ServerSignature Off
    UseCanonicalName Off
    HostnameLookups Off
    ErrorLog "|/usr/sbin/cronolog /home/test/logs/%Y/%m/%d/error.log"
    CustomLog "|/usr/sbin/cronolog /home/test/logs/%Y/%m/%d/access.log" co
    SuexecUserGroup test www-users

DocumentRoot /home/test/www <Directory "/home/test/www"> Options None AllowOverride AuthConfig FileInfo Order allow,deny Allow from all </Directory>

ScriptAlias /cgi-bin/ "/home/test/cgi-bin/" <Directory "/home/test/cgi-bin"> Options +ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> </VirtualHost>

10. Гашу бинарный suexec2

text

del /usr/sbin/suexec2

11. Заменяю своим и делаю симлинк

text

cd /usr/sbin/
ln -s suexec suexec2

Самое важное!!! Меняю права:

text

chgrp www /usr/sbin/suexec
chmod 4750 /usr/sbin/suexec

12. Проверяю, правильна ли конфигурация:

text

suexec -V

-D AP_DOC_ROOT="/home" -D AP_GID_MIN=100 -D AP_HTTPD_USER="wwwrun" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="www"

13. В папку cgi-bin на хосте кидаю файл "php" с содержанием:

text

#!/bin/sh
PHP_CGI=/usr/bin/php-cgi5
PHP_FCGI_CHILDREN=10
PHP_FCGI_MAX_REQUESTS=1000
exec $PHP_CGI

и конечно же

text

chown test php
chgrp test www-users
chmod +x php

ну и по вкусу:

text

cp /etc/php5/fastcgi/php.ini /home/test/cgi-bin/php.ini

в php.ini же прописываем сессии и плюшки чтоб кэшировались в /tmp

14. service apache2 restart (rcapache2 restart)

Сссссссцуко, такого секаса я не испытывал даже когда конфигурировал Nagios (который между прочим висит на этом же сервере).

Всем сусеманам советую взять на заметку! wink

Войдите или зарегистрируйтесь, чтобы ответить.