2 modulis · 2.2
Saugus SSH serverio nustatymas
2 modulis: SSH ir raktai · Skaitymo laikas: 12 min.
Mokymosi tikslas: Po šios pamokos galėsite išjungti prisijungimą slaptažodžiu ir root prisijungimą slaptažodžiu, patikrinti, kuris nustatymas iš tikrųjų galioja, ir tai padaryti neužrakindami savęs už durų.
Pagrindinės sąvokos: sshd, sshd_config, sshd_config.d, galioja pirmoji reikšmė, PasswordAuthentication, KbdInteractiveAuthentication, PermitRootLogin, AuthenticationMethods, AllowUsers, sshd -t, sshd -T, antroji sesija, cloud-init, ssh.socket
Pirmiausia apsauginis tinklas
Šioje pamokoje uždarysite duris, pro kurias turite praeiti ir patys. Dėl vienos rašybos klaidos galite nebepatekti į serverį. Todėl prieš pradėdami visada pasirūpinkite:
- Du raktai veikia (pamoka 2.1), ir naujame lange patikrinote, kad prisijungimas raktu pavyksta.
- Momentinė kopija (snapshot) Jūsų VPS. WebOké ją galite sukurti VPS ekrane, kitų teikėjų ji taip pat vadinama snapshot arba image. Jei kas nors nepavyks, ją atkursite.
- Teikėjo konsolė Jums žinoma: per ją pateksite į serverį be SSH.
- Dabartinė SSH sesija lieka atvira iki pat pabaigos. Vykstanti sesija veikia toliau, net jei pakeičiate nustatymus ar perkraunate paslaugą. Kiekvieną pakeitimą tikrinate antrame lange.
Kur yra nustatymai
SSH serveris vadinasi sshd. Jo nustatymai yra faile /etc/ssh/sshd_config. Debian ir Ubuntu sistemose šio failo viršuje yra tokia eilutė:
Include /etc/ssh/sshd_config.d/*.confTaigi visi failai su .conf kataloge sshd_config.d nuskaitomi prieš likusią pagrindinio failo dalį, abėcėlės tvarka. Tai patogu: savo nustatymus įrašote į atskirą failą, o pagrindinio failo neliečiate, todėl paketo atnaujinimas Jūsų pakeitimų nepaveiks.
Tačiau tai turi pasekmę, kuri daugelį nustebina. Faile sshd_config galioja taisyklė: kiekvienam nustatymui galioja pirmoji reikšmė, kurią sshd randa. Vėlesnės eilutės su tuo pačiu nustatymu ignoruojamos. Jei sshd_config apačioje įrašysite PasswordAuthentication no, tai nenugalės failo kataloge sshd_config.d, kuriame parašyta yes.
cloud-init spąstai
Daugelį VPS atvaizdų pirmojo paleidimo metu sukonfigūruoja cloud-init. Priklausomai nuo to, kaip nustatyti atvaizdas ir diegimas, cloud-init gali sukurti failą, pavyzdžiui, /etc/ssh/sshd_config.d/50-cloud-init.conf, kuriame būna, pavyzdžiui:
PasswordAuthentication yesKadangi šis failas nuskaitomas anksčiau nei pagrindinis, prisijungimas slaptažodžiu lieka įjungtas, kad ir ką įrašytumėte į sshd_config. Todėl nespėliokite, o patikrinkite:
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 yesYra du tvarkingi sprendimai: pakeiskite to failo reikšmę į no arba savo nustatymus įrašykite į failą, kuris abėcėlėje yra anksčiau, pavyzdžiui, 00-beveiliging.conf. Failas 99-mijn.conf kaip tik neveiks, nes tada cloud-init jau bus laimėjęs.
Svarbūs nustatymai
Sukurkite savo failą:
root@web1:~# nano /etc/ssh/sshd_config.d/00-beveiliging.confsu tokiu turiniu:
# Prisijungimas tik su raktu
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-passwordKą reiškia kiekviena eilutė?
- PasswordAuthentication no: serveris nebepriima slaptažodžio. OpenSSH numatytoji reikšmė yra
yes. - KbdInteractiveAuthentication no: „keyboard-interactive“ yra antras būdas paprašyti slaptažodžio, per PAM. Jei paliksite šį nustatymą įjungtą, kas nors vis tiek galės bandyti slaptažodį, net jei
PasswordAuthenticationnustatytas įno. Senesniuose vadovuose šis nustatymas vadinamasChallengeResponseAuthentication; nuo OpenSSH 8.7 tai yra pasenęs kitas to paties nustatymo pavadinimas. Debian jį pagal numatytuosius nustatymus jau nustato įno, bet vis tiek jį įrašykite: taip aišku, ir tai tiks ir kitose sistemose. - PermitRootLogin prohibit-password: root gali prisijungti, bet tik raktu. Nuo OpenSSH 7.0 tai yra numatytoji reikšmė. Griežtesnė reikšmė yra
PermitRootLogin no: root visiškai negali prisijungti per SSH, Jūs jungiatės kaip įprastas naudotojas ir naudojate sudo (pamoka 3.2). Nustatykitenotik tada, kai tikrai žinote, kad prisijungimas tuo naudotoju irsudoveikia.
Pasirinktinai, norintiems daugiau:
AllowUsers anna
AuthenticationMethods publickeyAllowUsers įleidžia tik nurodytus naudotojus; bet kuris kitas vardas atmetamas, net jei turi galiojantį raktą. Patogu, bet nepamirškite savęs ir nepamirškite papildyti sąrašo, kai pridėsite antrą administratorių. AuthenticationMethods publickey viena eilute nurodo, kad galioja tik raktai.
Testavimas, taikymas, tikrinimas
Pirmiausia leiskite sshd patikrinti failą. Tai nieko nepaleidžia ir nieko nekeičia:
root@web1:~# sshd -t
root@web1:~#Jokios išvesties reiškia: klaidų nėra. Jei yra rašybos klaida, pamatysite eilutę ir failą. Tik tada perkraukite paslaugą:
root@web1:~# systemctl reload sshDebian ir Ubuntu sistemose paslauga vadinasi ssh, AlmaLinux ir Rocky Linux sistemose sshd.
Tada patikrinkite, kuri reikšmė galioja iš tikrųjų. sshd -T parodo visą apskaičiuotą konfigūraciją, kurioje apdoroti visi Include failai:
root@web1:~# sshd -T | grep -Ei 'passwordauth|kbdinteractive|permitrootlogin'
permitrootlogin without-password
passwordauthentication no
kbdinteractiveauthentication no(without-password yra senas prohibit-password pavadinimas. OpenSSH versijos iki 10.1, pavyzdžiui, Debian 13 ir Ubuntu 24.04, dar rodo seną pavadinimą; naujesnės rodo prohibit-password. Reikšmė ta pati.)
O dabar svarbiausia: testuokite antrame lange, kol pirmasis lieka atviras.
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$Jei tai veikia, sąmoningai pabandykite prisijungti slaptažodžiu. Tai turi nepavykti:
anna@laptop:~$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no anna@192.0.2.10
anna@192.0.2.10: Permission denied (publickey).Po Permission denied skliaustuose nurodyta, kokius prisijungimo būdus serveris dar siūlo. Jei ten yra tik publickey, viskas gerai. Jei šalia yra password arba keyboard-interactive, kažkur dar galioja kita reikšmė: patikrinkite dar kartą su sshd -T.
Būtent šį sąrašą iš išorės tikrina ir kurso užduotis. Jūsų SSH klientas kiekvieno ryšio metu pirmiausia klausia, kokie būdai leidžiami, siųsdamas „none“ tipo užklausą. Serveris atsako sąrašu, nebandant jokio slaptažodžio ar rakto.
Ubuntu 24.04 ir naujesnės: ssh.socket
Ubuntu nuo 22.10 versijos 22 prievadu klausosi ne pats sshd, o systemd, per ssh.socket. Tik kai gaunamas ryšys, systemd paleidžia SSH paslaugą. Šios pamokos nustatymams tai neturi įtakos: pakanka systemctl reload ssh arba restart ssh.
Tačiau tai svarbu, jei keičiate prievadą arba klausymosi adresą (Port, ListenAddress). Nuo Ubuntu 24.04 systemd šias reikšmes nuskaito iš sshd_config, bet tik po:
root@web1:~# systemctl daemon-reload
root@web1:~# systemctl restart ssh.socketJei to pamiršite, serveris toliau klausysis senuoju prievadu. Dar blogiau: jei pirmiausia užkardoje atidarysite naują prievadą, o SSH liks senajame, užrakinsite save už durų. Visada patikrinkite su ss -tlnp | grep ssh, kuriuo prievadu iš tikrųjų klausomasi (pamoka 5.1), ir įtraukite naują prievadą į užkardą prieš uždarydami senąjį. Ar verta naudoti kitą prievadą, skaitykite pamokoje 2.3.
Jei vis dėlto kas nors nepavyksta
Jei nebegalite prisijungti, atidarykite teikėjo konsolę, prisijunkite kaip root (slaptažodžiu, nes konsolė yra „prie serverio prijungta klaviatūra“, o ne SSH) ir atkurkite savo failą:
root@web1:~# mv /etc/ssh/sshd_config.d/00-beveiliging.conf /root/
root@web1:~# systemctl reload sshJei ir tai nepavyksta, atkurkite momentinę kopiją. WebOké VPS ekrane taip pat galite nustatyti naują root slaptažodį; kiti teikėjai dažnai turi panašų mygtuką arba gelbėjimo režimą (rescue).
AlmaLinux ir Rocky Linux
Paslauga vadinasi sshd (systemctl reload sshd). Ir ten viršuje yra Include /etc/ssh/sshd_config.d/*.conf, o sistema į tą katalogą pateikia savų failų; galioja ta pati taisyklė „galioja pirmoji reikšmė“. Jei keičiate prievadą, SELinux taip pat turi leisti tą prievadą (semanage port -a -t ssh_port_t -p tcp 2222), o firewalld jį atidaryti.
Santrauka
- Faile
sshd_configgalioja pirmoji reikšmė; failai katalogesshd_config.dnuskaitomi pirmiausia. Savo nustatymus įrašykite į failą, pavyzdžiui,00-beveiliging.conf. - Nustatykite
PasswordAuthentication noirKbdInteractiveAuthentication no; root tik su raktu (prohibit-password) arba visai ne (no). - Prieš perkraudami patikrinkite su
sshd -t, o susshd -Tpatikrinkite, kuri reikšmė galioja iš tikrųjų; atkreipkite dėmesį į50-cloud-init.conf. - Testuokite antrame lange ir laikykite pirmąją sesiją atvirą. Žinokite, kaip naudotis konsole, ir iš anksto sukurkite momentinę kopiją.
- Ubuntu 24.04+ kitam prievadui reikia
systemctl daemon-reloadirsystemctl restart ssh.socket.
Testas (quiz)
Užduotis
Užduotis Z2.2: Prisijungimas slaptažodžiu išjungtas. Išjunkite prisijungimą slaptažodžiu ir keyboard-interactive, kaip aprašyta šioje pamokoje, ir tada leiskite programai patikrinti iš išorės. Įveskite savo serverio IP adresą arba pagrindinio kompiuterio vardą, SSH prievadą (numatytasis 22) ir naudotojo vardą, kuriuo jungiatės patys (pavyzdžiui, anna, ne root ir ne išgalvotą vardą). Programa neprisijungia: ji tik paklausia, kaip ir bet kuris SSH klientas prieš prisijungdamas, kokius prisijungimo būdus Jūsų serveris siūlo tam naudotojui. Teisingas rezultatas: tik publickey.
Skaitykite daugiau
Šiuose straipsniuose aprašyti veiksmai taikomi WebOké VPS ekranui; kitų teikėjų tai veikia panašiai.
- Jūsų VPS apsauga: pirmosios penkios minutės
- Nebeturite prieigos prie savo VPS: ką daryti?
- VPS momentinės ir atsarginės kopijos
- sshd_config vadovas: 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
