HTTP- аутентификация в PHP, Apache. Аутентификация - процедура проверки соответствия некоего лица и его учетной записи в компьютерной системе. В простейшем случае проверка происходит с помощью пароля.
Apache поддерживает 2 вида аутентификации: Basic - аутентификацию (Базовая аутентификация) и Digest - аутентификацию (Дайджест аутентификация). Аутентификацию можно настроить непосредственно в конфигурационном файле описывающий виртуальный хост или в файле .htaccess.
Читайте также HTTP-аутентификация при помощи PHP
Basic Http Authentification придумали как раз для того, чтобы быстро закрывать сайты или их отдельные разделы от посторонних глаз. Поддерживается практически всеми браузерами и работает адекватно при условии, что ваш сайт на https. На http-сайтах закрывать админки через basic auth не стоит, потому что логин и пароль передаются в http-заголовках в открытом виде. А значит вас могут поломать злые хакеры.
Сначала нужно установить утилиту, которые поможет сгенерить .htpasswd
Debian, Ubuntu: apt install apache2-utils CentOS: yum install httpd-utils
Создаем файл с пользователем и паролем:
htpasswd -c /etc/nginx/conf.d/.htpasswd admin
Эта команда предложит ввести пароль для пользователя admin.
Дальше идем в конфигурационных файл вашего домена Nginx оптимизация и использование и добавляем строки в секцию server, если мы хотим закрыть весь сайт:
auth_basic "Enter password!"; auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
Дальше применим настройки в nginx, для этого ключем t проверим на ошибки синтаксиса и применим:
nginx -t nginx -s reload
Ниже пример настройки Nginx, в которой комбинируется базовая HTTP аутентификация и доступ по IP адресам:
http { server { listen 192.168.1.23:8080; root /usr/share/nginx/html; location /api { api; satisfy all; deny 192.168.1.2; allow 192.168.1.1/24; allow 127.0.0.1; deny all; auth_basic "Administrator’s Area"; auth_basic_user_file /etc/apache2/.htpasswd; } } }
> man htpasswd NAME htpasswd - Manage user files for basic authentication SYNOPSIS htpasswd [ -c ] [ -m ] [ -D ] passwdfile username htpasswd -b [ -c ] [ -m | -d | -p | -s ] [ -D ] passwdfile username password htpasswd -n [ -m | -d | -s | -p ] username htpasswd -nb [ -m | -d | -s | -p ] username password ...
Настройка .htaccess можно использовать и для установки пароля на доступ к определенным страницам или разделам вашего сайта. Делается это путем создания в нужном подкаталоге файла .htaccess, в который пишется следующее:
AuthType Basic AuthName "this is a test of protected realm" AuthUserFile /path/to/file/with/passwords <Limit GET POST> require valid-user </Limit>
Кроме того, нужно создать файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile. Пароли в этом файле должны быть шифрованными, чего можно достигнуть с помощью программы htpasswd, входящей в поставку Apache.
Итак, изначально у нас еще нет файла с паролями и нам нужно его создать :
> htpasswd -c passwords test1 New password: Re-type new password: Adding password for user test1 >
После выполнения данной операции htpasswd создаст файл passwords, в котором окажется пользователь test1 и его пароль в зашифрованном виде:
> cat passwords test1:zgco1KREjBY8M >
А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ '-c' :
> htpasswd passwords test2 New password: Re-type new password: Adding password for user test2 > cat passwords test1:zgco1KREjBY8M test2:eN3uA6t0kzV1c >
Чтобы не вводить пароль используйте ключи nb, например htpasswd -nb username password
Сейчас попробуйте обратиться к тому каталогу, в котором мы размещали .htaccess – браузер спросит у вас пароль, чего мы и добивались. Пока не будет введен правильный логин и пароль, посетитель не увидит соответствующей страницы.
В качестве параметра к директиве require мы указали valid-user. Это означает, что любой пользователь, который есть в используемом файле с паролями, может иметь доступ к защищенному ресурсу. Однако, согласитесь, удобно иметь все пароли в одном файле, а права на конкретные ресурсы давать только определенным пользователям. Это тоже реализуемо. Например, мы хотим дать доступ только пользователю test2. Делаем так : require user test2 Еще можно объединить пользователей в группы и давать доступ не конкретным логинам, а группам. Это можно сделать с помощью директивы AuthGroupFile: AuthGroupFile /path/to/file/with/groups В файле /path/to/file/with/groups создаем группы примерно так :
group1: test1 test5 group2: test2 test4 group3: test1 test3
Соответственно, директиву require будем использовать так: require group group3 Механизмы ограничения доступа, которые реализованы в Apache, позволяют очень гибко управлять правами для пользователей и групп, что является очень важной возможностью. Если углубиться в изучение предмета, Вы сможете узнать и то, что логины и пароли, используемые для авторизации, можно хранить не только в файлах, но и в простейших базах данных формата BerkeleyDB - почитайте документацию по директиве AuthDBGroupFile. Также для хранения данных авторизации можно использовать практически любую СУБД (Движок БД MySQL или Использование и настройка PostgreSQL).