.htaccess и .htpasswd — защита доступа
Используем файлы .htaccess и .htpasswd и для установки пароля на доступ к определенным страницам или разделам вашего сайта.
Для начало создаем в нужном подкаталоге файл .htaccess, в который пишем следующее:
AuthType Basic
Далее создаем файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile.
AuthName "Access is Denied. Enter password"
AuthUserFile /path_to_file/.passwords
<Limit GET POST>
Require valid-user
</Limit>
Пароли в этом файле должны быть шифрованными, чего можно достигнуть с помощью программы htpasswd, входящей в поставку Apache.
Подробную информацию об использывании можно почитать Manual Page: htpasswd или покурить man, так же достаточно запустив htpasswd в unix shell:
$ htpasswd
Usage:
htpasswd [-cmdpsD] passwordfile username
htpasswd -b[cmdpsD] passwordfile username passwordhtpasswd -n[mdps] username
htpasswd -nb[mdps] username password
-c Create a new file.
-n Don't update file; display results on stdout.
-m Force MD5 encryption of the password.
-d Force CRYPT encryption of the password (default).
-p Do not encrypt the password (plaintext).
-s Force SHA encryption of the password.
-b Use the password from the command line rather than prompting for it.
.....
Итак, у нас еще нет файла с паролями и нам нужно его создать :
$ htpasswd -c .passwords test
New password:
Re-type new password:
Adding password for user test
После этого создастся файл .passwords, в котором окажется пользователь test и его пароль в зашифрованном виде:
$ cat .passwords
test:WE.MwmyNsIG76
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ ‘-c’ :
$ htpasswd .passwords test1
New password:
Re-type new password:
Adding password for user test1
$ cat .passwords
test:WE.MwmyNsIG76
test1:Eeg7zFPfq32BM
В качестве параметра к директиве require мы указали valid-user. Это означает, что любой пользователь, который есть в используемом файле с паролями, может иметь доступ к защищенному ресурсу. Однако, согласитесь, удобно иметь все пароли в одном файле, а права на конкретные ресурсы давать только определенным пользователям.
Для этого покажем на напримере, даем доступ только пользователю test:
AuthType Basic
AuthName "Access is Denied. Enter password"
AuthUserFile /path_to_file/.passwords
<Limit GET POST>
Require user test
</Limit>
Еще можно объединить пользователей в группы и давать доступ не конкретным юзерам, а группам.
Это можно сделать с помощью директивы AuthGroupFile:
AuthGroupFile /path_to_file/groups
В файле groups создаем группы примерно так :
group1: user1 user3
Соответственно, директиву require будем использовать так :
group2: user2 user4
group3: user1 user3
AuthType Basic
AuthName "Access is Denied. Enter password"
AuthGroupFile /path_to_file/groups
AuthUserFile /path_to_file/.passwords
<Limit GET POST>
Require user test
Require group group1
</Limit>