Назад | Перейти на главную страницу

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

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

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

Я борюсь со следующими моментами:

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

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

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

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

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

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

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

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

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

QR-коды не загадочны, они otpauth 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, я не знаю ни одной для электронной почты, поскольку наши пользователи через AD, мы используем userprincipalname, то есть user@kerberosdomain.tld

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