Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #69, АВГУСТ 2006 г.

Корень зла

ANDREY MATVEEV

Спецвыпуск: Хакер, номер #069, стр. 069-050-5


</VirtualHost>

Совершенно очевидно, что доступ к phpMyAdmin необходимо ограничить. Этого можно добиться разными способами. Для расширения кругозора предлагаю воспользоваться аутентификацией по паролю. Чтобы проконтролировать доступ к каталогу /var/www/virtual/phpmyadmin.mydomain.ru и запретить по сети передавать пароли в открытом виде (директива SSLRequireSSL), создаем еще один управляющий файл - .htaccess. Преимущество использования такого подхода состоит в том, что мы не захламляем httpd.conf дополнительными директивами для описания правил доступа, указания местонахождения Auth-конфигов и методов аутентификации. Плюс к этому, при изменении конфигурации в файле .htaccess не придется перезагружать Web-сервер.

# vi /var/www/virtual/phpmyadmin.mydomain.ru/.htaccess

SSLRequireSSL

AuthType Basic

AuthName "Password Required"

AuthUserFile /var/www/conf/.htpasswd

AuthGroupFile /dev/null

<Limit GET POST>

require user admin

</Limit>

Аутентификационную базу /var/www/conf/.htpasswd (ни в коем случае не размещай .htpasswd в каталоге /var/www/virtual/phpmyadmin.mydomain.ru) будем вести с помощью утилиты htpasswd(1). Ключ '-c' отвечает за создание базы, ключ '-m' задает использование алгоритма шифрования MD5, вместо применяемой по умолчанию DES'овской функции crypt(3):

# htpasswd -cm /var/www/conf/.htpasswd admin

Только суперпользователь и демон httpd имеют право обращаться к базе с паролями:

# chown root:www /var/www/conf/.htpasswd

# chmod 640 /var/www/conf/.htpasswd

[проводим безопасные транзакции по протоколу https.]

Чтобы получить возможность устанавливать защищенные сеансы по протоколу https, необходимо создать приватный ключ, ввести регистрационные данные и подписать сертификат собственным ключом. Начнем с генерации секретного RSA-ключа длиной 1024 бит:

# openssl genrsa -out /etc/ssl/private/server.key 1024

Создаем запрос на сертификат:

# openssl req -new -key /etc/ssl/private/server.key \

-out /etc/ssl/private/server.csr

Country Name (2 letter code) []:RU

State or Province Name (full name) []:Russia

Locality Name (eg, city) []:Moscow

Organization Name (eg, company) []:MySite

Organizational Unit Name (eg, section) []:<Enter>

Common Name (eg, fully qualified host name) []:www.mydomain.ru

Email Address []:admin@mydomain.ru

A challenge password []:<Enter>

An optional company name []:<Enter>

Подписываем сертификат, который будет действовать на протяжении 10 лет (аргумент '-days 3650'), своим ключом:

# openssl x509 -req -days 3650 -in /etc/ssl/private/server.csr \

-signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt

Выполняем остановку и повторный запуск httpd(8), но уже с поддержкой https:

# apachectl stop

# apachectl startssl

Проверяем, забиндился ли апач на соответствующие порты:

% netstat -na -f inet | egrep '80|443'

tcp 0 0 *.80 *.* LISTEN

tcp 0 0 *.443 *.* LISTEN

В /etc/pf.conf создаем правило, разрешающее прохождение запросов к портам 80 и 443:

# vi /etc/pf.conf

$ext_if = "fxp0"

pass in log on $ext_if inet proto tcp from any to $ext_if \

Назад на стр. 069-050-4  Содержание  Вперед на стр. 069-050-6