Организация запуска скриптов пользователя на 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
group
запускаем браузер http://Виртуальный хост/cgi-bin/test.bash
В результате выполнения мы увидим имя пользователя - от имени которого он выполнился, а не от имени apache.
Цель достигнута - можно работать :)