Как настроить двухфакторную аутентификацию для SSH в Linux

По умолчанию SSH уже использует безопасную передачу данных между удалёнными компьютерами, но если вы хотите добавить дополнительный уровень безопасности для своих SSH-подключений, вы можете добавить модуль Google Authenticator (двухфакторная аутентификация), который позволяет вводить случайный одноразовый пароль (TOTP) при подключении к SSH-серверам. При подключении вам нужно будет ввести код подтверждения со своего смартфона или компьютера.
Google Authenticator — это модуль с открытым исходным кодом, который включает в себя реализацию токенов проверки с одноразовыми паролями (TOTP), разработанную Google.
Он поддерживает несколько мобильных платформ, а также PAM (подключаемый модуль аутентификации). Эти одноразовые пароли генерируются с использованием открытых стандартов, созданных OATH Инициативой по открытой аутентификации).
В этой статье я покажу вам, как настроить SSH для двухфакторной аутентификации в дистрибутивах Linux на базе RedHat и Debian, таких как Fedora, CentOS Stream, Rocky Linux, AlmaLinux, Ubuntu, Debian и Mint.
Установка Google Authenticator в Linux
Откройте компьютер, на котором вы хотите настроить двухфакторную аутентификацию, и установите следующие библиотеки PAM, а также библиотеки для разработки, необходимые для корректной работы модуля PAM с модулем Google Authenticator.
В системах на базе RedHat (RHEL, CentOS Stream, Rocky Linux, AlmaLinux) необходимо включить репозиторий EPEL и установить необходимые пакеты:
sudo dnf install epel-release -y sudo dnf install google-authenticator qrencode-libs -y
В системах на базе Debian установите модуль Google Authenticator PAM с помощью следующей команды apt.
sudo apt install libpam-google-authenticator -y
Генерировать Токены аутентификации Google
После установки выполните следующую команду от имени пользователя, которого вы хотите защитить.
google-authenticator
Вам будет предложено ответить на ряд вопросов. В большинстве случаев просто введите "y"
(да). Если что-то пойдёт не так, вы можете снова запустить команду, чтобы сбросить настройки.
После ответа на эти вопросы вы получите секретный ключ и коды экстренных ситуаций. Запишите эти данные, так как секретный ключ понадобится нам позже для настройки приложения Google Authenticator.
Вы можете увидеть такой результат:
Do you want authentication tokens to be time-based (y/n) y Warning: pasting the following URL into your browser exposes the OTP secret to Google: https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/root@tecmint%3Fsecret%3DCYZF2YF7HFGX55ZEPQYLHOO5JM%26issuer%3Dtecmint Failed to use libqrencode to show QR code visually for scanning. Consider typing the OTP secret into your app manually. Your new secret key is: CYZF2YF7HFGX55ZEPQYLHOM Enter code from app (-1 to skip): -1 Code confirmation skipped Your emergency scratch codes are: 83714291 53083200 80975623 57217008 77496339
Продолжайте отвечать "y"
на все запросы о конфигурации:
Do you want me to update your "/root/.google_authenticator" file (y/n) y Do you want to disallow multiple uses of the same authentication token? (y/n) y Do you want to increase the window to about 4min? (y/n) y Do you want to enable rate-limiting? (y/n) y
Настройка SSH для использования Google Authenticator в Linux
Откройте файл конфигурации PAM ‘/etc/pam.d/sshd‘ и добавьте следующую строку в начало или перед любой строкой pam_permit.so
:
auth required pam_google_authenticator.so nullok
Примечание: если SELinux включен, переместите файл .google_authenticator
в папку с соответствующим контекстом SELinux (например, ~/.ssh/
) и укажите полный путь:
auth required pam_google_authenticator.so secret=/home//.ssh/.google_authenticator nullok
Затем откройте файл конфигурации SSH ‘/etc/ssh/sshd_config‘ и убедитесь, что в нём заданы следующие параметры:
UsePAM yes ChallengeResponseAuthentication yes
При желании вы можете включить двухфакторную аутентификацию и аутентификацию по ключу/паролю:
AuthenticationMethods publickey,keyboard-interactive
Наконец, перезапустите службу SSH, чтобы изменения вступили в силу.
sudo systemctl restart sshd
Настройка приложения Google Authenticator
Запустите приложение Google Authenticator на своём смартфоне. Нажмите + и выберите «Введите ключ настройки». Если у вас нет этого приложения, вы можете скачать и установить приложение Google Authenticator на свои устройства Android/iPhone/Blackberry.
Добавьте свою учётную запись «Имя» и введите «секретный ключ», сгенерированный ранее.
Теперь попробуйте войти в систему через SSH, вам будет предложено ввести код Google Authenticator (код подтверждения) и пароль всякий раз, когда вы попытаетесь войти в систему через SSH. У вас есть только 30 секунд, чтобы ввести этот проверочный код; если вы пропустите его, будет восстановлен новый проверочный код.
login as: destroyer Access denied Using keyboard-interactive authentication. Verification code: Using keyboard-interactive authentication. Password: Last login: Tue Apr 12 02:21:44 2024 from 82.146.45.247 [root@destroyer ~]#
Если у вас нет смартфона, вы также можете использовать надстройку Authenticator для Firefox или настольное приложение TOTP, например KeePassXC или Authenticator App для Linux.
Важно: двухфакторная аутентификация работает при входе в SSH с использованием пароля. Если вы используете какой-либо закрытый/открытый ключ для SSH-сессии, двухфакторная аутентификация будет проигнорирована и вы войдёте в систему напрямую.
Редактор: AndreyEx