Итак, после обширного тестирования и обсуждения я больше не могу самостоятельно решать эту проблему.
Цель: Аутентификация через ssh с открытым ключом или паролем и использование PAM для MFA.
Используемая система — Ubuntu Server 20.04.
Разделение этого на управляемые части также показало некоторые трудности с объединением разных частей.
Аутентификация с открытым ключом и использование PAM для MFA не проблема. Аутентификация по паролю и использование PAM для MFA не проблема. Использование публичного ключа или пароля немного отличается. Сочетание с МФА кажется невозможным.
Проблема, похоже, заключается в том, как SSHD аутентифицирует пользователя с помощью пароля.SSHD не может сделать это без PAM, так как пользовательский теневой файл не читается без PAM. Включение PAM и активация pam_env.so и pam_sssd.so для стека аутентификации решает эту проблему.
Таким образом, используя PAM, я могу аутентифицироваться либо с помощью открытого ключа, либо с помощью пароля. Чего я не понимаю, так это почему SSHD нужен теневой файл пользователя для аутентификации по паролю, а не для открытого ключа? Я по-прежнему получаю свои группы и все остальное, используя открытый ключ, без PAM и используя SSSD для предоставления открытых ключей с помощью команды author_keys.
Для аутентификации с использованием пароля мне нужен соответствующий модуль pam в стеке авторизации.
Это не будет большой проблемой, но цель состоит в том, чтобы включить MFA и не запрашивать у пользователя пароль, если он не нужен. MFA необходимо реализовать с помощью PAM. Использование PAM вместе с открытыми ключами не является проблемой, установка метода «publickey,keyboard-interactive» в sshd_config передает это в PAM, а настройка модуля PAM после pam_env.so для MFA позволяет это сделать.
Но для включения методов «пароль, интерактивная клавиатура» требуется модуль pam_sss.so, поэтому мне будет предложено ввести пароль, даже если я использую метод с открытым ключом, а затем будет предложено ввести MFA.
Как мне решить эту проблему, чтобы я мог аутентифицироваться через ssh с паролем от sssd или открытым ключом от sssd? И следующий шаг, PAM является требованием или нет для пароля (предпочтительно нет), в любом случае, как реализовать MFA?
Поскольку это все еще крутится у меня в голове, я уверен, что могу объяснить вещи лучше, но сделал все возможное, чтобы объяснить свои трудности.
Вещи, которые я прочитал, это sssd, pam_ssh, pam_sssd, pam_ssh_agent_auth, sshd. Также прочитайте документацию для DUO, Google MFA, RedHat.
Любые мысли или идеи?
Любая обратная связь будет принята с благодарностью.
Спасибо!