Организация запуска скриптов пользователя на APACHE

Описание задачи

При организации виртуального хостинга одним из краеугольных камней в данном вопросе является делегирование прав постороннему пользователю - "хозяину хоста". Самое простое дать ему права на то чтобы он смог заливать информацию через ftp. С HTML проблем не возникает, но как быть с тем чтобы разрешить выполнение скриптов. Очевидным решением - использование встроенной в APACHE функции suEXEC
Так как в качестве системы используется ASPLinux, то и APACHE используем их же сборки. Документацию по suEXEC в APACHE можно найти здесь.

Подготовка

После изучения документации выясняем, что если APACHE собран с поддержкой suEXEC - это отображается в логах.

Проверяем:
[root@ns logs]# cat error_log | grep suEXEC

Если есть, должны увидеть нечто подобное:

[Sun Jul 28 04:02:19 2002] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)

По логу видно что проживает suEXEC по адресу /usr/sbin/
но "точность никогда не бывает лишней" и поэтому проверим:

[swan@ns swan]$ whereis suexec

имеем:

suexec: /usr/sbin/suexec /usr/share/man/man8/suexec.8.gz

проверим его работоспособность:

[swan@ns swan]$ su
Password:
[root@ns swan]# /usr/sbin/suexec -V
Внимание от имени обычного пользователя он не запустится

-D DOC_ROOT="/var/www"
-D GID_MID=100
-D HTTPD_USER="apache"
-D LOG_EXEC="/var/log/httpd/suexec_log"
-D SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D UID_MID=100
-D USERDIR_SUFFIX="public_html"


Результат выполнения команды указывает на то, что suexec жив и с какими дирректориями(каталогами) он будет работать

Важно

Проблема может возникнуть если скрипты выполняются в тех виртуальных хостах, для которых определены конкретные пользовател(ь|и) и групп(а|ы) в разделе конфигурационного файла:

VirtualHost
user
group
........

скрипты не выполняются, даже самые простые, если documentroot не является подкаталогом в пути, который указан переменной "DOC_ROOT"

Что бы этого не произошло скрипты необходимо разместить, например, в /var/www/.../cgi-bin/

Тест

Создадим простой скрипт: test.bash

echo Content-type: text/html
echo
echo
whoami

Прописываем в конфигруации APACHE в разделе
VirtualHost
user <user>
group <usrt>

запускаем браузер http://Виртуальный хост/cgi-bin/test.bash
В результате выполнения мы увидим имя пользователя - от имени которого он выполнился, а не от имени apache.
Цель достигнута - можно работать :)

 

Design: [email protected]
Webmaster: LinuxDoc Webmaster