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