Настройка базовой и дайджест HTTP аутентификации в Apache, Nginx

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; 
        }
    }
}

Использование 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).

PQ VPS сервера в 28+ странах.