22.14. Парольная защита отдельных каталогов
Проблема
Иногда требуется ограничить доступ не ко всему домену, а только к некоторым страницам или к конкретному каталогу. Например, у вас может быть защищаемая страница UserDir, доступ к которой должен быть ограничен для хранения рабочих документов, недоступных для посторонних глаз. Задача — сделать доступной эту страницу только для себя и доверенных пользователей.
Решение
Apache предоставляет два простых метода аутентификации пользователей для работы с каталогами: Basic и Digest. Эти методы обеспечивают базовый уровень безопасности и подходят для защиты данных в локальной сети, когда необходимо ограничить доступ только от любопытных коллег. Однако их не следует использовать для страниц, содержащих конфиденциальные данные, или на коммерческих веб-сайтах, так как Basic-аутентификация передаёт пароли в виде простого текста. Для лучшей безопасности рекомендуется использовать Digest-аутентификацию с хешированием MD5.
Настройка аутентификации для каталогов состоит из двух этапов: создание секции <Directory>
в файле httpd.conf
и создание файла паролей с помощью утилиты htpasswd
.
Предположим, вы хотите ограничить доступ к странице по адресу http://example.com/~michael
, где данные хранятся в каталоге /var/www/users/michael
. Добавьте следующую секцию в httpd.conf
:
<Directory /var/www/users/michael>
AuthType Digest
AuthName "Michael's Protected Files"
AuthUserFile /etc/httpd/htpasswd/passwords
Require user michael
</Directory>
Теперь создайте файл паролей:
$ htpasswd -c /etc/httpd/htpasswd/passwords michael
New password:
Re-type new password:
Adding password for user michael
С ключом -c
создаётся новый файл паролей. Теперь только пользователь michael
или любой, кто знает его пароль, сможет получить доступ к каталогу http://example.com/~michael
.
Комментарий
Обратите внимание на параметр AuthName
. Все каталоги с одинаковым значением AuthName
позволяют пользователю вводить данные для аутентификации только один раз. Это удобно, но может создать уязвимость, если используются общие данные для разных защищённых каталогов.
Что делать, если у вас нет доступа к файлу httpd.conf
, и вы не хотите каждый раз обращаться к администратору за обновлением настроек? Попросите администратора настроить возможность использования файлов .htaccess
для самостоятельного управления доступом к каталогам. Например, следующая запись в httpd.conf
разрешает использование файлов .htaccess
для каталога /var/www/users
:
<Directory /var/www/users>
AllowOverride AuthConfig
</Directory>
После внесения изменений в httpd.conf
требуется перезапуск Apache для применения новых настроек. Пользователь Michael может создать файл .htaccess
с аналогичными директивами для аутентификации и поместить его в нужный каталог, например, /var/www/users/michael
.
Digest-аутентификация имеет ещё одно преимущество: она поддерживает хеширование паролей, что делает её более безопасной по сравнению с Basic. Стоит учитывать, что Internet Explorer не поддерживает Digest-аутентификацию для URL с параметрами запроса, но поддерживает для статических URL, например http://example.com
. Если вам нужен браузер, совместимый с Digest-аутентификацией и стандартами W3C, рекомендуется использовать Mozilla Firefox, который также предлагает дополнительные функции: вкладки, менеджер паролей, подавление всплывающих окон и многое другое.
Для лучшей защиты данных на сайте рекомендуется использовать SSL/TLS-шифрование, которое надёжно защищает передаваемые пароли и данные от перехвата, добавляя уровень безопасности в сочетании с Digest-аутентификацией.
См. также
Authentication, Authorization and Access Control; Apache SSL/TLS Encryption; W3C