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