Настройка двухфакторной аутентификации на сервере CentOS
В статье описывается настройка сервера CentOS для включения двухфакторной аутентификации с Telegram ботом при подключении через ssh терминал.
Как правило, для подключения к терминалу используется приватный ключ, сохраненный на клиенте, без ввода пароля, потому что никто не любит вводить пароли. Такая конфигурация реализует только один фактор проверки подлинности и уязвима настолько, насколько надежно хранится ключ на клиентском устройстве. Кроме того, ключи часто пересылаются по незащищенным каналам связи, лежат в сетевых или облачных папках, что совсем не добавляет защиты.
Использование второго фактора на 99% сокращает риск неправомерного доступа и совершенно не усложняет процесс подключения для пользователей.
Возможные способы аутентификации:
Мобильное приложение MultiFactor
Telegram
Принцип работы
- SSHD использует модуль PAM_RADIUS для второго фактора проверки подлинности
- Модуль подключается через RADIUS протокол к сервису Мультифактор
- Мультифактор отправляет через Telegram бота сообщение пользователю с подтверждением доступа
- Пользователь подтверждает в Telegram чате запрос доступа и подключается к терминалу
Перед началом работы
Не закрывайте текущую ssh сессию, пока не убедитесь, что все работает.
Настройка Мультифактора
- Зайдите в систему управления Мультифактором, зайдите в раздел "Ресурсы" и создайте новый Linux сервер. После создания вам будут доступны два параметра: Client ID и Shared Secret, они потребуются для последующих шагов.
- В разделе "Группы", зайдите в параметры группы "All users" и уберите флаг "Все ресурсы", чтоб только только пользователи определенной группы могли подключаться к Linux серверам.
- Создайте новую группу "Linux users", отключите все способы аутентификации кроме Telegram и укажите, что пользователи имеют доступ к созданному ресурсу Linux сервер.
- В разделе "Пользователи" создайте пользователей, которые будут иметь доступ к Linux серверам, добавьте в группу "Linux users". Логин пользователя должен совпадать с логином на Linux сервере.
- Отправьте пользователям ссылку на почту для настройки второго фактора аутентификации.
Установка и настройка модуля PAM_RADIUS
$ sudo yum -y install epel-release
$ sudo yum -y install pam_radius
Далее создайте файл конфигурации
$ sudo vi /etc/pam_radius_ssh.conf
Впишите в него настройки RADIUS сервера Мультифактора, сохраните и закройте редактор (:x)
radius.multifactor.ru SHARED_SECRET 40
где:
- radius.multifactor.ru: адрес сервера
- SHARED_SECRET: скопируйте из соответствующего параметра настроек Linux ресурса Мультифактор
- 40: таймаут ожидания запроса с запасом
В файле хранится секретный ключ, поэтому установите на него права доступа на чтение только пользователю root
$ sudo chmod 0600 /etc/pam_radius_ssh.conf
Настройка PAM модулей ssh
Откройте для редактирования файл /etc/pam.d/sshd
$ sudo vi /etc/pam.d/sshd
В файле закомментируйте строку auth substack password-auth и добавьте в конец следующую настройку:
auth required pam_radius_auth.so skip_passwd client_id=NAS_Identifier conf=/etc/pam_radius_ssh.conf
где
- NAS_Identifier: скопируйте из соответствующего параметра настроек Linux ресурса Мультифактор.
Сохраните и закройте файл (:x). В итоге он должен выглядеть подобным образом:
#%PAM-1.0
auth required pam_sepermit.so
#auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
account required pam_nologin.so
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare
auth required pam_radius_auth.so skip_passwd client_id=rs_760d86a9b5b7f7607d11735e67757 conf=/etc/pam_radius_ssh.conf
Закомментированная строка отключает проверку пароля, а добавленная подключает второй фактор.
Настройка службы SSHD
Отредактируйте файл /etc/ssh/sshd_config
$ sudo vi /etc/ssh/sshd_config
- Включите PAM интерфейс
ChallengeResponseAuthentication yes
- Добавьте способы аутентификации
AuthenticationMethods publickey,keyboard-interactive:pam
Сохраните файл (:x) и перезапустите ssh демона
$ sudo systemctl restart sshd
Проверка
Не закрывая текущую сессию, подключите новую.
От Telegram бота придет сообщение с запросом подтверждения доступа.
Одна кнопка разрешает доступ, вторая блокирует.
Если что-то не работает
Последовательно проверьте, что вы ничего не упустили:
- На сервере с Linux есть пользователь с заданным логином
- С сервера открыт доступ по UDP порту 1812 на адрес radius.multifactor.ru
- Параметры Client ID и Shared Secret указаны корректно
- В системе Мультифактор заведен пользователь с таким же логином и ему предоставлен доступ в группу пользователей Linux users
- Пользователь настроил способ аутентификации через Telegram
- Проверьте журнал "Запросы доступа" в личном кабинете Мультифактора.
Если ничего не сработало, обращайтесь, поможем.
Смотрите также: