Вступ
У цій статті ми покажемо, як налаштувати двофакторну аутентифікацію (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 сервері:
- Під’єднавшись до вашого Linux хосту по SSH;
- Встановіть пакет Google PAM Authenticator за допомогою пакетного менеджера: В Debian/Ubuntu:
sudo apt-get install libpam-google-authenticator
В RHEL/CentOS/Fedora:
yum install google-authenticator
3. Виконайте команду:
google-authenticator
4. Утиліта згенерує та покаже у консолі QR код;
- Запустіть програму Microsoft Authenticator на своєму смартфоні. Виберіть Add account -> Personal account -> Scan a QR Code;
- Проскануйте 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…
За замовчуванням одноразовий токен змінюється один раз на 30 секунд. Цього зазвичай достатньо. Але тут важливо, щоб ваш хост Linux та смартфон були синхронізовані за годиною.Y -> Enter
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
Опція 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.
Зауважте, що цей одноразовий код обмежений за часом (за замовчуванням 30 секунд). Якщо ви ввели правильний одноразовий код, з’явиться пропозиція ввести пароль користувача Linux.
При успішному вході в лозі аутентифікації з’явиться рядок:
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]