Duo Security 2FA na CentOS 9 Stream serveru

V souvislosti se zvyšováním zabezpečení našich liunoxvých serverů jsem chtěl nasadit 2FA autentizaci pro účet root. Zvažoval jsem Google authenticator, ten je výborně popsán zde a zde. Budoucí možná závislost na Google mě přivedla k použití nástroje Duo Security. Mám s ním výborné zkušenosti při použití do nejrůznějších aplikací.

Duo Security podporuje RHEL kompatibilní distribuce, takže instalace z repozitáře je jednoduchá. Vytvořte soubor /etc/yum.repos.d/duosecurity.repo s obsahem:

[duosecurity]
name=Duo Security Repository
baseurl=https://pkg.duosecurity.com/CentOSStream/$releasever/$basearch
enabled=1
gpgcheck=1

Poté naimportujte klíč repozitáře:

# rpm --import https://duo.com/DUO-GPG-PUBLIC-KEY.asc
# dnf install duo_unix

V konzoli Duo Security vytvořte další chárněnou aplikaci „Application“ – „Protect an Appplication“ a zkopírujte si údaje vygenerované konzolí.

Upravte soubor /etc/duo/login_duo.conf

[duo]
; Duo integration key
ikey = DxxxxxxxxxxxxxxxxGZ
; Duo secret key
skey = ERxxxxxxxxxxxxxxxxxxxxxxxxxHqR
; Duo API host
host = apixxxxxxxxxx.duosecurity.com
; failmode = safe In the event of errors with this configuration file or connection to the Duo service
; this mode will allow login without 2FA.
; failmode = secure This mode will deny access in the above cases. Misconfigurations with this setting
; enabled may result in you being locked out of your system.
failmode = safe
; Send command for Duo Push authentication
pushinfo=yes
autopush=yes

Můžete otestovat funkčnost ručním spuštěním klienta Duo.

[root@nyx ssh]# /usr/sbin/login_duo
Autopushing login request to phone…
Success. Logging you in…


Nyní upravte konfiguraci SSH daemona v /etc/ssh/sshd_config a restartujte sshd.

ForceCommand /usr/sbin/login_duo

POZOR! Nyní bude SSH server zkoušet vynucovat 2FA pro všechny uživatele. V našem případě jsme vytvořili testovacího uživatele exterra. Přihlášení pak vypadá takto:

login as: exterra
exterra@192.168.57.36's password:
Autopushing login request to phone…
Success. Logging you in…

Ve /var/log/secure můžete vidět záznam úspěného přihlášení.

Sep 24 13:16:51 nyx sshd[13087]: Accepted password for exterra from 192.168.56.119 port 64535 ssh2
Sep 24 13:16:51 nyx systemd[13095]: pam_unix(systemd-user:session): session opened for user exterra(uid=1000) by exterra(uid=0)
Sep 24 13:16:51 nyx sshd[13087]: pam_unix(sshd:session): session opened for user exterra(uid=1000) by exterra(uid=0)

Pokud chcete omezit vynucování 2FA pro SSH službu, přidejte do souboru /etc/duo/login_duo.conf tento záznam:

groups = wheel, users, !root

Skupiny, před které přidáte vykřičník, budou z 2FA vyjmuty.