Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

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:

  1. Dva ključa delujeta (lekcija 2.1) in v novem oknu ste preverili, da prijava s ključem uspe.
  2. 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.
  3. Konzolo svojega ponudnika poznate: tam pridete noter brez SSH.
  4. 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/*.conf

Vse 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 yes

Ker 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 yes

Dve č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.conf

s to vsebino:

# Prijava samo s ključem
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin prohibit-password

Kaj 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 PasswordAuthentication nastavljeno na no. V starejših priročnikih se ta nastavitev imenuje ChallengeResponseAuthentication; od OpenSSH 8.7 je to zastarelo drugo ime za isto stvar. Debian jo privzeto že nastavi na no, 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). no nastavite šele, ko ste prepričani, da prijava kot ta uporabnik in sudo delujeta.

Neobvezno, za tiste, ki želijo več:

AllowUsers anna
AuthenticationMethods publickey

AllowUsers 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 ssh

Na 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 v sshd_config.d se preberejo najprej. Svoje nastavitve zapišite v datoteko, kot je 00-beveiliging.conf.
  • Nastavite PasswordAuthentication no in tudi KbdInteractiveAuthentication no; root samo s ključem (prohibit-password) ali sploh ne (no).
  • Pred ponovnim nalaganjem preverite z sshd -t, z sshd -T pa, katera vrednost dejansko velja; bodite pozorni na 50-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-reload in systemctl restart ssh.socket.

Kviz

1. Na dnu /etc/ssh/sshd_config je PasswordAuthentication no, vendar se še vedno lahko prijavite z geslom. Kaj je najverjetnejši vzrok?



2. Zakaj poleg PasswordAuthentication no nastavite tudi KbdInteractiveAuthentication no?



3. Kaj pomeni PermitRootLogin prohibit-password?



4. V kakšnem vrstnem redu delate najvarneje?



5. Na Ubuntu 24.04 spremenite vrstico Port 22 v Port 2222 in izvedete systemctl restart ssh. Z ss -tlnp vidite, da se še vedno posluša na 22. Na kaj ste pozabili?



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.

Naloga Z2.2: Prijava z geslom je izklopljena

Ne prijavimo se in ne preizkušamo nobenega gesla ali ključa. Najprej pokažete, da je strežnik Vaš: kliknite "Pokaži mojo kodo" in na spletni strežnik Vašega imena gostitelja postavite datoteko /.well-known/weboke-cursus-<code>.txt, ki vsebuje samo to kodo. Datoteko pridobimo neposredno z vsakega naslova IP, ki ga preverjamo (IPv4 in IPv6 ločeno); zapis TXT tu ne šteje. Preverjanje prihaja s heavy.webawere.nl (185.158.167.16 in 2a07:ae80:100:0:185:158:167:16), ne z našega spletnega strežnika. Samo za prijavljene udeležence tečaja; največ 6 preverjanj na uro na strežnik. Vprašamo samo, katere načine prijave Vaš strežnik ponuja za Vaše uporabniško ime, kot to pred prijavo stori vsak odjemalec SSH. Vpišite svojega uporabnika: neznano ime se v Vašem dnevniku pojavi kot "Invalid user" in pri fail2ban šteje kot en poskus.





Tega, kar vnesete, in tega, kar najdemo, ne shranjujemo. Vaš brskalnik si zapomni Vaše odgovore in to, ali ste nalogo opravili. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo (skoraj) pravilno opravili; tudi to lahko tam izbrišete.

Za nadaljnje branje

Koraki v teh člankih veljajo za zaslon VPS pri WebOké; pri drugih ponudnikih deluje podobno.

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…