Prejsť na obsah

Nastavenia súborov cookie

Vyberte, aké druhy súborov cookie povolíte. Svoj výber môžete kedykoľvek zmeniť cez Nastavenia súborov cookie v dolnej časti každej stránky. Vyhlásenie o ochrane osobných údajov

Nevyhnutné

Vždy zapnuté

Potrebné na prihlásenie, uchovanie košíka a zapamätanie vašich volieb. Sú vždy zapnuté.

Ktoré súbory cookie?
  • weboke_sessie, weboke_klant, weboke_remember: vaša relácia a trvalé prihlásenie
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazovanie cien s DPH alebo bez DPH
  • wok_cookies: váš výber súborov cookie, 12 mesiacov

Merajú, ktorá reklama vedie k návšteve alebo objednávke, aby sme neplatili za reklamy, ktoré nič neprinášajú.

Ktoré súbory cookie?
  • Google Ads cez Google Tag Manager (_gcl_au, _gcl_aw), najviac 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: ktorý partner vás k nám odporučil (partnerský program), 60 dní

4,6

Krajina a jazyk

Každá krajina má vlastný web s cenami a DPH danej krajiny.

Zobraziť

Bezpečné nastavenie SSH servera

Modul 2: SSH a kľúče · Čas čítania: 12 minút

Cieľ lekcie: Po tejto lekcii dokážete vypnúť prihlasovanie heslom a prihlasovanie roota heslom, overiť, ktoré nastavenie skutočne platí, a urobiť to tak, aby ste si nezablokovali prístup.

Kľúčové pojmy: sshd, sshd_config, sshd_config.d, platí prvá hodnota, PasswordAuthentication, KbdInteractiveAuthentication, PermitRootLogin, AuthenticationMethods, AllowUsers, sshd -t, sshd -T, druhá relácia, cloud-init, ssh.socket

Najprv záchranná sieť

Táto lekcia zatvára dvere, ktorými musíte prechádzať aj vy sami. Jeden preklep môže znamenať, že sa už neprihlásite. Preto vždy predtým, ako začnete:

  1. Dva kľúče fungujú (lekcia 2.1) a v novom okne ste overili, že prihlásenie kľúčom funguje.
  2. Snapshot vášho VPS. Vo WebOké ho vytvoríte na obrazovke VPS, u iných poskytovateľov sa tiež volá snapshot alebo image. Ak sa niečo pokazí, obnovíte ho.
  3. Konzolu svojho poskytovateľa poznáte: cez ňu sa dostanete dnu bez SSH.
  4. Vaša aktuálna SSH relácia zostáva otvorená až do konca. Bežiaca relácia funguje ďalej, aj keď zmeníte nastavenia alebo službu znovu načítate. Každú zmenu otestujte v druhom okne.

Kde sú nastavenia uložené

SSH server sa volá sshd. Jeho nastavenia sú v /etc/ssh/sshd_config. Na Debiane a Ubuntu je na začiatku tohto súboru tento riadok:

Include /etc/ssh/sshd_config.d/*.conf

Všetky súbory s .conf v priečinku sshd_config.d sa teda načítajú pred zvyškom hlavného súboru, v abecednom poradí. To je praktické: vlastné nastavenia zapíšete do vlastného súboru a hlavný súbor necháte tak, takže aktualizácia balíka vaše zmeny neprepíše.

Má to však dôsledok, ktorý mnohých prekvapí. V sshd_config platí: pre každé nastavenie sa použije prvá hodnota, na ktorú sshd narazí. Neskoršie riadky s rovnakým nastavením sa ignorujú. Kto na koniec sshd_config zapíše PasswordAuthentication no, teda neprebije súbor v sshd_config.d, ktorý hovorí yes.

Pasca cloud-init

Mnohé VPS image pri prvom spustení nastavuje cloud-init. V závislosti od toho, ako sú image a inštalácia nastavené, vytvorí cloud-init súbor ako /etc/ssh/sshd_config.d/50-cloud-init.conf, v ktorom je napríklad:

PasswordAuthentication yes

Keďže sa tento súbor načíta skôr ako hlavný súbor, prihlasovanie heslom zostane zapnuté, nech do sshd_config zapíšete čokoľvek. Nič teda nepredpokladajte, ale overte to:

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 yes

Existujú dve čisté riešenia: upravte tento súbor na no, alebo zapíšte vlastné nastavenia do súboru, ktorý je v abecede skôr, napríklad 00-beveiliging.conf. Súbor 99-mijn.conf naopak nefunguje, pretože vtedy už cloud-init vyhral.

Nastavenia, na ktorých záleží

Vytvorte vlastný súbor:

root@web1:~# nano /etc/ssh/sshd_config.d/00-beveiliging.conf

s týmto obsahom:

# Prihlásenie iba pomocou kľúča
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password

Čo znamená každý riadok?

  • PasswordAuthentication no: server už neprijme heslo. Predvolená hodnota OpenSSH je yes.
  • KbdInteractiveAuthentication no: "keyboard-interactive" je druhý spôsob, ako si vypýtať heslo, a to cez PAM. Ak ho necháte zapnutý, niekto môže heslo skúšať aj naďalej, aj keď je PasswordAuthentication nastavené na no. V starších návodoch sa toto nastavenie volá ChallengeResponseAuthentication; od OpenSSH 8.7 je to zastaraný iný názov pre to isté. Debian ho štandardne nastavuje na no, napriek tomu ho tam zapíšte: je to prehľadné a platí to aj na iných systémoch.
  • PermitRootLogin prohibit-password: root sa môže prihlásiť, ale iba kľúčom. Od OpenSSH 7.0 je to predvolené nastavenie. Prísnejšie je PermitRootLogin no: root sa cez SSH nedostane dnu vôbec, prihlasujete sa ako bežný používateľ a používate sudo (lekcia 3.2). no nastavte až vtedy, keď máte istotu, že prihlásenie ako tento používateľ a sudo fungujú.

Voliteľne, pre tých, ktorí chcú viac:

AllowUsers anna
AuthenticationMethods publickey

AllowUsers pustí dnu iba uvedených používateľov; každé iné meno je odmietnuté, aj keď má platný kľúč. Je to praktické, ale nezabudnite na seba a nezabudnite zoznam doplniť, keď pridáte druhého správcu. AuthenticationMethods publickey jedným riadkom určuje, že platia iba kľúče.

Testovanie, použitie, kontrola

Najprv nechajte sshd súbor skontrolovať. Nič sa tým nespúšťa ani nemení:

root@web1:~# sshd -t
root@web1:~#

Žiadny výstup znamená: žiadne chyby. Pri preklepe uvidíte riadok a súbor. Až potom službu znovu načítajte:

root@web1:~# systemctl reload ssh

Na Debiane a Ubuntu sa služba volá ssh, na AlmaLinux a Rocky Linux sshd.

Potom overte, ktorá hodnota skutočne platí. sshd -T zobrazí úplnú, vyhodnotenú konfiguráciu so spracovanými všetkými súbormi z Include:

root@web1:~# sshd -T | grep -Ei 'passwordauth|kbdinteractive|permitrootlogin'
permitrootlogin without-password
passwordauthentication no
kbdinteractiveauthentication no

(without-password je starý názov pre prohibit-password. Verzie OpenSSH pred 10.1, napríklad na Debiane 13 a Ubuntu 24.04, ešte zobrazujú starý názov; novšie zobrazujú prohibit-password. Znamená to to isté.)

A teraz to najdôležitejšie: testujte v druhom okne, kým prvé zostáva otvorené.

anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$

Ak to funguje, skúste sa zámerne prihlásiť heslom. Toto musí zlyhať:

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 zátvorkách uvedené, ktoré metódy prihlásenia server ešte ponúka. Ak je tam iba publickey, je to v poriadku. Ak je tam aj password alebo keyboard-interactive, niekde ešte platí iná hodnota: skontrolujte to znova pomocou sshd -T.

Presne tento zoznam kontroluje zvonku aj úloha kurzu. Váš SSH klient sa pri každom spojení najprv opýta, ktoré metódy sú povolené, a to požiadavkou typu "none". Server odpovie zoznamom bez toho, aby sa skúšalo heslo alebo kľúč.

Ubuntu 24.04 a novšie: ssh.socket

Na Ubuntu od verzie 22.10 nepočúva na porte 22 samotný sshd, ale systemd, prostredníctvom ssh.socket. Až keď príde spojenie, systemd spustí službu SSH. Pre nastavenia v tejto lekcii to nehrá rolu: systemctl reload ssh alebo restart ssh stačí.

Rolu to však hrá, keď meníte port alebo adresu počúvania (Port, ListenAddress). Od Ubuntu 24.04 číta systemd tieto hodnoty z sshd_config, ale iba po:

root@web1:~# systemctl daemon-reload
root@web1:~# systemctl restart ssh.socket

Ak na to zabudnete, server bude naďalej počúvať na starom porte. Horšie je toto: ak najprv nastavíte firewall na nový port a SSH zostane na starom, zablokujete si prístup. Vždy overte pomocou ss -tlnp | grep ssh, kde sa skutočne počúva (lekcia 5.1), a nový port povoľte vo firewalle skôr, ako zatvoríte starý. Či má iný port zmysel, sa dočítate v lekcii 2.3.

Ak sa niečo napriek tomu pokazí

Ak sa už nedostanete dnu, otvorte konzolu svojho poskytovateľa, prihláste sa ako root (heslom, pretože konzola je "klávesnica pripojená k serveru", nie SSH) a vráťte svoj súbor späť:

root@web1:~# mv /etc/ssh/sshd_config.d/00-beveiliging.conf /root/
root@web1:~# systemctl reload ssh

Ak nepomôže ani to, obnovte snapshot. Vo WebOké môžete na obrazovke VPS nastaviť aj nové heslo pre roota; iní poskytovatelia mávajú podobné tlačidlo alebo záchranný režim (rescue).

Na AlmaLinux a Rocky Linux

Služba sa volá sshd (systemctl reload sshd). Aj tam je na začiatku Include /etc/ssh/sshd_config.d/*.conf a systém do tohto priečinka dodáva vlastné súbory; platí rovnaké pravidlo "platí prvá hodnota". Ak meníte port, musí ho povoliť aj SELinux (semanage port -a -t ssh_port_t -p tcp 2222) a firewalld ho musí otvoriť.

Zhrnutie

  • V sshd_config platí prvá hodnota; súbory v sshd_config.d sa načítajú ako prvé. Vlastné nastavenia zapíšte do súboru ako 00-beveiliging.conf.
  • Nastavte PasswordAuthentication no aj KbdInteractiveAuthentication no; root iba s kľúčom (prohibit-password) alebo vôbec (no).
  • Pred opätovným načítaním skontrolujte konfiguráciu pomocou sshd -t a pomocou sshd -T overte, ktorá hodnota skutočne platí; pozor na 50-cloud-init.conf.
  • Testujte v druhom okne a prvú reláciu nechajte otvorenú. Poznajte konzolu a vopred si vytvorte snapshot.
  • Na Ubuntu 24.04+ si iný port vyžaduje systemctl daemon-reload a systemctl restart ssh.socket.

Kvíz

1. Na konci /etc/ssh/sshd_config je PasswordAuthentication no, no stále sa dá prihlásiť heslom. Čo je najpravdepodobnejšia príčina?



2. Prečo popri PasswordAuthentication no nastavujete aj KbdInteractiveAuthentication no?



3. Čo znamená PermitRootLogin prohibit-password?



4. V akom poradí postupujete najbezpečnejšie?



5. Na Ubuntu 24.04 zmeníte riadok Port 22 na Port 2222 a spustíte systemctl restart ssh. Pomocou ss -tlnp vidíte, že sa stále počúva na porte 22. Na čo ste zabudli?



Úloha

Úloha Z2.2: Prihlasovanie heslom je vypnuté. Vypnite prihlasovanie heslom a keyboard-interactive tak, ako je opísané v tejto lekcii, a potom nechajte program skontrolovať server zvonku. Zadajte IP adresu alebo názov hostiteľa vášho servera, SSH port (štandardne 22) a používateľské meno, ktorým sa sami prihlasujete (napríklad anna, nie root ani vymyslené meno). Program sa neprihlasuje: iba sa opýta, ako každý SSH klient pred prihlásením, ktoré metódy prihlásenia váš server pre daného používateľa ponúka. Správny výsledok je: iba publickey.

Úloha Z2.2: Prihlasovanie heslom je vypnuté

Neprihlasujeme sa a neskúšame žiadne heslo ani kľúč. Najprv preukážte, že server patrí vám: kliknite na „Zobraziť môj kód“ a na webový server vášho názvu hostiteľa umiestnite súbor /.well-known/weboke-cursus-<code>.txt, ktorý obsahuje iba tento kód. Súbor načítame priamo z každej IP adresy, ktorú kontrolujeme (IPv4 a IPv6 zvlášť); záznam TXT sa tu nepočíta. Kontrola prichádza z heavy.webawere.nl (185.158.167.16 a 2a07:ae80:100:0:185:158:167:16), nie z nášho webového servera. Iba pre prihlásených účastníkov kurzu; na jeden server najviac 6 kontrol za hodinu. Zisťujeme iba to, aké metódy prihlásenia váš server ponúka pre vaše používateľské meno, tak ako to pred prihlásením robí každý klient SSH. Zadajte vlastného používateľa: neznáme meno sa vo vašom logu objaví ako „Invalid user“ (neplatný používateľ) a fail2ban ho započíta ako jeden pokus.





Čo vyplníte a čo nájdeme, neukladáme. Váš prehliadač si pamätá vaše odpovede a to, či ste úlohu splnili. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že úloha bola (takmer) správne vyriešená; aj to tam môžete odstrániť.

Ďalšie čítanie

Postupy v týchto článkoch platia pre obrazovku VPS vo WebOké; u iných poskytovateľov to funguje podobne.

Chvíľu strpenia…

Nastavte svoje domény

Pri každej doméne nastavte nameservery, prepojenie s hostingom a to, kto bude jej vlastníkom.

Načítavajú sa vaše domény…