До тексту
  1. Статті/

Налаштування 2FA для SSH (Google Authenticator)

·3 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

Що потрібно зробити?
#

На VPS потрібно увімкнути двофакторну аутентифікацію для SSH. 2FA буду додавати через Google Authenticator.

Перед початком конфігурації обов’язково відкрий другу SSH-сесію, щоб потім не плакати.

З чим працюю?
#

1
2
3
4
5
6
root@linuxway-com-ua:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 26.04 LTS
Release:        26.04
Codename:       resolute

Конфігурація
#

Крок 1 - Встановлюємо пакет
#

Встановлюємо libpam-google-authenticator

1
apt install libpam-google-authenticator -y

Крок 2 - Реєструємося
#

Запускаємо google-authenticator

1
google-authenticator

Відповідаємо на питання:

1
Do you want authentication tokens to be time-based (y/n) y 

Після цього з’явивиться qr який потрібно відсканувати через додаток Google Authenticator.

qr_google
Після того як відсканував, вписуємо в терміналі код otp з додатку

1
Enter code from app (-1 to skip): код з додатку

У відповідь отримаємо emergency scratch codes - запиши їх кудись.

1
2
Your emergency scratch codes are:
  XXXXXXXX

І відповідаємо на решту запитань:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
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? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) - y

By default, a new token is generated every 30 seconds by....
Do you want to do so? (y/n) y

If the computer that you are logging into isn't....
Do you want to enable rate-limiting?  (y/n) y

qr_google

Крок 3 - Налаштовуємо PAM (вмикаємо 2FA)
#

1
vim /etc/pam.d/sshd

Додаємо наступні рядки (він повинен бути з самого верху)

1
2
auth required pam_google_authenticator.so
auth required pam_permit.so

pam_sshd

Якщо потрібно увімкнути не для ВСІХ - в самому кінці дописуємо nullok.

У користувачів у яких немає файла ~/.google_authenticator не буде вимагати OTP.

1
auth required pam_google_authenticator.so nullok

Якщо залишити @include common-auth - після OTP буде питати пароль.

Ось фінальний варіант:

  1. 2fa не обов’язковий - доданий nullok
  2. Пароль не вимагатиме - @include common-auth - закоментований
  3. Аутентифікація по ключу, а якщо є 2fa то {ключ + 2fa}

qr4

Крок 4 - Налаштовуємо sshd
#

Змінюємо рядки (можна змінити в /etc/ssh/sshd_config) або додати окремо , наприклад /etc/ssh/sshd_config.d/google-auth.conf

1
2
3
4
5
UsePAM yes
KbdInteractiveAuthentication yes 
PubkeyAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive

Після цього

1
sshd -t && systemctl reload sshd || systemctl reload ssh

якщо через sudo

1
sudo sshd -t && sudo systemctl reload sshd || sudo systemctl reload ssh

Можливі проблеми
#

Вимкнути 2fa для користувача
#

Якщо потрібно вимкнути 2fa для якогось юзера -> видали або зміни назву файлу (при умові що доданий nullok в pam.d/sshd)

1
mv ~/.google_authenticator ~/.google_authenticator.disabled

Увімкнути 2fa для ROOT
#

Якщо хочеш 2fa для root то отримаєш ось таку помилку

1
Permission denied (keyboard-interactive).

Додай PermitRootLogin yes в /etc/ssh/sshd_config.d/google-auth.conf

1
PermitRootLogin yes

p.s. це знижує безпеку і краще використовувати sudo-юзера.

Related