Поиск по сайту:

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


Введение

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

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

Предпосылки

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

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

  1. sudo apt-get update
  2. sudo apt-get install nginx

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

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

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

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

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

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

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

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

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

  1. cat /etc/nginx/.htpasswd
Output
sammy:$apr1$wI1/T0nB$jEKuTJHkTOOWkopnXqC1d1

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

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

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

  1. sudo apt-get update
  2. sudo apt-get install apache2-utils

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

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

  1. sudo htpasswd -c /etc/nginx/.htpasswd sammy

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

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

  1. sudo htpasswd /etc/nginx/.htpasswd another_user

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

  1. cat /etc/nginx/.htpasswd
Output
sammy:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz. another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

Настроить аутентификацию по паролю Nginx

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

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

  1. sudo nano /etc/nginx/sites-enabled/default

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

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 на созданный нами файл паролей:

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;
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

Сохраните и закройте файл, когда закончите. Перезапустите Nginx, чтобы применить политику паролей:

  1. sudo service nginx restart

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

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

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

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

Заключение

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