Modul 2 · 2.2
Varna nastavitev strežnika SSH
Modul 2: SSH in ključi · Čas branja: 12 minut
Učni cilj: Po tej lekciji boste znali izklopiti prijavo z geslom in prijavo kot root z geslom, preveriti, katera nastavitev dejansko velja, in to narediti, ne da bi se zaklenili iz strežnika.
Ključni pojmi: sshd, sshd_config, sshd_config.d, šteje prva vrednost, PasswordAuthentication, KbdInteractiveAuthentication, PermitRootLogin, AuthenticationMethods, AllowUsers, sshd -t, sshd -T, druga seja, cloud-init, ssh.socket
Najprej varnostna mreža
V tej lekciji boste zaprli vrata, skozi katera morate tudi sami. Že tipkarska napaka lahko pomeni, da ne pridete več noter. Zato pred začetkom vedno poskrbite za naslednje:
- Dva ključa delujeta (lekcija 2.1) in v novem oknu ste preverili, da prijava s ključem uspe.
- Posnetek stanja (snapshot) Vašega VPS. Pri WebOké ga naredite na zaslonu VPS, pri drugih ponudnikih se prav tako imenuje snapshot ali image. Če gre kaj narobe, ga obnovite.
- Konzolo svojega ponudnika poznate: tam pridete noter brez SSH.
- Vaša trenutna seja SSH ostane odprta do konca. Seja, ki že teče, deluje naprej, tudi ko spremenite nastavitve ali znova naložite storitev. Vsako spremembo preizkusite v drugem oknu.
Kje so nastavitve
Strežnik SSH se imenuje sshd. Njegove nastavitve so v /etc/ssh/sshd_config. Na Debianu in Ubuntuju je na vrhu te datoteke ta vrstica:
Include /etc/ssh/sshd_config.d/*.confVse datoteke s .conf v mapi sshd_config.d se torej preberejo pred preostankom glavne datoteke, po abecednem vrstnem redu. To je priročno: svoje nastavitve zapišete v lastno datoteko in glavne datoteke ne spreminjate, tako da posodobitev paketa ne vpliva na Vaše spremembe.
Ima pa to posledico, ki preseneti marsikoga. V sshd_config velja: za vsako nastavitev šteje prva vrednost, na katero naleti sshd. Poznejše vrstice z isto nastavitvijo se prezrejo. Kdor na dno sshd_config zapiše PasswordAuthentication no, torej ne premaga datoteke v sshd_config.d, ki pravi yes.
Past cloud-init
Veliko slik VPS ob prvem zagonu nastavi cloud-init. Odvisno od tega, kako sta nastavljeni slika in namestitev, cloud-init zapiše datoteko, kot je /etc/ssh/sshd_config.d/50-cloud-init.conf, v kateri je na primer:
PasswordAuthentication yesKer se ta datoteka prebere pred glavno datoteko, je prijava z geslom vklopljena, ne glede na to, kaj zapišete v sshd_config. Tega torej ne predpostavljajte, ampak preverite:
root@web1:~# grep -ri passwordauthentication /etc/ssh/sshd_config /etc/ssh/sshd_config.d/
/etc/ssh/sshd_config:#PasswordAuthentication yes
/etc/ssh/sshd_config.d/50-cloud-init.conf:PasswordAuthentication yesDve čisti rešitvi: to datoteko spremenite v no ali pa svoje nastavitve zapišite v datoteko, ki je po abecedi prej, na primer 00-beveiliging.conf. Datoteka 99-mijn.conf pa ne deluje, saj je cloud-init takrat že zmagal.
Nastavitve, ki so pomembne
Ustvarite svojo datoteko:
root@web1:~# nano /etc/ssh/sshd_config.d/00-beveiliging.confs to vsebino:
# Prijava samo s ključem
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-passwordKaj pomeni posamezna vrstica?
- PasswordAuthentication no: strežnik ne sprejema več gesel. Privzeta vrednost OpenSSH je
yes. - KbdInteractiveAuthentication no: "keyboard-interactive" je drug način zahtevanja gesla, prek PAM. Če to pustite vklopljeno, lahko nekdo še vedno poskusi z geslom, tudi če je
PasswordAuthenticationnastavljeno nano. V starejših priročnikih se ta nastavitev imenujeChallengeResponseAuthentication; od OpenSSH 8.7 je to zastarelo drugo ime za isto stvar. Debian jo privzeto že nastavi nano, a jo vseeno zapišite: tako je jasno in drži tudi na drugih sistemih. - PermitRootLogin prohibit-password: root se sme prijaviti, vendar samo s ključem. To je privzeto od OpenSSH 7.0. Strožje je
PermitRootLogin no: root sploh ne sme noter prek SSH, prijavite se kot običajen uporabnik in uporabite sudo (lekcija 3.2).nonastavite šele, ko ste prepričani, da prijava kot ta uporabnik insudodelujeta.
Neobvezno, za tiste, ki želijo več:
AllowUsers anna
AuthenticationMethods publickeyAllowUsers spusti noter samo navedene uporabnike; vsako drugo ime je zavrnjeno, tudi če ima veljaven ključ. Priročno, vendar ne pozabite nase in ne pozabite seznama dopolniti, ko dodate drugega skrbnika. AuthenticationMethods publickey v eni vrstici pove, da veljajo samo ključi.
Preizkus, uveljavitev, preverjanje
Najprej naj sshd preveri datoteko. To ničesar ne zažene in ničesar ne spremeni:
root@web1:~# sshd -t
root@web1:~#Brez izpisa pomeni: brez napak. Pri tipkarski napaki vidite vrstico in datoteko. Šele nato znova naložite storitev:
root@web1:~# systemctl reload sshNa Debianu in Ubuntuju se storitev imenuje ssh, na AlmaLinuxu in Rocky Linuxu sshd.
Nato preverite, katera vrednost dejansko velja. sshd -T prikaže celotno, izračunano konfiguracijo, z upoštevanimi vsemi datotekami Include:
root@web1:~# sshd -T | grep -Ei 'passwordauth|kbdinteractive|permitrootlogin'
permitrootlogin without-password
passwordauthentication no
kbdinteractiveauthentication no(without-password je staro ime za prohibit-password. Različice OpenSSH pred 10.1, na primer na Debianu 13 in Ubuntuju 24.04, še prikazujejo staro ime; novejše prikazujejo prohibit-password. Pomen je enak.)
In zdaj najpomembnejše: preizkusite v drugem oknu, medtem ko prvo ostane odprto.
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$Če to deluje, se namerno poskusite prijaviti z geslom. To mora spodleteti:
anna@laptop:~$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no anna@192.0.2.10
anna@192.0.2.10: Permission denied (publickey).Za Permission denied je v oklepaju navedeno, katere načine prijave strežnik še ponuja. Če je tam samo publickey, je vse v redu. Če je zraven tudi password ali keyboard-interactive, nekje še velja druga vrednost: znova preverite z sshd -T.
Prav ta seznam od zunaj preveri tudi naloga tečaja. Vaš odjemalec SSH pri vsaki povezavi najprej vpraša, kateri načini so dovoljeni, z zahtevo vrste "none". Strežnik odgovori s seznamom, ne da bi se poskusilo z geslom ali ključem.
Ubuntu 24.04 in novejši: ssh.socket
Na Ubuntuju od različice 22.10 na vratih 22 ne posluša sshd sam, ampak systemd, prek ssh.socket. Šele ko prispe povezava, systemd zažene storitev SSH. Za nastavitve v tej lekciji to ni pomembno: systemctl reload ssh ali restart ssh zadostuje.
Pomembno pa je, če spremenite vrata ali naslov poslušanja (Port, ListenAddress). Od Ubuntu 24.04 systemd te vrednosti prebere iz sshd_config, vendar šele po:
root@web1:~# systemctl daemon-reload
root@web1:~# systemctl restart ssh.socketČe na to pozabite, strežnik preprosto še naprej posluša na starih vratih. Še huje: če najprej nastavite požarni zid na nova vrata, SSH pa ostane na starih, se zaklenete iz strežnika. Vedno preverite z ss -tlnp | grep ssh, kje se dejansko posluša (lekcija 5.1), in nova vrata odprite v požarnem zidu, preden zaprete stara. Ali so druga vrata smiselna, preberite v lekciji 2.3.
Če gre vseeno kaj narobe
Če ne pridete več noter, odprite konzolo svojega ponudnika, se prijavite kot root (z geslom, saj je konzola "tipkovnica, priključena na strežnik" in ne SSH) in razveljavite svojo datoteko:
root@web1:~# mv /etc/ssh/sshd_config.d/00-beveiliging.conf /root/
root@web1:~# systemctl reload sshČe tudi to ne uspe, obnovite posnetek stanja. Pri WebOké lahko na zaslonu VPS nastavite tudi novo geslo za root; drugi ponudniki imajo pogosto podoben gumb ali reševalni način (rescue).
Na AlmaLinuxu in Rocky Linuxu
Storitev se imenuje sshd (systemctl reload sshd). Tudi tam je na vrhu Include /etc/ssh/sshd_config.d/*.conf in sistem v tej mapi prinaša lastne datoteke; velja isto pravilo "šteje prva vrednost". Če spremenite vrata, jih mora dovoliti tudi SELinux (semanage port -a -t ssh_port_t -p tcp 2222), firewalld pa jih mora odpreti.
Povzetek
- V
sshd_configšteje prva vrednost; datoteke vsshd_config.dse preberejo najprej. Svoje nastavitve zapišite v datoteko, kot je00-beveiliging.conf. - Nastavite
PasswordAuthentication noin tudiKbdInteractiveAuthentication no; root samo s ključem (prohibit-password) ali sploh ne (no). - Pred ponovnim nalaganjem preverite z
sshd -t, zsshd -Tpa, katera vrednost dejansko velja; bodite pozorni na50-cloud-init.conf. - Preizkusite v drugem oknu in prvo sejo pustite odprto. Poznajte konzolo in vnaprej naredite posnetek stanja.
- Na Ubuntu 24.04+ druga vrata zahtevajo
systemctl daemon-reloadinsystemctl restart ssh.socket.
Kviz
Naloga
Naloga Z2.2: Prijava z geslom je izklopljena. Izklopite prijavo z geslom in keyboard-interactive, kot je opisano v tej lekciji, nato pa naj program preveri od zunaj. Vnesite naslov IP ali ime gostitelja svojega strežnika, vrata SSH (privzeto 22) in uporabniško ime, s katerim se sami prijavljate (na primer anna, ne root ali izmišljenega imena). Program se ne prijavi: samo vpraša, tako kot vsak odjemalec SSH pred prijavo, katere načine prijave Vaš strežnik ponuja za tega uporabnika. Pravilno je: samo publickey.
Za nadaljnje branje
Koraki v teh člankih veljajo za zaslon VPS pri WebOké; pri drugih ponudnikih deluje podobno.
- Zaščita VPS: prvih pet minut
- Nimate več dostopa do VPS: kaj zdaj?
- Posnetki stanja in varnostne kopije VPS
- Priročnik sshd_config: https://man.openbsd.org/sshd_config
- Ubuntu: SSHd now uses socket-based activation: https://discourse.ubuntu.com/t/sshd-now-uses-socket-based-activation-ubuntu-22-10-and-later/30189
