A bejegyzésből megtudhatod, hogy a linux SSH bejelentkezéshez hogyan tudod integrálni a Google Authenticator szolgáltatást.
A linux rendszerbe ssh szolgáltatáson keresztül történő bejelentkezés esetén nagyon fontos, hogy olyan módon történjen, hogy illetéktelenek ne tudjanak a rendszerünkbe bejutni. Érdemes tehát megfelelő tűzfal szabályokkal is körbebástyázni a szolgáltatást, de ebben most nem megyek bele.
Néhány jó tanács a szolgáltatás beállításához:
- A root felhasználó legyen kizárva a szolgáltatásból.
- Jelszavas bejelentkezés esetén érdemes bonyolult jelszót használni
- Meg lehet fontolni, hogy ne az alapértelmezés szerinti 22 -es portot használjuk.
- Preferáljuk az SSH kulcsos hitelesítést
- Alkalmazzunk kétfaktoros hitelesítést
A példámban a bejelentkezés SSH kulcs alkalmazásával történik az adott felhasználó vonatkozásában és a Google Authentikátort alkalmazzuk a hitelesítés második lépcsőjeként. Lássunk is hozzá.
Google Authenticator telepítés
A szolgáltatás telepítése debian 10 linux rendszeren az alábbi módon történik:
apt update && apt upgrade -y && apt install libpam-google-authenticator -y
A telepítést követően adjuk ki az alábbi parancsot, azonban az nagyon fontos, hogy annak a felhasználónak a nevében futtassuk, akinek a belépését két faktorossá kívánjuk tenni:
google-authenticator
ekkor a következő kérdések jelennek meg, melyre a megadott karakterekkel válaszljunk:
- Do you want authentication tokens to be time-based (y/n) y
- Do you want me to update your „~/.google_authenticator” file (y/n) y
- 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 the mobile app.
In order to compensate for possible time-skew between the client and the server,
we allow an extra token before and after the current time. This allows for a
time skew of up to 30 seconds between authentication server and client. If you
experience problems with poor time synchronization, you can increase the window
from its default size of 3 permitted codes (one previous code, the current
code, the next code) to 17 permitted codes (the 8 previous codes, the current
code, and the 8 next codes). This will permit for a time skew of up to 4 minutes
between client and server.
Do you want to do so? (y/n) y - If the computer that you are logging into isn’t hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting? (y/n) y
SSH konfigurálása
Nyissuk meg a /etc/pam.d/sshd állományt és módosítsuk a következők szerint:
- # @include common-auth ## Kommentezzük ki ezt a sort
- auth required pam_google_authenticator.so nullok ## Vegyük fel ezt az újsort
Majd nyissuk meg szerkesztésre a következő állományt /etc/ssh/sshd_confing:
- PermitRootLogin no ## A root felhasználó SSH kapcsolódását tiltsuk le
- AllowUsers berti ## Adjuk meg, hogy mely felhasználó csatlakozhat a szolgáltatáshoz
- ChallengeResponseAuthentication yes ## Állítsuk át a paraméter értékét
- AuthenticationMethods publickey,keyboard-interactive ## Adjuk hozzá ezt a beállítást
- ClientAliveInterval 300 ## Módosítsuk a beállítást
Nálam így néz ki a végleges sshd_config konfiguráció. Azért tartottam fontosnak beilleszteni a konfigurációmat, mert a Debian és az Ubuntu rendszerek alapértelemezett beállításai eltérhetnek:
# This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where # possible, but leave them commented. Uncommented options override the # default value. Include /etc/ssh/sshd_config.d/*.conf #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_ecdsa_key #HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying #RekeyLimit default none # Logging #SyslogFacility AUTH #LogLevel INFO # Authentication: #LoginGraceTime 2m #StrictModes yes #MaxAuthTries 6 #MaxSessions 10 PubkeyAuthentication yes AuthenticationMethods publickey,keyboard-interactive # Expect .ssh/authorized_keys2 to be disregarded by default in future. #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # To disable tunneled clear text passwords, change to no here! PasswordAuthentication no #PermitEmptyPasswords no # Change to yes to enable challenge-response passwords (beware issues with # some PAM modules and threads) # KbdInteractiveAuthentication no ChallengeResponseAuthentication yes # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the KbdInteractiveAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via KbdInteractiveAuthentication may bypass # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and KbdInteractiveAuthentication to 'no'. UsePAM yes #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PermitTTY yes PrintMotd no #PrintLastLog yes #TCPKeepAlive yes #PermitUserEnvironment no #Compression delayed ClientAliveInterval 300 #ClientAliveCountMax 3 #UseDNS no #PidFile /run/sshd.pid #MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none #VersionAddendum none # no default banner path #Banner none # Allow client to pass locale environment variables AcceptEnv LANG LC_* # override default of no subsystems Subsystem sftp /usr/lib/openssh/sftp-server # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no # AllowTcpForwarding no # PermitTTY no # ForceCommand cvs server
Amire feltétlen figyeljünk oda, hogy olyan felhasználót állítsunk be, aki létezik a rendszeren, illetve mielőtt újraindítanánk az SSH szolgáltatást a beállítások érvénybe léptetéséhez, a felhasználó .ssh könyvtárába állítsuk be az authorized_keys állományba a csatlakozó rendszer nyílvános SSH kulcsát.
Szolgáltatás aktualizálása
Nincs más hátra, mint újra indítani a szolgáltatást:
/etc/init.d/ssh restart
Ezzel kész is vagyunk.