Как автоматизировать настройку MFA google-authenticator для доступа по SSH

В моей компании в настоящее время есть своего рода SSH-сервер, через который наши сотрудники получают доступ к конечным точкам сервера наших клиентов. Мы настроили несколько книг Plays Ansible, которые по существу создают / удаляют / обновляют доступ пользователей к этому серверу Jump, создавая учетные записи пользователей и устанавливая доступ к нему на основе открытого ключа.

Я сейчас пытаюсь реализовать MFA, используя google-authenticator на этом сервере. Я прошел этот урок, который эффективно охватывает процедуру добавления интерактивной защиты клавиатуры MFA к SSH-доступу для данного пользователя, но мне было интересно, как я могу автоматизировать эту процедуру, чтобы интегрировать ее с нашим текущим рабочим процессом.

Точки, с которыми я борюсь, следующие:

  • в какой-то момент в процедурах учебника в bash выводится двухмерный QR-код вместе с набором защитных кодов доступа на случай, если MFA прекратит работу или даст сбой. Я понимаю, что для этой цели используется libqrencode. Мне было интересно, можно ли каким-либо образом использовать Ansible, чтобы поместить этот вывод в электронное письмо и отправить его настраиваемым пользователям.
  • Кроме того, для вышеуказанного эффекта мне потребуется адрес электронной почты каждого пользователя. В настоящее время пользователи управляются только через свое имя пользователя / дескриптор (т.е. jdoe). Можно ли в любом случае добавить и сохранить информацию об их адресе электронной почты в учетной записи пользователя в Linux?

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

РЕДАКТИРОВАТЬ: После изучения этих тем некоторое время, я решил, что я должен использовать немного другой метод / подход к этой автоматизации.

Я все еще буду использовать PAM Google Authenticator, но я решил упростить процесс установки, не уведомляя пользователей по электронной почте, когда их учетные записи настраиваются с помощью MFA, а скорее предоставляя им доступ через ключ RSA при первом доступе по SSH, но сразу вынудите их настроить их собственный MFA согласно руководству выше. Это достигается путем запуска команды на доступ SSH. Для всех последующих обращений потребуется MFA, и я могу настроить хост SSH для проверки наличия файла конфигурации MFA в домашней папке пользователя. Если он присутствует, пользователь настроил MFA и может продолжить работу, если MFA проверит действительный; в противном случае доступ MFA пользователя не был настроен, и пользователю будет предложено настроить его при доступе через SSH.

Я чувствую, что это достаточно надежно, так как я покрываю MFA, не будучи настроенным (т.е. google_authenticator файл отсутствует в домашнем каталоге пользователя) или подделан (проверка MFA завершится неудачно). Если кто-нибудь знает какие-либо подводные камни на моем подходе, это было бы очень полезно!

2 ответа

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

Копировать уже существующий файл ~/.google_authenticator очень просто.

Если пользователь генерирует первый секрет в рассматриваемой системе, он должен сначала пройти аутентификацию. README.md объясняет, как разрешить аутентификацию, если для пользователя не существует секрета:

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

требуется авторизация pam_google_authenticator.so nullok

QR-коды не являются загадочными, они являются URI-адресами отпаутов. С известным секретом вы можете создать их самостоятельно. (Опрятный цветовой трюк ASCII, который использует google-authenticator, не будет хорошо переводиться на электронную почту.)

Для сопоставления пользователя с электронной почтой используйте сервер каталогов. В конце концов вы не можете просто привязать одно доменное имя к имени пользователя, хотя это может работать в простых средах. Я полагаю, вы могли бы также настроить псевдонимы на хосте, чтобы user@jumpbox.example.net перешел к нужному человеку.

Вы можете использовать любой секретный ключ BASE32 для затравки. [2-7A-Z]

Используйте Google Charts для генерации QR

и вы можете поместить этот файл в любое место и принадлежать другому пользователю.

auth required pam_google_authenticator.so user=root secret=/var/lib/google-authenticator/${USER}

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

auth required pam_google_authenticator.so user=root secret=/var/lib/google-authenticator/${USER}@domain.tld

Что касается имени файла, вы можете использовать любой env var, я не знаю ни одного для электронной почты, так как наши пользователи используют AD, мы используем userprincipalname, которое является user@kerberosdomain.tld

Теперь лучшим решением будет установка FreeIPA, которая поддерживает AD Trusts, User Management, Radius auth backend и Google Auth 2FA... среди многих других преимуществ.

Другие вопросы по тегам