С демона по нитке

Andrushock

Xakep, номер #051, стр. 051-076-1

(andrushock@real.xakep.ru)

Обзор интересных секьюрных фич

<Страсти по цгайкам>

Исходя из соображений безопасности, web-сервер Apache запускается и работает с правами непривилегированного пользователя nobody из группы nobody. В некоторых случаях на стороне сервера требуется, используя cgi-сценарии, динамически изменять содержимое документов от имени пользователя со специальными привилегиями, а также предотвращать возможность исполнения cgi-программ с неверно заданными правами доступа как к ним самим, так и к каталогам, в которых они находятся. Для решения такого рода задач служит механизм suExec. Проверить, включена ли поддержка cgi-анализатора в web-сервере можно с помощью команды:

$ /usr/local/apache/bin/httpd -l

[skipped]

suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec

По умолчанию, модуль suExec не собирается во время установки индейца. Для его включения необходимо переконфигурировать и перекомпилировать Apache с указанием учетной записи (в данном случае hoster) для выполняемых cgi-сценариев, корневой директории, файла для журналирования событий, подкаталога пользователя, а также минимальных групповых и пользовательских идентификаторов, с которыми будет производиться работа. Но сначала добавим в систему новые группу и учетную запись hoster:

# groupadd -g 1001 hoster

# useradd -c 'suExec user' -d /var/www/users/hoster -g hoster -s /bin/false -u 1001 hoster

./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --datadir=/var/www --logfiledir=/var/log/httpd --enable-suexec --suexec-caller=hoster --suexec-docroot=/var/www/htdocs --suexec-logfile=/var/log/httpd/suexec.log --suexec-userdir=cgi-wrap --suexec-uidmin=1000 --suexec-gidmin=1000 --suexec-safepath=/usr/bin

$ make

# make install

$ /usr/local/apache/bin/httpd -l

[skipped]

suexec: enabled; valid wrapper /usr/local/apache/bin/suexec

Все, механизм suExec подключен, осталось добавить следующие строки в главный конфигурационный файл web-сервера:

# vi /etc/httpd/httpd.conf

<IfModule mod_userdir.c>

User hoster

Group hoster

UserDir cgi-wrap

AddHandler cgi-script .cgi .pl

</IfModule>

<Directory ~ /var/www/users/[a-z]+/cgi-wrap>

Options ExecCGI

</Directory>

Запустим демона Apache:

# /usr/local/apache/bin/apachectl start

Теперь создадим в каталоге /var/www/users/hoster/cgi-wrap простенький cgi-сценарий:

# touch test.cgi

# vi test.cgi

#!/usr/bin/perl

print "Content-type: text/htmlnn";

foreach $key (keys %ENV) {

print "$key --> $ENV{$key}<br>";

}

Определим для него права доступа:

# chown hoster:hoster /var/www/users/hoster/cgi-wrap/test.cgi

# chmod 755 /var/www/users/hoster/cgi-wrap/test.cgi

И для проверки правильности всех настроек скормим браузеру следующий URL: http://www.shellbox.ru/~hoster/test.cgi

При успешном выполнении сценария в журнальном файле /var/log/httpd/suexec.log появится запись типа:

[2002-10-11 01:24:22]: info: (target/actual) uid: (hoster/hoster) gid: (hoster/hoster) cmd: test.cgi

Следует отметить, что применять механизм suExec можно и для серверных вставок ssi, а также не только для персональных каталогов пользователей, но и для виртуальных хостов.

Содержание  Вперед на стр. 051-076-2

ttfb: 52.041053771973 ms