Библиотека OTP-LIBPAM для ОС семейства Linux

В этой инструкции мы рассмотрим процесс установки и настройки библиотеки OTP-LIBPAM для любых операционных систем семейства Linux, для использования с сервисом двухфакторной аутентификации auth.as в режиме sudo. Данная инструкция написана на примере ОС CentOS 7 и может быть реализована на других Linux системах по аналогии.


Описание плагина

Плагин добавляет собой Linux-PAM библиотеку (подключаемый модуль аутентификации, PAM - Pluggable Authentication Module), которая добавляет расширенные возможности по аутентификации в ОС. Плагин OTP-LIBPAM добаляет необходимость ввода пароля второго фактора системы auth.as при выполенении любых привилегированных дейтствий в ОС, требующих sudo разрешений. Данный модуль запускается после основного процесса аутентификации пользователя, то есть, после успешной валидации имени пользователя и пароля. ОС, через cli, будет запрашивать одноразовый пароль, который будет генерироваться мобильным приложением пользователя и валидировать его в системе двухфакторной аутентификации auth.as.

Плагин взаимодействует с сервисом auth.as через публичный API по протоколу HTTPS. При работе используется функция check_code, которая принимает email пользователя, API ключ домена и одноразовый пароль. Поле email и API ключ домена достаётся из настроек плагина, а одноразовый пароль вводится пользователем интерактивно.


Установка плагина

Скачайте RPM-пакет для yum используя запрос к репозиторию системы auth.as:

curl -o /etc/yum.repos.d/auth.as.repo https://repo.auth.as/1.x/auth.as.repo

Добавьте в систему открытый GPG ключ:

rpm --import https://repo.auth.as/GPG-KEY-auth.as

Установите плагин (библиотеку) OTP-LIBPAM:

yum install otp-libpam -y

Готово, плагин установлен! Теперь, перейдем к настройке системы auth.as и этого плагина.


Настройка плагина

Для начала, нужно настроить систему двухфакторной аутентификации auth.as: получить API_KEY для защищаемого домена (ОС), а также, настроить учетную запись для sudo-пользователя. Вы можете просто отправить нам письмо на support@auth.as, указав в нем email пользователя и мы сделаем все настройки в системе auth.as для вас. Если же, вы хотите настроить систему auth.as самостоятельно, то нужна всего пара кликов:

Выбираем домен, в рамках которого, будет находиться защищаемая ОС. Фиксируем API_KEY этого домена:

Затем, добавляем авторизованного пользователя и назначаем ему токен:

На указанный email пользователя придет письмо, где будет описан дальнейший процесс установки и настройки мобильного приложения. Более детальные инструкции на настройке системы auth.as даны в статьях Управление пользователями и Управление токенами.


Когда на мобильном приложении будет настроен токен, генерирующий одноразовые пароли для указанного пользователя, можем приступить к настройке самого плагина. Пропишем значение API_KEY в файле /etc/otp-libpam.conf, параметр API_URL надо прописать так же, как он указан в комментарии, если планируется использовать облачное решение системы auth.as:

# AUTH.AS config file
#
# URL address
# API_URL https://console.auth.as/api/v1.0/check_code
#
# domain key
# API_KEY 7815696ecbf1c96e6894b779456d330edr5hsdth

API_URL https://console.auth.as/api/v1.0/check_code
API_KEY myapikeythatihavejustgereratedformylinux

Включите плагин, изменив файл /etc/pam.d/sudo следующим образом:

#%PAM-1.0
# auth include system-auth
auth required pam_otp.so
account include system-auth
password include system-auth
session optional pam_keyinit.so revoke
session required pam_limits.so

Если вы не хотите вводить ваш email каждый раз, при запуске sudo, введите его раздел комментариев файла /etc/passwd, заменив [email] на тот, что вы добавили в систему auth.as и [username] на имя вашего sudo-пользователя ОС:

usermod -c "[email]" [username]

В завершение, дополните /etc/sudoers.d/ записью:

echo '[username] ALL=(root) ALL' > /etc/sudoers.d/[username]

Готово! Теперь каждый раз, при выполнении sudo под указанным пользователем ОС [username], система будет интерактивно запрашивать пароль второго фактора системы auth.as.