Двухфакторная аутентификация (2FA) - это двухэтапная проверка или, более подходяще, двухэтапный метод аутентификации. Пользователь предоставляет два разных фактора аутентификации, чтобы проверить себя и защитить ресурсы, к которым он может получить доступ. Двухфакторная аутентификация добавляет дополнительный уровень безопасности к нашей однофакторной аутентификации (SFA), при которой пользователю нужно только предоставить пароль или код доступа.

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

Совет: делитесь модулями кода и сотрудничайте со своей командой

Используйте Бит, чтобы инкапсулировать модули кода со всеми их зависимостями и настройками. Делитесь ими в Bit’s Cloud, сотрудничайте со своей командой и используйте их где угодно.



Почему двухфакторная аутентификация?

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

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

Типы методов аутентификации

Аутентификация обычно бывает трех типов -

  1. Что-то, что мы знаем.
    Это то, что мы знаем или запоминаем, например пароли, коды доступа, секретные вопросы и т. д.
  2. То, что у нас есть
    Это относится к аппаратной аутентификации, такой как коды, отправляемые на мобильное устройство через SMS, аутентификация через голосовой канал, коды, отправляемые в мобильное приложение через push-уведомления, U2F и т. д.
  3. Что-то мы
    Это относится к биометрической аутентификации, такой как отпечатки пальцев, сканирование радужной оболочки глаза и т. д.

Двухфакторная аутентификация для SSH

2FA для SSH обычно используется на предприятиях, где нам необходимо соблюдать строгие меры безопасности, чтобы сохранить наши данные в безопасности, или в случае, если мы интенсивно имеем дело с некоторой важной пользовательской информацией, которую необходимо сохранить в безопасности. В таких сценариях мы повышаем уровень безопасности, добавляя еще один уровень в Secure Shell (SSH).

Для реализации 2FA в дистрибутивах Linux нам необходимо внести некоторые изменения в Подключаемые модули аутентификации (PAM). Мы используем Duo как сторонний сервис для 2FA. Мы также можем использовать любые сторонние сервисы, такие как Google Authenticator и т. Д.

Предпосылки

  1. Машина Ubuntu с ключом SSH и включенным брандмауэром. (Рекомендовать виртуальные машины для тестирования)
  2. Duo Keys (ключ интеграции, секретный ключ и имя хоста API).
    Войдите в Учетную запись администратора Duo, нажмите Защитить приложение в разделе Приложения и найдите Приложение UNIX в список приложений. Нажмите Защитить это приложение, чтобы получить ключ интеграции, секретный ключ и имя хоста API. См. Начало работы для получения помощи.

Настраивать

Давайте настроим 2FA для ssh в ubuntu с помощью Duo. Во время SSH клиент пытается подключиться к серверу через порт 22, для которого клиент должен пройти аутентификацию на основе ключа или пароля. Во время всего этого процесса мы передаем поток модулям PAM, через которые мы расширяем этот процесс аутентификации и добавляем еще один уровень аутентификации, на котором клиент проверяет себя.

Для использования модуля PAM нам понадобится двоичный файл pam_duo для аутентификации с помощью Duo.

Установите pam_duo

Для двоичного файла pam_duo во время компиляции требуются некоторые заголовки и библиотеки Openssl, а также другие библиотеки, например libpam.

sudo apt-get install autoconf libtool libpam-dev libssl-dev

После установки необходимых зависимостей приступим к сборке и установке pam_duo

Следуй этим шагам -

  1. Скачайте и распакуйте последнюю версию duo_unix (контрольную сумму)
$ wget https://dl.duosecurity.com/duo_unix-latest.tar.gz 
$ tar zxf duo_unix-latest.tar.gz 
$ cd duo_unix-1.11.2

2. Соберите и установите pam_duo.

./configure --with-pam --prefix=/tmp && sudo make install

3. Давайте создадим pam_duo.conf файл для настройки конфигурации Duo.

# /etc/duo/pam_duo.conf
[duo]
; Duo integration key
ikey = 
; Duo secret key
skey = 
; Duo API host
host = 

Мы также можем добавить дополнительные параметры для настройки нашего pam_duo. Прочтите их в Параметры конфигурации Duo для всех доступных параметров.

4. Для использования pam_duo с аутентификацией с открытым ключом нам необходимо внести изменения в файл sshd_config демона ssh (обычно в /etc/ssh).

PubkeyAuthentication yes 
PasswordAuthentication no 
AuthenticationMethods publickey,keyboard-interactive
UsePAM yes 
ChallengeResponseAuthentication yes 
UseDNS no

5. Теперь нам нужно добавить наш двоичный файл, то есть pam_duo.so, который мы сгенерировали в файле step-1 in/etc/pam.d/sshd.

# @include common-auth 
auth  [success=1 default=ignore] /lib64/security/pam_duo.so
auth  requisite pam_deny.so 
auth  required pam_permit.so

Мы прокомментировали файл common-auth, который содержит некоторые другие модули PAM, такие как pam_unix.so, pam_deny.so и pam_permit.so, который проверяет аутентификацию на основе пароля, если она настроена.

6. Перезапустите службу SSH, чтобы применить обновленную конфигурацию.

systemctl restart sshd

Протестируйте нашу двухфакторную аутентификацию

Давайте попробуем использовать SSH localhost, чтобы проверить, все ли работает должным образом, прежде чем выйти из системы, иначе мы заблокируемся и не сможем снова подключиться к SSH, если что-то пойдет не так.

# keygen
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> authorized_keys
$ ssh localhost

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

Открыв ссылку, мы попадем на эту страницу, где должны следовать инструкциям и продолжить настройку.

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

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

Демо

Я создал репозиторий GitHub с 2FA, настроенным на машине Ubuntu Vagrant.

Следуйте шагам -

1. Установите зависимости

VirtualBox 4.3.10 or greater. 
Vagrant 1.6.3 or greater.

2. Клонируйте этот проект и запустите!

$ git clone https://github.com/ankitjain28may/pam_duo_linux 
$ cd pam_duo_linux/ubuntu

3. Посетите панель администратора Duo и создайте интеграцию «Unix», если у вас ее еще нет.

4. Скопируйте свои ikey, skey и api_host в duo.env файл.

mv duo.env.example duo.env

5. Откройте Vagrantfile и измените ./install.sh ankit на любое желаемое имя пользователя - ›./install.sh username.

6. Запустите эти команды -

# To craete a ubuntu VM 
$ vagrant up 
# First time
$ vagrant ssh
# create keys and try local ssh so as you can enroll your device
$ sudo su - username
$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> authorized_keys
$ ssh localhost
# SSH in VM 
$ ssh username@localhost -p 2222

Примечание: если у вас возникли проблемы при использовании SSH username, откройте Vagrantfile и добавьте это -

config.ssh.username = ‘username’ 
# Now SSH again 
$ vagrant ssh

Подробнее о pam_duo читайте в его документации: Duo Unix - Двухфакторная аутентификация для SSH с поддержкой PAM (pam_duo)

Заключение

В этом посте мы сначала узнаем о двухфакторной аутентификации (2FA), о том, зачем она нам нужна, и о типах методов аутентификации. Узнаем о реализации 2FA с помощью Duo в ubuntu. У Duo есть свои преимущества: мы можем управлять пользователями, устройствами из панели администратора Duo и многим другим. Код доступен в этом Github Repo.

Не стесняйтесь комментировать и спрашивать меня о чем угодно. Вы можете подписаться на меня в Twitter и Medium. Спасибо за прочтение! 👍

Учить больше