Вопрос или проблема
У меня есть сервер с настройкой Google Authentication + PAM, поэтому требуется TOTP при подключении к нему через SSH. Но я хотел бы сделать исключение для SSH-ключей, которые хранятся на аппаратном ключе безопасности, это возможно?
Этот вопрос заставил меня подумать, что возможно иметь отдельный authorized_keys
для этих исключений и контролировать это через PAM, но я не знаю, возможно ли переключаться между ними.
Ответ или решение
Обход двухфакторной аутентификации (2FA) для SSH-ключей типа -sk
В последние годы использование двухфакторной аутентификации (2FA) стало стандартом безопасности для доступа к серверам, особенно в контексте SSH. Ваша ситуация, связанная с использованием Google Authentication и PAM (Pluggable Authentication Module), подразумевает, что для подключения к вашему серверу необходим TOTP (Time-based One-Time Password). Однако вы также хотите предоставить исключение для SSH-ключей, хранящихся на устройстве безопасности (security key) с типом -sk
.
Зачем это нужно?
Исключение для SSH-ключей может обеспечить более быстрый и удобный доступ для определённых пользователей или служб без снижения уровня безопасности. Управление исключениями, особенно с использованием аппаратных ключей, станет оптимальным решением, поскольку такие ключи обеспечивают высокий уровень защиты.
Как это реализовать?
Для достижения поставленной задачи необходимо внести изменения в настройки PAM и SSH. Следуйте пошаговому руководству:
1. Настройка SSH для использования ключей типа -sk
SSH-ключи с типом -sk
(Security Key) поддерживают аутентификацию с использованием FIDO2/WebAuthn. Убедитесь, что ваш SSH-сервер настроен на использование таких ключей.
Примечание: В вашей конфигурации SSH (обычно файл /etc/ssh/sshd_config
) вам, возможно, потребуется добавить или изменить следующие параметры:
PubkeyAuthentication yes
2. Определение отдельного файла authorized_keys
Вы можете создать отдельный файл authorized_keys
для ключей, которые должны обходить 2FA. Например, создайте файл по следующему пути:
~/.ssh/authorized_keys.no_2fa
Добавьте в этот файл все ключи типа -sk
, для которых вы хотите отключить 2FA.
3. Настройка PAM
Вам нужно будет изменить конфигурацию PAM для использования условий, основанных на типе SSH-ключа. Откройте файл /etc/pam.d/sshd
и добавьте следующий код в секцию auth
:
auth required pam_env.so
auth [success=1 default=ignore] pam_unix.so
auth required pam_google_authenticator.so
auth required pam_permit.so
auth required pam_access.so
Эта конфигурация позволяет выполнить проверку ключей из authorized_keys.no_2fa
перед тем, как перейдёт к стандартному процессу аутентификации с использованием TOTP.
4. Настройка скриптов для управления логикой исключения
Для того, чтобы PAM могла различать, какие ключи должны обходить 2FA, вам может понадобиться написать пользовательский скрипт. Этот скрипт должен проверять, использует ли пользователь ключи из authorized_keys.no_2fa
, и соответственно перенаправлять нагрузку аутентификации. Этот скрипт можно подключить как модуль в PAM.
5. Тестирование конфигурации
После внесения всех изменений следует провести тестирование. Подключитесь к серверу с помощью SSH с использованием USB-ключа типа -sk
и убедитесь, что TOTP не требуется. Попробуйте выполнить подключение с обычным ключом и проверьте, что TOTP запрашивается.
Заключение
Использование аппаратных ключей для обхода двухфакторной аутентификации в SSH — это ответственное и безопасное решение, если вы внимательно настроите соответствующие параметры PAM и SSH. Следуя приведённым шагам, вы сможете настроить исключение для ключей -sk
, обеспечивая при этом высокий уровень безопасности вашего сервера. Не забывайте тестировать настройки и, при необходимости, вносить корректировки для обеспечения работоспособности всей системы аутентификации.