One place for hosting & domains

      аутентификации

      Установка и настройка SimpleSAMLphp для аутентификации SAML в Ubuntu 18.04


      Введение

      SimpleSAMLphp — это PHP-приложение для аутентификации с открытым исходным кодом, которое предоставляет поддержку SAML 2.0 в качестве поставщика сервиса (SP) или поставщика учетных записей (IdP).

      SAML (язык разметки подтверждений безопасности) — это защищенный механизм коммуникации на базе XML для обмена данными аутентификации и авторизации между организациями и приложениями. Часто он используется для реализации Web SSO (единый вход в систему). Это устраняет необходимость сохранения нескольких учетных данных для разных организаций. Проще говоря, вы можете использовать одну учетную запись, например имя пользователя и пароль, для доступа к нескольким приложениям.

      Экземпляр SimpleSAMLphp подключается к источнику аутентификации, который представляет собой поставщика удостоверений, например LDAP или база данных пользователей. Он выполняет аутентификацию пользователей для этого источника аутентификации, прежде чем предоставлять доступ к ресурсам, предоставляемым связанным поставщиком сервисов.

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

      Предварительные требования

      • Один сервер Ubuntu 18.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 18.04, включая пользователя non-root user с привилегиями sudo и брандмауэр.
      • Apache, MySQL и PHP, установленные на сервере согласно руководству Установка Linux, Apache, MySQL, PHP (стек LAMP) в Ubuntu 18.04.
      • Доменное имя, настроенное так, чтобы указывать на ваш сервер. Информацию о том, как сделать так, чтобы домены указывали на дроплеты DigitalOcean, можно найти в руководстве Как создать указание на серверы имен DigitalOcean из общих реестров доменов.
      • Виртуальный хост, настроенный для домена с помощью директивы ServerName. Следуйте указаниям руководства по настройке виртуальных хостов Apache в Ubuntu 18.04 для настройки вашего доменного имени.
      • Сертификат Let’s Encrypt для домена, который вы настроили согласно руководству по обеспечению безопасности Apache с помощью Let’s Encrypt в Ubuntu 18.04.

      Шаг 1 — Загрузка и установка SimpleSAMLphp

      Установка SimpleSAMLphp выполняется в несколько шагов. Мы должны загрузить программное обеспечение, а также несколько дополнительных компонентов и предварительных требований. Также нам необходимо внести некоторые изменения в нашу конфигурацию виртуального хоста.

      Войдите на сервер, если вы еще не сделали этого.

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

      • wget https://simplesamlphp.org/download?latest

      В результате будет загружен сжатый файл с именем download?latest, который содержит SimpleSAMLphp. Выполните извлечение содержимого файла с помощью команды tar:

      Файлы будут извлечены в новую директорию с именем simplesamlphp-1.x.y, где x.y — это текущий номер версии. Используйте команду ls для идентификации файла:

      Вы увидите отображаемое имя файла:

      Ouptut

      simplesamlphp-1.18.5

      Теперь скопируйте содержимое директории в /var/simplesamlphp​​​ с помощью команды cp. Обязательно замените номер версии на номер вашей версии:

      • sudo cp -a simplesamlphp-1.x.y/. /var/simplesamlphp/

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

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

      Существует несколько дополнительных пакетов программного обеспечения, которые требуются SimpleSAMLphp, включая расширения PHP для работы с XML, многобайтовыми строками, curl и LDAP. Также необходимо установить memcached. Установите все необходимо с помощью вашего диспетчера пакетов.

      Вначале обновите список пакетов:

      Затем выполните установку пакетов:

      • sudo apt install php-xml php-mbstring php-curl php-memcache php-ldap memcached

      После завершения установки перезапустите Apache для активации новых расширений PHP:

      • sudo systemctl restart apache2

      Теперь, когда SimpleSAMLphp установлен, давайте настроим Apache для обслуживания файлов.

      Шаг 2 — Настройка Apache для обслуживания SimpleSAMLphp

      Вы уже настроили домен и указали на сервер, а также настроили виртуальный хост для работы с HTTPS, обеспечив защиту Apache с помощью Let’s Encrypt. Давайте используем его для обслуживания SimpleSAMLphp.

      Единственная директория SimpleSAMLphp, которая должна быть видима в сети, — /var/simplesamlphp/www. Чтобы открыть для нее доступ из Интернета, измените файл конфигурации виртуального хоста SSL Apache для вашего домена.

      Если ваш файл конфигурации виртуального хоста имеет имя your_domain.conf, Let’s Encrypt создает новый файл конфигурации your_domain-le-ssl.conf​​​, который обрабатывает запросы HTTPS для вашего домена. Откройте файл конфигурации SSL с помощью следующей команды, чтобы отредактировать файл. Обязательно замените your_domain на актуальное имя файла:

      • sudo nano /etc/apache2/sites-available/your_domain-le-ssl.conf

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

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      <IfModule mod_ssl.c>
      <VirtualHost *:443>
              ServerName your_domain
      
              ServerAdmin webmaster@localhost
              DocumentRoot /var/www/html
      
              ErrorLog ${APACHE_LOG_DIR}/error.log
              CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      SSLCertificateFile /etc/letsencrypt/live/your_domain/fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/your_domain/privkey.pem
      Include /etc/letsencrypt/options-ssl-apache.conf
      </VirtualHost>
      </IfModule>
      

      Директива ServerName задает здесь базовый домен, который должен соответствовать этому определению виртуального хоста. Это должно быть доменное имя, для которого вы настроили сертификат SSL согласно информации в разделе предварительных требований. Давайте добавим директиву Alias, которая будет контролировать SimpleSAMLphp для всех URL-адресов, соответствующих https://your_domain/simplesaml/*. Сделайте это, добавив следующую строку в файл конфигурации:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
      
        Alias /simplesaml /var/simplesamlphp/www
      
      ...
      

      Это означает, что все URL-адреса, совпадающие с domain_name/simplesaml/*, будут направляться в директорию /var/simplesamlphp/www, предоставляя контроль SimpleSAMLphp.

      Далее мы предоставим доступ к директории /var/simplesamlphp/www, указав контроль доступа Require all granted​​​ для нее. Это позволит получить доступ к службе SimpleSAMLphp через Интернет. Сделайте это, добавив следующую строку в файл конфигурации:

      your_domain-le-ssl.conf’>/etc/apache2/sites-available/your_domain-le-ssl.conf

      ...
        Alias /simplesaml /var/simplesamlphp/www
        <Directory /var/simplesamlphp/www/>
            Require all granted
        </Directory>
      ...
      

      Сохраните и закройте файл. Перезапустите Apache для вступления изменений в силу:

      • sudo systemctl restart apache2

      Теперь, когда Apache настроен для обслуживания файлов приложения, давайте настроим SimpleSAMLphp.

      Шаг 3 — Настройка SimpleSAMLphp

      Далее нам необходимо внести несколько изменений в основную конфигурацию SimpleSAMLphp, размещенную в /var/simplesamlphp/config/config.php​​​. Откройте файл в своем редакторе:

      • nano /var/simplesamlphp/config/config.php

      Задайте пароль администратора, заменив в строке 'auth.adminpassword' значение по умолчанию 123​​ на более безопасный пароль. Этот пароль позволяет получить доступ к некоторым страницам в веб-интерфейсе вашей установки SimpleSAMLphp:

      /var/simplesamlphp/config/config.php

      . . .
      'auth.adminpassword'        => 'your_admin_password',
      . . .
      

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

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

      Опция -base64 32 гарантирует получение зашифрованной по алгоритму Base64 строки длиной 32 символа.

      Затем в файле конфигурации найдите запись 'secretsalt'​​​ и замените defaultsecretsalt​​​ на строку, которую вы сгнерировали:

      /var/simplesamlphp/config/config.php

      . . .
      'secretsalt' => 'your_generated_salt',
      . . .
      

      Затем задайте техническую контактную информацию. Эта информация будет доступна в генерируемых метаданных, а SimpleSAMLphp будет отправлять автоматически генерируемые отчеты об ошибке на заданный вами адрес электронной почты. Найдите следующий раздел:

      /var/simplesamlphp/config/config.php

      . . .
      'technicalcontact_name'     => 'Administrator',
      'technicalcontact_email'    => 'na@example.org',
      . . .
      

      Замените Administrator​​​ и na@example.org на соответствующие значения.

      Затем задайте часовой пояс, который вы хотите использовать. Найдите следующий раздел:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => null,
      . . .
      

      Замените null​​​ на предпочитаемый часовой пояс из этого списка часовых поясов для PHP. Обязательно поместите значения в кавычки:

      /var/simplesamlphp/config/config.php

      . . .
      'timezone' => 'America/New_York',
      . . .
      

      Сохраните и закройте файл. Теперь вы можете получить доступ к сайту в браузере, указав в адресной строке https://your_domain/simplesaml​​​. Вы увидите следующий экран в браузере:

      веб-интерфейс simplesaml

      Чтобы убедиться, что ваша установка PHP соответствует всем требованиям SimpleSAMLphp для плавного запуска, выберите вкладку Конфигурация и нажмите ссылку Войти как администратор. Затем воспользуйтесь паролем администратора, заданным в файле конфигурации на шаге 3.

      После входа вы увидите список обязательных и дополнительных расширений PHP, которые используются SimpleSAMLphp. Убедитесь, что вы установили каждое расширение, за исключением predis/predis​​​:

      Все расширения установлены

      Если какие-либо обязательные компоненты отсутствуют, просмотрите это руководство и установите недостающие элементы, прежде чем продолжить.

      Также вы увидите ссылку, которая говорит Проверка работоспособности вашей установки SimpleSAMLphp. Нажмите эту ссылку для получения списка проверок, выполненных для вашей установки, чтобы убедиться, что они выполнены успешно.

      Теперь давайте перейдем к настройке источника аутентификации для SimpleSAMLphp.

      Шаг 4 — Настройка источника аутентификации

      Теперь, когда у нас есть установленная и настроенная версия SimpleSAMLphp, давайте настроим источник аутентификации, чтобы мы могли выполнять аутентификацию пользователей. Мы будем использовать базу данных MySQL для хранения списка имен пользователей и паролей для аутентификации.

      Чтобы начать, выполните вход в учетную запись root MySQL:

      Вам будет предложено ввести пароль учетной записи root MySQL. Предоставьте нужные данные, чтобы продолжить.

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

      • CREATE DATABASE auth DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

      Теперь давайте создадим отдельного пользователя MySQL для работы исключительно в нашей базе данных auth. С точки зрения управления и безопасности рекомендуется использовать базы данных и учетные записи с одной функцией. Мы назовем пользователя authuser. Выполните следующую команду для создания пользователя, задайте пароль и предоставьте доступ к нашей базе данных auth. Не забудьте задать надежный пароль для нового пользователя базы данных.

      • GRANT ALL ON auth.* TO 'authuser'@'localhost' IDENTIFIED BY 'your_mysql_auth_user_password';

      Теперь создайте таблицу users, которая будет состоять из двух полей: username и password. Для дополнительной безопасности мы будем использовать функцию MySQL AES_ENCRYPT() для шифрования строки пароля, чтобы не сохранять пароли в текстовом формате. Эта функция шифрует строку и возвращает бинарную строку.

      • CREATE TABLE auth.users(username VARCHAR(30), password VARBINARY(30));

      Затем добавьте трех пользователей в созданную таблицу. Здесь мы будем использовать функцию AES_ENCRYPT() для шифрования значений для поля пароля. Вам необходимо задать строку, которая используется как ключ шифрования. Обязательно замените ее на собственную строку, которая может быть любой строкой, чем длиннее, тем сложнее.

      • INSERT INTO auth.users(username, password) VALUES
      • ('user1', AES_ENCRYPT('user1pass','your_secret_key')),
      • ('user2', AES_ENCRYPT('user2pass','your_secret_key')),
      • ('user3', AES_ENCRYPT('user3pass','your_secret_key'));

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

      Нам нужно установить права, чтобы текущий экземпляр MySQL узнал о последних внесенных нами изменениях в права:

      Закройте командную строку MySQL с помощью следующей команды:

      Чтобы активировать функционал поставщика удостоверений в SimpleSAMLphp, нам нужно отредактировать файл /var/simplesamlphp/config/config.php. Существует несколько доступных способов, но поскольку это руководство посвящено поддержке SAML 2.0, мы будем использовать опцию enable.saml20-idp​​​. Для этого откройте /var/simplesamlphp/config/config.php​​​ и активируйте поддержку SAML 2.0:

      • nano /var/simplesamlphp/config/config.php

      Найдите следующий раздел файла и замените false​​ на true:

      /var/simplesamlphp/config/config.php

      ...
      'enable.saml20-idp' => true,
      ...
      

      Сохраните файл и выйдите из редактора.

      Теперь, когда у нас есть активированный поставщик удостоверений, нам нужно указать модуль аутентификации для использования. Поскольку у нас есть таблица пользователей в базе данных MySQL, мы будем использовать модуль аутентификации SQL. Откройте файл конфигурации authsources​​​:

      • nano /var/simplesamlphp/config/authsources.php

      Найдите следующий закомментированный блок:

      /var/simplesamlphp/config/authsources.php

      ...
          /*
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'pgsql:host=sql.example.org;port=5432;dbname=simplesaml',
              'username' => 'simplesaml',
              'password' => 'secretpassword',
              'query' => 'SELECT uid, givenName, email, eduPersonPrincipalName FROM users WHERE uid = :username AND password = SHA2(CONCAT((SELECT salt FROM users WHERE uid = :username), :password),256);',
          ),
          */
      ...
      

      Этот код определяет подключение к базе данных и запрос, который SimpleSAMLphp может использовать для поиска пользователя в таблице базы данных с именем users. Нам нужно разкомментировать его и изменить запрос для поиска пользователя из нашей таблицы с помощью функции MySQL AES_DECRYPT(). Нам нужно предоставить функции AES_DECRYPT() тот же ключ, который мы использовали для шифрования паролей в запросе.

      Измените раздел файла, чтобы указать данные подключения к базе данных и запрос:

      /var/simplesamlphp/config/authsources.php

      ...
          'example-sql' => array(
              'sqlauth:SQL',
              'dsn' => 'mysql:host=localhost;port=5432;dbname=auth',
              'username' => 'authuser',
              'password' => 'your_mysql_auth_user_password',
              'query' => 'SELECT username FROM users WHERE username = :username AND AES_DECRYPT(password,"your_secret_key") = :password',
          ),
      ...
      

      Обязательно укажите секретный ключ, который вы задали, вместо your_secret_key.

      Сохраните и закройте файл. Давайте проверим нашего поставщика удостоверений.

      Шаг 5 — Тестирование поставщика удостоверений с помощью SAML 2.0 SP Demo

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

      Список настроенных источников аутентификации

      Нажмите example-sql, поскольку это ваш поставщик, настроенный на предыдущем шаге. Появится запрос на ввод имени пользователя и пароля. Введите данные для любого из трех тестовых пользователей, которых вы добавили в таблицу пользователей MySQL. Попробуйте использовать user1 с паролем user1pass.

      После успешной попытки входа вы увидите страницу SAML 2.0 SP Demo Example​​​:

      Успешная страница демо

      Если вы не можете выполнить вход и знаете, что пароль верный, убедитесь, что вы применяли один и тот же ключ для функции AES_ENCRYPT(), используемой при создании пользователя, и функции AES_DECRYPT(), которая использовалась при поиске пользователя.

      Теперь вы можете интегрировать SimpleSAMLphp в ваше приложение согласно документации SimpleSAMLphp API.

      Заключение

      Теперь у вас есть установленное и настроенное соответствующим образом приложение SimpleSAMLphp в Ubuntu 18.04 VPS. SimpleSAMLphp также позволяет использовать широкий набор вариантов пользовательской настройки интерфейса с помощью тем. Вы можете ознакомиться с документацией по использованию тем для получения дополнительной информации.



      Source link

      Настройка аутентификации по паролю для Apache в Ubuntu 18.04 [Краткое руководство]


      Введение

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

      Более подробную версию настоящего обучающего руководства с более подробным описанием каждого действия см. в статье Настройка аутентификации по паролю для Apache в Ubuntu 18.04.

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к следующим компонентам на сервере Ubuntu 18.04:

      • Пользователь sudo на сервере

      • Веб-сервер Apache2

      • Защищенный с помощью SSL сайт

      Шаг 1 — Установка пакета утилит Apache

      Мы установим утилиту с названием htpasswd, которая является частью пакета apache2-utils, для управления именами пользователя и паролями для доступа к ограниченному контенту.

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

      Шаг 2 — Создание файла с паролями

      Мы создадим первого пользователя следующим образом (замените `first_username на имя пользователя по вашему выбору):

      • sudo htpasswd -c /etc/apache2/.htpasswd first_username

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

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

      • sudo htpasswd /etc/apache2/.htpasswd another_user

      Шаг 3 — Настройка аутентификации по паролю для Apache

      На этом шаге вам нужно настроить Apache для проверки этого файла перед предоставлением вашего защищенного контента. Для этого мы воспользуемся файлом виртуального хоста на сайте, но есть другая возможность, описанная в подробном обучающем руководстве, если у вас нет доступа к этому файлу или вы предпочитаете использовать файл .htaccess.

      Откройте файл виртуального хоста, в который вы хотите добавить ограничение, в текстовом редакторе, например nano:

      • sudo nano /etc/apache2/sites-enabled/default-ssl.conf

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

      На этом шаге добавьте в файл следующие выделенные строки:

      /etc/apache2/sites-enabled/default-ssl.conf

      <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
      
        <Directory "/var/www/html">
            AuthType Basic
            AuthName "Restricted Content"
            AuthUserFile /etc/apache2/.htpasswd
            Require valid-user
        </Directory>
      </VirtualHost>
      

      Проверьте конфигурацию с помощью следующей команды:

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

      • sudo systemctl restart apache2
      • sudo systemctl status apache2

      Шаг 4 — Подтверждение аутентификации по паролю

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

      Запрос пароля Apache2

      Другие обучающие руководства

      Ниже представлены ссылки на более подробные материалы, связанные с настоящим обучающим руководством:



      Source link

      Настройка аутентификации по паролю для Apache в Ubuntu 18.04


      Введение

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

      В этом обучающем руководстве вы познакомитесь с защитой по паролю для активов на веб-сервере Apache под управлением Ubuntu 18.04 для обеспечения дополнительной безопасности.

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к серверу Ubuntu 18.04.

      Кроме того, чтобы начать работу, вам потребуется следующее:

      • Пользователь sudo на сервере: вы можете создать пользователя с привилегиями sudo, воспользовавшись инструкциями руководства по начальной настройке сервера Ubuntu 18.04.

      • Веб-сервер Apache2: если вы еще не настроили его, воспользуйтесь руководством Установка веб-сервера Apache в Ubuntu 18.04.

      • Защищенный с помощью SSL сайт: порядок настройки зависит от того, есть ли у вашего сайта доменное имя.

        • Если у вас есть доменное имя, вы можете обеспечить защиту вашего сайта с помощью Let’s Encrypt, предоставляющего бесплатные доверенные сертификаты. Воспользуйтесь нашим Руководством по Let’s Encrypt для Apache для выполнения настройки.
        • Если у вас нет домена, и вы просто используете данную конфигурацию для тестирования или в личных целях, вы можете использовать самоподписанный сертификат. Данный способ обеспечивает аналогичный тип шифрования, но без подтверждения домена. Следуйте указаниям руководства по настройке самоподписанного сертификата SSL для Apache, чтобы выполнить настройку.

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

      Шаг 1 — Установка пакета утилит Apache

      Для начала мы обновим сервер и установим пакет, который нам потребуется. В этом обучающем руководстве мы будем использовать утилиту с именем htpasswd из пакета apache2-utils для создания файла и управления именем пользователя и паролями, которые будут использоваться для доступа к ограниченному контенту.

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

      После установки мы получим доступ к команде htpasswd.

      Шаг 2 — Создание файла с паролями

      Команда htpasswd позволяет нам создать файл с паролем, который Apache может использовать для аутентификации пользователей. Для этой цели мы создадим скрытый файл с именем .htpasswd в директории конфигурации /etc/apache2.

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

      • sudo htpasswd -c /etc/apache2/.htpasswd sammy

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

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

      • sudo htpasswd /etc/apache2/.htpasswd another_user

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

      • cat /etc/apache2/.htpasswd

      Output

      sammy:$apr1$.0CAabqX$rb8lueIORA/p8UzGPYtGs/ another_user:$apr1$fqH7UG8a$SrUxurp/Atfq6j7GL/VEC1

      Теперь у нас есть пользователи и пароли в формате, который сможет прочитать Apache.

      Шаг 3 — Настройка аутентификации по паролю для Apache

      На этом шаге вам нужно настроить Apache для проверки этого файла перед предоставлением вашего защищенного контента. Мы можем сделать это двумя способами: либо напрямую в файле виртуального хоста сайта или с помощью размещения файлов .htaccess в директориях, доступ к которым будет ограничен. Обычно рекомендуется использовать файл виртуального хоста, но если вы хотите разрешить пользователям без прав root управлять собственными ограничениями доступа, проверьте ограничения в системе контроля версий наряду с веб-сайтом, или если вы используете веб-приложение с файлами .htaccess, которые уже используются в других целях, познакомьтесь со вторым способом.

      Выберите, способ, который лучше всего подходит для ваших нужд.

      Способ 1. Настройка контроля доступа в определении виртуального хоста (рекомендуется)

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

      Начнем с открытия файла виртуального хоста, в который вы хотите добавить ограничение. Для нашего примера мы будем использовать файл default-ssl.conf, который хранит виртуальный хост по умолчанию, установленный с пакетом apache для Ubuntu. Откройте файл с помощью текстового редактора командной строки, например nano:

      • sudo nano /etc/apache2/sites-enabled/default-ssl.conf

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

      /etc/apache2/sites-enabled/default-ssl.conf

      <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
      </VirtualHost>
      

      Аутентификация выполняется для отдельных директорий. Для настройки аутентификации вам потребуется указать директорию, для которой вы хотите установить ограничение, с помощью блока <Directory __>. В нашем примере мы ограничим всю корневую директорию документов, но вы можете изменить этот список, указав конкретную директорию внутри вашего веб-пространства:

      /etc/apache2/sites-enabled/default-ssl.conf

      <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
      
        <Directory "/var/www/html">
        </Directory>
      </VirtualHost>
      

      В этом блоке директории укажите, что мы настраиваем аутентификацию Basic (базовую). Для AuthName укажите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте директиву AuthUserFile для указания Apache на созданный нами файл пароля. Наконец, создайте требование о том, что только действительный пользователь (valid-user) может получить доступ к этому ресурсу, что значит, что любой пользователь, подтвердивший свою личность паролем, получит доступ:

      /etc/apache2/sites-enabled/default-ssl.conf

      <VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
      
        <Directory "/var/www/html">
            AuthType Basic
            AuthName "Restricted Content"
            AuthUserFile /etc/apache2/.htpasswd
            Require valid-user
        </Directory>
      </VirtualHost>
      

      Сохраните файл и закройте его после завершения. Если вы используете nano, вы можете сделать это, нажав CTRL+X, затем Y и ENTER.

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

      • sudo apache2ctl configtest

      Если все в порядке и вы получили вывод Syntax OK, вы можете перезапустить сервер для выполнения политики по паролю. Поскольку systemctl не отображает результаты всех команд управления службами, мы используем status, чтобы убедиться, что сервер запущен:

      • sudo systemctl restart apache2
      • sudo systemctl status apache2

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

      Способ 2. Настройка контроля доступа с помощью файлов .htaccess

      Apache может использовать файлы .htaccess, чтобы разрешить настраивать определенные элементы конфигурации внутри директории контента. Поскольку Apache должен повторно считывать эти файлы в каждом запросе, который затрагивает директорию, что может негативно повлиять на производительность, рекомендуется использовать способ 1, но если вы уже используете файл .htaccess или вам нужно разрешить пользователям без прав root управлять ограничениями, файлы .htaccess могут быть полезны.

      Чтобы обеспечить защиту по паролю с помощью файлов .htaccess, откройте главный файл конфигурации Apache в текстовом редакторе командной строки, например nano:

      • sudo nano /etc/apache2/apache2.conf

      Найдите блок <Directory> для директории /var/www, где находится корневая директория документов. Запросите обработку .htaccess, изменив значение директивы AllowOverride внутри этого блока с None на All:

      /etc/apache2/apache2.conf

      . . .
      
      <Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
      </Directory>
      
      . . .
      

      Сохраните файл и закройте его после завершения. Если вы используете nano, вы можете сделать это, нажав CTRL+X, затем Y и ENTER.

      Далее нам потребуется добавить файл .htaccess в директорию, для которой мы хотим ограничить доступ. В нашей демонстрационной версии мы ограничим доступ ко всей корневой директории (всему веб-сайту), т. е. /var/www/html, но вы можете разместить этот файл в любой директории, для которой вы хотите ограничить доступ:

      • sudo nano /var/www/html/.htaccess

      В этом файле укажите, что мы хотим настроить базовую аутентификацию (Basic). Для AuthName укажите имя области, которое будет отображаться пользователю при запросе учетных данных. Используйте директиву AuthUserFile для указания Apache на созданный нами файл пароля. Наконец, нам потребуется действительный пользователь (valid-user) для доступа к этому ресурсу, что означает, что любой пользователь, подтвердивший свою личность с помощью пароля, получит доступ:

      /var/www/html/.htaccess

      AuthType Basic
      AuthName "Restricted Content"
      AuthUserFile /etc/apache2/.htpasswd
      Require valid-user
      

      Сохраните и закройте файл. Перезапустите веб-сервер для защиты по паролю всего контента в директории или во вложенных директориях с помощью файла .htaccess и использования systemctl status для проверки успешного перезапуска:

      • sudo systemctl restart apache2
      • sudo systemctl status apache2

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

      Шаг 4 — Подтверждение аутентификации по паролю

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

      Запрос пароля Apache2

      Если вы введете правильные учетные данные, вы сможете получить доступ к контенту. Если вы введете неверные учетные данные или нажмете Cancel (Отмена), вы увидите страницу ошибки Unauthorized (Неавторизованный пользователь):

      Ошибка отказа доступа Apache2

      Заключение

      Поздравляем! После выполнения описанных выше действий вы настроили базовую аутентификацию для вашего сайта.

      Существует множество вещей, которые вы можете сделать с конфигурацией Apache и .htaccess. Чтобы узнать больше о гибкости и мощности, доступной в конфигурации Apache, воспользуйтесь одним из следующих обучающих руководств:



      Source link