Часто при работе с веб-проектами возникает необходимость создания их developer версии для разработки. Поэтому, подобного рода проекты, как правило, должны быть скрыты не только от поисковых машин, но и от случайно или не случайно попавших пользователей. И чтобы не изобретать целый алгоритм для доступа к ресурсу на помощь приходит стандартный алгоритм аутентификации веб-сервера apache, благодаря которому можно быстро защитить, как весь проект, так и его отдельные директории.
Принцип работы базовой аутентификации
Когда пользователь обращается к защищенной директории, в ответ на запрос сервер Apache отсылает заголовок с кодом 401. Браузер принимает данный заголовок и открывает окно для ввода имени пользователя и пароля. После ввода данные отправляются обратно на сервер, который проверяет имя пользователя и пароль на соответствие. Если данные, которые ввел посетитель, совпадают, он получает доступ к ресурсу. Кроме того, совместно с 401 заголовком, браузеру также отправляется специальное имя (область действия). Браузер кеширует все эти данные (имя пользователя, пароль и область действия) и передает их при каждом запросе. Именно поэтому, ввод имени пользователя и пароля осуществляется один раз и не требует повторного ввода при каждом новом запросе. Как правило, кеширование данных параметров происходит в пределах одного сеанса.
Что требуется для работы аутентификации.
Чтобы наша аутентификация начала работать, потребуется создать 2 файла, один из которых чаще всего уже имеется – это файл .htaccess, если его нет, то необходимо его создать. В данном файле указываем следующие параметры:
AuthType Basic
AuthName "Private zone. Only for administrator!"
AuthUserFile /path/to/www/.htpasswd
require user admin
После этого необходимо создать файл .htpasswd, путь до которого мы как раз и указываем в предыдущем файле. Данный файл хранит в себе информацию с именем пользователя и паролем, который прописывается в формате хеша и выглядит примерно так:
admin:$apr1$5yC6wlzB$9qbRcHkGjk3DjeIbtu6w21
Здесь admin – это имя пользователя, после которого через двоеточие указывается хеш пароля. Сгенерировать данный файл можно с помощью файла htpasswd.exe, который находится в папке с сервером apache по примерно следующему пути /path/to/apache-2.4/bin/, с помощью следующей команды: htpasswd -cm .htpasswd admin
Здесь флаг –c – означает, что требуется создать файл, а m – используемый алгоритм шифрования MD5, он используется по умолчанию, поэтому его указывать не обязательно. Кроме того, можно использовать и другие алгоритмы шифрования, подробную информацию можно получить, если ввести команду без параметров соответственно: htpasswd
Помещаем файл .htaccess в соответствующую директорию (директории) и, если apache установлен, получаем следующий результат (рис.1).
Рис.1
Следует понимать, что действие файла .htaccess распространяется на все подпапки нижнего уровня. То есть, поместив данный файл в директорию /admin/, он также будет исполняться и для папок вида /admin/users/ и т.д.
Файл .htpasswd лучше помещать выше корневой директории, куда посторонние пользователи не смогут попасть. Если это невозможно, данный файл следует защитить в .htaccess:
<Files .htpasswd>
deny from all
</Files>
Группы
Если к защищенной директории необходимо предоставить доступ множеству людей, удобнее всего разделить их на группы, в соответствии с которыми будет предоставлен доступ.
Admins: admin root
Users: guest user
В группу admin попадут соответственно admin и root, в группу Users - guest и user.
Итог
Доступ только для пользователя admin
AuthType Basic
AuthName "Private zone. Only for administrator!"
AuthUserFile /path/to/www/.htpasswd
require user admin
Доступ для всех прошедших авторизацию
AuthType Basic
AuthName "Private zone. Only for administrator!"
AuthUserFile /path/to/www/.htpasswd
require valid-user
Доступ для пользователей группы admins
AuthType Basic
AuthName "Private zone. Only for administrator!"
AuthUserFile /path/to/www/.htpasswd
AuthGroupFile /path/to/www/group
require group admins
Запрет доступа к файлу admin.txt
<Files admin.txt>
AuthType Basic
AuthName "Private zone. Only for administrator!"
AuthUserFile /path/to/www/.htpasswd
require valid-user
</Files>