Включаємо двофакторну аутентифікацію (2FA) для SSH входу до Linux

Вступ

У цій статті ми покажемо, як налаштувати двофакторну аутентифікацію (2FA) для SSH входу на Linux сервер за допомогою Google PAM (Pluggable Authentication Module) та мобільної програми Microsoft Authenticator. 2FA дозволяє додати додатковий шар безпеки при аутентифікації на Linux хості SSH. Тепер для входу на сервер крім імені та пароля користувача (rsa ключа), ви повинні ввести одноразовий цифровий пароль (Time-based One-time Password – TOTP), який генерується у вашому смартфоні.

Встановіть на свій смартфон мобільний додаток Microsoft Authenticator (доступний як Google Store, так і App Store).

У статті розглядаю саме Microsoft Authenticator, т.к. я вже використовую цю програму для автентифікації MFA в Azure. Якщо ви бажаєте, можна використовувати замість нього Google Authenticator.

Тепер потрібно встановити та настроїти пакет Google PAM на вашому Linux сервері:

  1. Під’єднавшись до вашого Linux хосту по SSH;
  2. Встановіть пакет Google PAM Authenticator за допомогою пакетного менеджера: В Debian/Ubuntu:
sudo apt-get install libpam-google-authenticator

В RHEL/CentOS/Fedora:

 yum install google-authenticator

3. Виконайте команду:

google-authenticator

4. Утиліта згенерує та покаже у консолі QR код;

  1. Запустіть програму Microsoft Authenticator на своєму смартфоні. Виберіть Add account -> Personal account -> Scan a QR Code;
  2. Проскануйте QR-код через програму. В результаті в Authenticator з’явиться новий запис для вашого користувача та сервера. У цьому записі ви зможете отримати одноразовий пароль для підключення до хоста;

7. Зверніть увагу, що в консолі Linux показані секретний ключ і коди аварійного доступу; Ці коди потрібні для підключення до вашого акаунта на сервері, якщо ви втратите свій смартфон. Збережіть коди у безпечне місце!
8. Потім google-authenticator покаже кілька додаткових питань:
9. Do you want authentication tokens to be time-based? Y -> Enter

10. Do you want me to update your “/home/sysops/.google_authenticator” file? Y -> Enter

11. Do you want to disallow multiple uses of the same authentication token? Y -> Enter

12. By default, tokens are good for 30 seconds…  Y -> Enter За замовчуванням одноразовий токен змінюється один раз на 30 секунд. Цього зазвичай достатньо. Але тут важливо, щоб ваш хост Linux та смартфон були синхронізовані за годиною.

13. Do you want to enable rate-limiting? Y -> Enter

Можна задати відразу всі налаштування 

$ google-authenticator -t -f -d -w 3 -e 5 -r 3 -R 30
  • -t – увімкнути вхід за одноразовим паролем
  • -f – зберегти конфігурацію у файлі ~/.google_authenticator
  • -d – заборонити використання попередніх паролів
  • -w 3 – дозволити використовувати один попередній та один наступний токен (якщо година не синхронізована)
  • -e 5 – згенерувати 5 аварійних кодів
  • -r 3 -R 30 – wдозволити не більше 3 логінів кожні 30 секунд

14. Тепер потрібно додати наступний рядок до файлу /etc/pam.d/sshd:

auth required pam_google_authenticator.so nullok
Включити pam_google_authenticator.so до pam.d/sshd

Опція nullok дозволяє користувачеві, для якого не налагоджена двофакторна автентифікація, входити лише за допомогою імені та пароля. Після налаштування та тестування 2FA рекомендує усунути цей параметр, щоб вимагати обов’язкового використання двофакторної автентифікації.

15. Тепер внесіть зміни до файлу /etc/ssh/sshd_config: 

sudo mcedit /etc/ssh/sshd_config

16. Змініть значення у рядку ChallengeResponseAuthentication на Yes:

ChallengeResponseAuthentication yes

17. Збережіть зміни у файлі sshd_config та перезапустіть sshd: service ssh restart

Тепер спробуйте під’єднатися до вашого хоста Linux за SSH. Перед введенням пароля вам буде запропоновано запровадити код верифікації (verification code).

Відкрийте програму Authenticator на смартфоні, знайдіть користувача вашого сервера. Введіть у консоль 6-символьний одноразовий пароль (One-time password code), який згенерував для вас Authenticator.

Одноразовий пароль для 2FA аутентифікації

Зауважте, що цей одноразовий код обмежений за часом (за замовчуванням 30 секунд). Якщо ви ввели правильний одноразовий код, з’явиться пропозиція ввести пароль користувача Linux.

Вхід на linux по ssh з одноразовим паролем 2fa

При успішному вході в лозі аутентифікації з’явиться рядок:

cat /var/log/auth.log

Dec 21 09:01:22 srv-ubun01 sshd(pam_google_authenticator)[6242]: Accepted google_authenticator for sysops

Якщо вказати невірний код, у лозі будуть помилки:

Dec 21 09:02:38 srv-ubun01 sshd(pam_google_authenticator)[6436]: Invalid verification code for sysops
Dec 21 09:02:40 srv-ubun01 sshd[6436]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.14.1 user=sysops

Якщо ви хочете використовувати 2FA разом із SSH автентифікацією за ключами, додайте наступні директиви до /etc/ssh/sshd_config:

PasswordAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

Якщо помітили помилки чи неточності, будь ласка, залишіть коментар чи напишіть листа на поштову адресу [email protected]

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *