Как настроить аутентификацию по паролю с Nginx в Ubuntu 14.04

Вступление

При настройке веб-сервера часто существуют разделы сайта, доступ к которым вы хотите ограничить. Веб-приложения часто предоставляют свои собственные методы аутентификации и авторизации, но сам веб-сервер может использоваться для ограничения доступа, если они неадекватны или недоступны.

В этом руководстве мы покажем, как защитить паролем ресурсы на веб-сервере Nginx, работающем в Ubuntu 14.04.

Предпосылки

Для начала вам понадобится доступ к серверной среде Ubuntu 14.04. Для выполнения административных задач вам понадобится пользователь без полномочий root с привилегиями + sudo +. Чтобы узнать, как создать такого пользователя, следуйте нашему Ubuntu 14.04 начальному руководству по установке сервера.

Если вы еще этого не сделали, установите Nginx на свой компьютер, набрав:

sudo apt-get update
sudo apt-get install nginx

Создать файл паролей

Для начала нам нужно создать файл, который будет содержать ваши комбинации имени пользователя и пароля. Вы можете сделать это с помощью утилит OpenSSL, которые могут быть уже доступны на вашем сервере. Кроме того, вы можете использовать специальную утилиту + htpasswd +, включенную в пакет + apache2-utils + (файлы паролей Nginx используют тот же формат, что и Apache). Выберите метод ниже, который вам нравится больше всего.

Создайте файл пароля с помощью утилит OpenSSL

Если на вашем сервере установлен OpenSSL, вы можете создать файл паролей без дополнительных пакетов. Мы создадим скрытый файл с именем + .htpasswd + в каталоге конфигурации + / etc / nginx + для хранения наших комбинаций имени пользователя и пароля.

Вы можете добавить имя пользователя в файл с помощью этой команды. Мы используем + sammy + в качестве нашего имени пользователя, но вы можете использовать любое имя, какое захотите:

sudo sh -c "echo -n ':' >> /etc/nginx/.htpasswd"

Затем добавьте зашифрованную запись пароля для имени пользователя, набрав:

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

Вы можете повторить этот процесс для дополнительных имен пользователей. Вы можете увидеть, как имена пользователей и зашифрованные пароли хранятся в файле, набрав:

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

Создайте файл паролей с помощью утилит Apache

Хотя OpenSSL может зашифровывать пароли для аутентификации Nginx, многим пользователям проще использовать специализированную утилиту. Утилита + htpasswd +, находящаяся в пакете + apache2-utils +, хорошо выполняет эту функцию.

Установите пакет + apache2-utils + на свой сервер, набрав:

sudo apt-get update
sudo apt-get install apache2-utils

Теперь у вас есть доступ к команде + htpasswd +. Мы можем использовать это для создания файла паролей, который Nginx может использовать для аутентификации пользователей. Для этого мы создадим скрытый файл с именем + .htpasswd + в нашем каталоге конфигурации + / etc / nginx +.

При первом использовании этой утилиты нам нужно добавить опцию + -c +, чтобы создать указанный файл. Мы указываем имя пользователя (+ sammy + в этом примере) в конце команды, чтобы создать новую запись в файле:

sudo htpasswd -c /etc/nginx/.htpasswd

Вам будет предложено предоставить и подтвердить пароль для пользователя.

Оставьте аргумент + -c + для любых дополнительных пользователей, которых вы хотите добавить:

sudo htpasswd /etc/nginx/.htpasswd

Если мы просмотрим содержимое файла, мы увидим имя пользователя и зашифрованный пароль для каждой записи:

cat /etc/nginx/.htpasswd
Outputsammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Настройте проверку подлинности с помощью пароля Nginx

Теперь, когда у нас есть файл с нашими пользователями и паролями в формате, который может прочитать Nginx, нам нужно настроить Nginx для проверки этого файла перед обслуживанием нашего защищенного содержимого.

Начните с открытия файла конфигурации блока сервера, к которому вы хотите добавить ограничение. В нашем примере мы будем использовать файл блока сервера + default +, установленный через пакет Uginntu Nginx:

sudo nano /etc/nginx/sites-enabled/

Внутри, с удаленными комментариями, файл должен выглядеть примерно так:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;
   }
}

Чтобы настроить аутентификацию, вам нужно выбрать контекст для ограничения. Помимо прочего, Nginx позволяет вам устанавливать ограничения на уровне сервера или внутри определенного места. В нашем примере мы ограничим весь корневой каталог документа блоком местоположения, но вы можете изменить этот список, чтобы он был предназначен только для определенного каталога в веб-пространстве:

В этом блоке местоположения используйте директиву + auth_basic , чтобы включить аутентификацию и выбрать имя области, которое будет отображаться пользователю при запросе учетных данных. Мы будем использовать директиву ` auth_basic_user_file +`, чтобы указать Nginx на файл паролей, который мы создали:

/ И т.д. / Nginx / сайты с поддержкой / по умолчанию

server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;

   root /usr/share/nginx/html;
   index index.html index.htm;

   server_name localhost;

   location / {
       try_files $uri $uri/ =404;


   }
}

Сохраните и закройте файл, когда вы закончите. Перезапустите Nginx для реализации вашей политики паролей:

sudo service nginx restart

Указанный вами каталог теперь должен быть защищен паролем.

Подтвердите аутентификацию по паролю

Чтобы подтвердить, что ваш контент защищен, попробуйте получить доступ к вашему ограниченному контенту в веб-браузере. Вы должны получить приглашение с именем пользователя и паролем, которое выглядит следующим образом:

изображение: https: //assets.digitalocean.com/articles/nginx_password_1404/password_prompt.png [запрос пароля Nginx]

Если вы введете правильные учетные данные, вам будет разрешен доступ к содержимому. Если вы введете неправильные учетные данные или нажмете «Отмена», вы увидите страницу ошибки «Требуется авторизация»:

изображение: https: //assets.digitalocean.com/articles/nginx_password_1404/unauthorized_error.png [несанкционированная ошибка Nginx]

Заключение

Теперь у вас должно быть все необходимое для настройки базовой аутентификации для вашего сайта. Помните, что защиту паролем следует сочетать с шифрованием SSL, чтобы ваши учетные данные не отправлялись на сервер в виде простого текста. Чтобы узнать, как создать самозаверяющий сертификат SSL для использования с Nginx, следуйте https://www.digitalocean.com/community/tutorials/how-to-create-an-ssl-certificate-on-nginx-for-ubuntu -14-04 [это руководство]. Чтобы узнать, как установить коммерческий сертификат, следуйте th руководства.

Related