В моей компании в настоящее время есть своего рода сервер перехода по SSH, через который наши сотрудники получают доступ к конечным точкам серверов наших клиентов. Мы настроили пару сценариев Ansible, которые по сути создают / удаляют / обновляют доступ пользователей к этому серверу Jump путем создания учетных записей пользователей и настройки доступа к нему на основе открытого ключа.
Сейчас я пытаюсь реализовать MFA, используя гугл-аутентификатор на этом сервере. Я прошел через этот учебник это эффективно охватывает процедуру добавления интерактивной защиты с клавиатуры MFA для доступа по SSH для данного пользователя, но мне было интересно, как я могу автоматизировать эту процедуру, чтобы интегрировать ее с нашим текущим рабочим процессом.
Я борюсь со следующими моментами:
jdoe
). Могу ли я добавить и сохранить информацию об их адресах электронной почты в учетной записи пользователя в Linux?Я знаю, что этот вопрос охватывает много информации, но вместо канонического ответа (что, вероятно, даже невозможно) Я ищу надежные указатели на то, где тоже искать информацию, и надеюсь, что кто-то также сможет выделить любые подводные камни с моей идеей / подход, поскольку это все для меня очень ново, и я немного потерялся.
РЕДАКТИРОВАТЬ: После некоторого изучения этих тем я решил, что должен использовать несколько другой метод / подход к этой автоматизации.
Я по-прежнему буду использовать 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 ... среди многих других преимуществ.