Сценарии Apache

Помимо этого для разрешения использования CGI-сценариев за пределами каталогов ScriptAllas добавьте следующую строчку:
AddHandler cgi-script .cgi
После этого можно перезапустить Apache:
# /usr/local/apache/bin/apachectl restart
Теперь с помощью простого сценария, запускающего команду id, которая выво-дит сведения о запускающем ее пользователе, проверим suEXEC:
#!/bin/sh
echo -е "Content-Type: text/plain\r\n\r\n\" /usr/sbin/id
Поместите этот сценарии в каталог /usr/local/apache/cgi-bin, назовите его suexec-test.cgi и сделайте его исполняемым. Теперь введите URL сценария (то есть http;//webserver/cgi-bin/suexec-test.cgi) □ вашем web-браузере. Вы получите что-то подобное:
uid=80(www) gid=flQ(www) gi-oups=80(www)
Как видите, он выполнен тем же пользователем, который запустил web-браузер. А теперь скопируем сценарии в пользовательский каталог public_html:
$ mkdir public_html && chmod 711 -/ -/public_html $ cp /usr/local/apache/cgi-bin/suexec-test.cgi
После этого снова введите в браузере URL сценария (то есть http://webserver/ - user/suexec -test.cgi). Теперь должно получиться что-то подобное:
uid=500(andrew) gid=500(andrew) groups=500(andrew)
Помимо обработки сценариев, располагающихся о личных каталогах пользователей, suEXEC позволяет выполнять ни виртуальном узле сценарии от имени другого пользователя. Однако для этого необходимо создать все каталоги виртуального узла внутри корня документен web-сервера (то есть /usr/local/apache/htdocs). При этом с помощью директив настройки User и Group в выражении VirtualHost можно установить, какие пользователь пли группа будут исполнять этот сценарий, например:
<VirtualHost> User myuser Group mygroup
DocumentRoot /usr/local/apache/htdocs/mysite </VirtualHost>
К сожалению, механизм suEXEC несовместим с mod_perl и mod_php, поскольку эти модули запускаются внутри самого процесса Apache, а не в качестве отдельных программ. Поскольку процесс Apache запускается как nonroot-пользователь, он не может изменить UID, пол которым выполняется сценарий. SuEXEC работает за счет того, что Apache вызывает специальную SUID-оболочку (например, /usr/ local/apache/bin/suexec), которая может вызываться только процессом Apache. Если вы стремитесь к обеспечению компромисса безопасность/производительность при использовании suEXEC, а необходимость запуска Perl-сценария по-прежнему сохраняется, то это можно реализовать с помощью стандартного CGI-интерфейса. С помощью этого интерфейса, помимо Perl, можно запускать и PHP-программы, но для этого необходимо создать библиотеку php и указать ее в качестве интерпретатора во всех PHP-сценариях, которые должны выполняться с помощью suEXEC. Сценарии можно запускать и с помощью модуля mod_perl или mod_php, поместив их вне каталогов, в которых будет работать suEXEC.

Метки: ,

Статьи по теме