2. modulis · 2.2
SSH servera droša iestatīšana
2. modulis: SSH un atslēgas · Lasīšanas laiks: 12 min.
Mācīšanās mērķis: Pēc šīs nodarbības Jūs varēsiet izslēgt pieteikšanos ar paroli un root pieteikšanos ar paroli, pārbaudīt, kurš iestatījums tiešām ir spēkā, un izdarīt to tā, lai pats nepaliktu ārpus servera.
Pamatjēdzieni: sshd, sshd_config, sshd_config.d, noteicošā ir pirmā vērtība, PasswordAuthentication, KbdInteractiveAuthentication, PermitRootLogin, AuthenticationMethods, AllowUsers, sshd -t, sshd -T, otrā sesija, cloud-init, ssh.socket
Vispirms drošības tīkls
Šajā nodarbībā Jūs aizverat durvis, pa kurām pašam jāiet iekšā. Viena drukas kļūda var nozīmēt, ka vairs nevarat pieslēgties. Tāpēc pirms darba sākšanas vienmēr pārliecinieties par šo:
- Divas atslēgas darbojas (nodarbība 2.1), un Jūs jaunā logā esat pārbaudījuši, ka pieteikšanās ar atslēgu izdodas.
- Momentuzņēmums (snapshot) no Jūsu VPS. WebOké to var izveidot VPS ekrānā, citiem pakalpojumu sniedzējiem to arī sauc par snapshot vai image. Ja kaut kas noiet greizi, Jūs to atjaunojat.
- Konsoli pie sava pakalpojumu sniedzēja Jūs pazīstat: tur var piekļūt bez SSH.
- Jūsu pašreizējā SSH sesija paliek atvērta līdz pašām beigām. Aktīva sesija turpina darboties, ja maināt iestatījumus vai pārlādējat pakalpojumu. Katru izmaiņu Jūs pārbaudāt otrā logā.
Kur atrodas iestatījumi
SSH serveri sauc par sshd. Tā iestatījumi atrodas /etc/ssh/sshd_config. Debian un Ubuntu sistēmās šī faila augšpusē ir šāda rinda:
Include /etc/ssh/sshd_config.d/*.confTātad visi faili ar .conf mapē sshd_config.d tiek nolasīti pirms pārējā galvenā faila, alfabētiskā secībā. Tas ir ērti: savus iestatījumus Jūs ierakstāt atsevišķā failā un galveno failu neaiztiekat, tāpēc pakotnes atjauninājums Jūsu izmaiņas neskar.
Taču tam ir sekas, kas daudzus pārsteidz. Failā sshd_config ir spēkā šāds noteikums: katram iestatījumam noteicošā ir pirmā vērtība, ko sshd sastop. Vēlākas rindas ar to pašu iestatījumu tiek ignorētas. Ja Jūs sshd_config beigās ierakstāt PasswordAuthentication no, tas neuzvar failu mapē sshd_config.d, kurā rakstīts yes.
cloud-init slazds
Daudzus VPS attēlus pirmajā palaišanas reizē iestata cloud-init. Atkarībā no tā, kā iestatīts attēls un instalācija, cloud-init izveido failu, piemēram, /etc/ssh/sshd_config.d/50-cloud-init.conf, kurā ir, piemēram:
PasswordAuthentication yesTā kā šis fails tiek nolasīts agrāk nekā galvenais fails, pieteikšanās ar paroli ir ieslēgta neatkarīgi no tā, ko ierakstāt sshd_config. Tāpēc nepieņemiet to kā pašsaprotamu, bet pārbaudiet:
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 yesIr divi korekti risinājumi: nomainiet šajā failā vērtību uz no vai ierakstiet savus iestatījumus failā, kas alfabētā ir agrāk, piemēram, 00-beveiliging.conf. Fails 99-mijn.conf savukārt nedarbosies, jo tad cloud-init jau būs uzvarējis.
Būtiskie iestatījumi
Izveidojiet savu failu:
root@web1:~# nano /etc/ssh/sshd_config.d/00-beveiliging.confar šādu saturu:
# Pieteikšanās tikai ar atslēgu
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-passwordKo nozīmē katra rinda?
- PasswordAuthentication no: serveris vairs nepieņem paroles. OpenSSH noklusējuma vērtība ir
yes. - KbdInteractiveAuthentication no: "keyboard-interactive" ir otrs veids, kā prasīt paroli, izmantojot PAM. Ja to atstājat ieslēgtu, kāds joprojām var mēģināt paroli, pat ja
PasswordAuthenticationir iestatīts uzno. Vecākās rokasgrāmatās šo iestatījumu sauc parChallengeResponseAuthentication; kopš OpenSSH 8.7 tas ir novecojis cits nosaukums tam pašam. Debian to pēc noklusējuma jau iestata uzno, tomēr ierakstiet to: tā viss ir skaidrs un atbilst arī citās sistēmās. - PermitRootLogin prohibit-password: root drīkst pieteikties, bet tikai ar atslēgu. Kopš OpenSSH 7.0 tas ir noklusējums. Stingrāk ir
PermitRootLogin no: root vispār nedrīkst pieteikties caur SSH, Jūs piesakāties kā parasts lietotājs un izmantojat sudo (nodarbība 3.2). Iestatietnotikai tad, kad esat pārliecināti, ka pieteikšanās kā šim lietotājam unsudodarbojas.
Pēc izvēles, ja vēlaties vairāk:
AllowUsers anna
AuthenticationMethods publickeyAllowUsers ielaiž tikai norādītos lietotājus; jebkurš cits vārds tiek noraidīts, pat ja tam ir derīga atslēga. Tas ir ērti, taču neaizmirstiet sevi un neaizmirstiet sarakstu papildināt, kad pievienojat otru administratoru. AuthenticationMethods publickey vienā rindā nosaka, ka derīgas ir tikai atslēgas.
Pārbaudīt, piemērot, kontrolēt
Vispirms ļaujiet sshd pārbaudīt failu. Tas neko nepalaiž un neko nemaina:
root@web1:~# sshd -t
root@web1:~#Ja izvades nav, tas nozīmē: kļūdu nav. Drukas kļūdas gadījumā redzēsiet rindu un failu. Tikai tad pārlādējiet pakalpojumu:
root@web1:~# systemctl reload sshDebian un Ubuntu sistēmās pakalpojumu sauc ssh, AlmaLinux un Rocky Linux sistēmās sshd.
Pēc tam pārbaudiet, kura vērtība ir tiešām spēkā. sshd -T parāda pilnu, aprēķināto konfigurāciju, kurā apstrādāti visi Include faili:
root@web1:~# sshd -T | grep -Ei 'passwordauth|kbdinteractive|permitrootlogin'
permitrootlogin without-password
passwordauthentication no
kbdinteractiveauthentication no(without-password ir vecais prohibit-password nosaukums. OpenSSH versijas pirms 10.1, piemēram, Debian 13 un Ubuntu 24.04 sistēmās, vēl rāda veco nosaukumu; jaunākas rāda prohibit-password. Nozīme ir tā pati.)
Un tagad pats svarīgākais: pārbaudiet otrā logā, kamēr pirmais paliek atvērts.
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$Ja tas darbojas, apzināti mēģiniet pieteikties ar paroli. Tam jāneizdodas:
anna@laptop:~$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no anna@192.0.2.10
anna@192.0.2.10: Permission denied (publickey).Aiz Permission denied iekavās redzams, kādas pieteikšanās metodes serveris vēl piedāvā. Ja tur ir tikai publickey, viss ir kārtībā. Ja tur ir arī password vai keyboard-interactive, kaut kur joprojām ir spēkā cita vērtība: vēlreiz pārbaudiet ar sshd -T.
Tieši šo sarakstu no ārpuses pārbauda arī kursa uzdevums. Jūsu SSH klients pie katra savienojuma vispirms jautā, kuras metodes ir atļautas, ar "none" tipa pieprasījumu. Serveris atbild ar sarakstu, nemēģinot ne paroli, ne atslēgu.
Ubuntu 24.04 un jaunākas versijas: ssh.socket
Ubuntu kopš versijas 22.10 portā 22 klausās nevis pats sshd, bet systemd, izmantojot ssh.socket. Tikai tad, kad ienāk savienojums, systemd palaiž SSH pakalpojumu. Šīs nodarbības iestatījumiem tam nav nozīmes: pietiek ar systemctl reload ssh vai restart ssh.
Taču tam ir nozīme, ja maināt portu vai klausīšanās adresi (Port, ListenAddress). Kopš Ubuntu 24.04 systemd nolasa šīs vērtības no sshd_config, bet tikai pēc:
root@web1:~# systemctl daemon-reload
root@web1:~# systemctl restart ssh.socketJa to aizmirstat, serveris turpina klausīties vecajā portā. Vēl ļaunāk: ja vispirms pārslēdzat ugunsmūri uz jaunu portu, bet SSH paliek vecajā, Jūs paši sev aizslēdzat piekļuvi. Vienmēr pārbaudiet ar ss -tlnp | grep ssh, kur tiešām notiek klausīšanās (nodarbība 5.1), un atveriet jauno portu ugunsmūrī, pirms aizverat veco. Vai cits ports ir lietderīgs, lasiet nodarbībā 2.3.
Ja tomēr kaut kas noiet greizi
Ja vairs nevarat pieslēgties, atveriet sava pakalpojumu sniedzēja konsoli, piesakieties kā root (ar paroli, jo konsole ir "tastatūra pie servera", nevis SSH) un atsauciet sava faila izmaiņas:
root@web1:~# mv /etc/ssh/sshd_config.d/00-beveiliging.conf /root/
root@web1:~# systemctl reload sshJa arī tas neizdodas, atjaunojiet momentuzņēmumu. WebOké VPS ekrānā var arī iestatīt jaunu root paroli; citiem pakalpojumu sniedzējiem bieži ir līdzīga poga vai glābšanas režīms (rescue).
AlmaLinux un Rocky Linux sistēmās
Pakalpojumu sauc sshd (systemctl reload sshd). Arī tur augšpusē ir Include /etc/ssh/sshd_config.d/*.conf, un sistēma šajā mapē piegādā savus failus; tas pats noteikums "noteicošā ir pirmā vērtība" ir spēkā. Ja maināt portu, arī SELinux ir jāatļauj šis ports (semanage port -a -t ssh_port_t -p tcp 2222), un firewalld tas jāatver.
Kopsavilkums
- Failā
sshd_confignoteicošā ir pirmā vērtība; faili mapēsshd_config.dtiek nolasīti vispirms. Ierakstiet savus iestatījumus failā, piemēram,00-beveiliging.conf. - Iestatiet
PasswordAuthentication noun arīKbdInteractiveAuthentication no; root tikai ar atslēgu (prohibit-password) vai vispār ne (no). - Pārbaudiet ar
sshd -tpirms pārlādēšanas un arsshd -T, kura vērtība tiešām ir spēkā; pievērsiet uzmanību50-cloud-init.conf. - Pārbaudiet otrā logā un turiet pirmo sesiju atvērtu. Pazīstiet konsoli un iepriekš izveidojiet momentuzņēmumu.
- Ubuntu 24.04+ citam portam vajag
systemctl daemon-reloadunsystemctl restart ssh.socket.
Tests (quiz)
Uzdevums
Uzdevums Z2.2: Pieteikšanās ar paroli ir izslēgta. Izslēdziet pieteikšanos ar paroli un keyboard-interactive, kā aprakstīts šajā nodarbībā, un pēc tam ļaujiet programmai pārbaudīt no ārpuses. Ievadiet sava servera IP adresi vai resursdatora nosaukumu, SSH portu (pēc noklusējuma 22) un lietotājvārdu, ar kuru paši piesakāties (piemēram, anna, nevis root vai izdomātu vārdu). Programma nepiesakās: tā tikai jautā, tāpat kā jebkurš SSH klients pirms pieteikšanās, kādas pieteikšanās metodes Jūsu serveris piedāvā šim lietotājam. Pareizs rezultāts: tikai publickey.
Vairāk lasīt
Šajos rakstos aprakstītie soļi attiecas uz WebOké VPS ekrānu; citiem pakalpojumu sniedzējiem tas darbojas līdzīgi.
- Jūsu VPS aizsardzība: pirmās piecas minūtes
- Vairs nav piekļuves Jūsu VPS: ko darīt tagad?
- Jūsu VPS momentuzņēmumi un rezerves kopijas
- sshd_config rokasgrāmata: 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
