Корень зла 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 \ |