Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
http-autentifikacija [2024/01/11 02:47] (текущий) darkfire
Строка 1: Строка 1:
 +====== Настройка базовой и дайджест HTTP аутентификации в Apache, Nginx ======
 +{{htmlmetatags>
 +metatag-description=(Apache, Nginx поддерживает 2 вида аутентификации: Basic аутентификацию (Базовая аутентификация) и Digest аутентификацию (Дайджест аутентификация).)
 +}}
 +
 +[[HTTP|HTTP]]- аутентификация в [[PHP]], [[Apache]]. [[Аутентификация]] -  процедура проверки соответствия некоего лица и его учетной записи в компьютерной системе. В простейшем случае проверка происходит с помощью пароля.
 +
 +Apache поддерживает 2 вида аутентификации: Basic - аутентификацию (Базовая аутентификация) и Digest - аутентификацию (Дайджест аутентификация). Аутентификацию можно настроить непосредственно в конфигурационном файле описывающий виртуальный хост или в файле .[[htaccess|htaccess]].
 +
 +Читайте также [[https://www.php.net/manual/ru/features.http-auth.php|HTTP-аутентификация при помощи PHP]]
 +
 +Basic Http Authentification придумали как раз для того, чтобы быстро закрывать сайты или их отдельные разделы от посторонних глаз. Поддерживается практически всеми браузерами и работает адекватно при условии, что ваш сайт на https. На http-сайтах закрывать админки через basic auth не стоит, потому что логин и пароль передаются в http-заголовках в открытом виде. А значит вас могут поломать злые хакеры.
 +
 +===== Шпаргалка для Nginx =====
 +Сначала нужно установить утилиту, которые поможет сгенерить .htpasswd
 +
 +<file bash>
 +Debian, Ubuntu:
 +apt install apache2-utils
 +CentOS:
 +yum install httpd-utils
 +</file>
 +Создаем файл с пользователем и паролем:
 +<file bash>
 +htpasswd -c /etc/nginx/conf.d/.htpasswd admin
 +</file>
 +Эта команда предложит ввести пароль для пользователя admin.
 +
 +Дальше идем в конфигурационных файл вашего домена [[Nginx]] и добавляем строки в секцию server, если мы хотим закрыть весь сайт:
 +<file bash>
 +auth_basic "Enter password!";
 +auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
 +</file>
 +Дальше применим настройки в nginx, для этого ключем t проверим на ошибки синтаксиса и применим:
 +<file>
 +nginx -t
 +nginx -s reload
 +</file>
 +
 +Ниже пример настройки Nginx, в которой комбинируется базовая HTTP аутентификация и доступ по IP адресам:
 +
 +<file bash>
 +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; 
 +        }
 +    }
 +}
 +</file>
 +
 +
 +
 +====== Использование htpasswd ======
 +<code bash>
 +> 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
 +
 +...
 +</code>
 +[[.htaccess]] можно использовать и для установки пароля на доступ к определенным страницам или разделам вашего сайта. Делается это путем создания в нужном подкаталоге файла .htaccess, в который пишется следующее:
 +<code>
 +AuthType Basic
 +AuthName "this is a test of protected realm"
 +AuthUserFile /path/to/file/with/passwords
 +<Limit GET POST>
 +require valid-user
 +</Limit>
 +</code>
 +Кроме того, нужно создать файл с паролями, путь к которому указывается в качестве параметра к директиве AuthUserFile. Пароли в этом файле должны быть шифрованными, чего можно достигнуть с помощью программы htpasswd, входящей в поставку Apache.
 +
 +Итак, изначально у нас еще нет файла с паролями и нам нужно его создать :
 +<file>
 +> htpasswd -c passwords test1
 +New password:
 +Re-type new password:
 +Adding password for user test1
 +>
 +</file>
 +После выполнения данной операции htpasswd создаст файл passwords, в котором окажется пользователь test1 и его пароль в зашифрованном виде:
 +<file>
 +> cat passwords
 +test1:zgco1KREjBY8M
 +>
 +</file>
 +А теперь мы хотим добавить еще одного пользователя. Так как файл с паролями у нас уже есть, мы просто не будем использовать ключ '-c' :
 +<file>
 +> htpasswd passwords test2
 +New password:
 +Re-type new password:
 +Adding password for user test2
 +
 +> cat passwords
 +test1:zgco1KREjBY8M
 +test2:eN3uA6t0kzV1c
 +>
 +</file>
 +<panel type="success">Чтобы не вводить пароль используйте ключи nb, например htpasswd -nb username password</panel>
 +
 +Сейчас попробуйте обратиться к тому каталогу, в котором мы размещали .htaccess – браузер спросит у вас пароль, чего мы и добивались. Пока не будет введен правильный логин и пароль, посетитель не увидит соответствующей страницы.
 +
 +В качестве параметра к директиве require мы указали valid-user. Это означает, что любой пользователь, который есть в используемом файле с паролями, может иметь доступ к защищенному ресурсу. Однако, согласитесь, удобно иметь все пароли в одном файле, а права на конкретные ресурсы давать только определенным пользователям. Это тоже реализуемо. Например, мы хотим дать доступ только пользователю test2. Делаем так :
 +require user test2
 +Еще можно объединить пользователей в группы и давать доступ не конкретным логинам, а группам. Это можно сделать с помощью директивы AuthGroupFile:
 +AuthGroupFile /path/to/file/with/groups
 +В файле /path/to/file/with/groups создаем группы примерно так :
 +<file>
 +group1: test1 test5
 +group2: test2 test4
 +group3: test1 test3
 +</file>
 +Соответственно, директиву require будем использовать так: require group group3
 +Механизмы ограничения доступа, которые реализованы в Apache, позволяют очень гибко управлять правами для пользователей и групп, что является очень важной возможностью. Если углубиться в изучение предмета, Вы сможете узнать и то, что логины и пароли, используемые для авторизации, можно хранить не только в файлах, но и в простейших базах данных формата BerkeleyDB - почитайте документацию по директиве AuthDBGroupFile. Также для хранения данных авторизации можно использовать практически любую СУБД ([[MySQL]] или [[PostgreSQL]]). 
 +
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!