CH 1 · system-update

Prvý kontakt — audit a housekeeping

🚧 Obsah pripravujeme. Stránka kapitoly existuje, ale plný obsah ešte nie je publikovaný. Pridaj sa na waitlist a dáme ti vedieť pri publikovaní.

Práve si si kúpil VPS. Prišiel email s IP adresou, používateľom a heslom. Prihlásil si sa cez SSH, vidíš čierny terminál a blikajúci kurzor.

A teraz čo?

Väčšina začiatočníkov urobí jednu z dvoch chýb. Buď začnú rovno inštalovať veci (nginx, Node.js, Docker), bez toho, aby vedeli, čo už na serveri je. Alebo prepadnú paralýze z neistoty a server hodiny zízajú bez toho, aby spravili čokoľvek.

V tejto kapitole sa naučíš systematicky prevziať kontrolu nad novým serverom — zistiť, čo máš, dať to do známeho stavu, a vytvoriť si referenčný dokument, ku ktorému sa budeš vracať v ďalších kapitolách.

Prečo to musíš spraviť

Server od poskytovateľa nikdy nie je v takom stave, v akom myslíš. Konkrétne tri problémy:

Po prvé, balíky sú staré. Image, z ktorého ti poskytovateľ vytvoril server, bol možno vytvorený pred týždňom, mesiacom, alebo aj rokom. Medzitým vyšli bezpečnostné updaty, ktoré tvoj server nemá. Botnety to vedia — skenujú servery so známymi zraniteľnosťami a vedia presne, ktoré verzie balíkov sú napadnuteľné.

Po druhé, neviete, čo už beží. Niektorí poskytovatelia predinštalovali "užitočné" veci — webhosting panel, monitoring agent, niekedy aj veci, ktoré počúvajú na verejných portoch s prednastavenými heslami. Bez auditu to nezistíš, kým sa neudeje incident.

Po tretie, nemáš referenčný bod. O dva týždne sa ti niečo pokazí. Bude užitočné vedieť, ako server vyzeral, keď bol čerstvý — aké balíky, aké procesy, aká konfigurácia. Tento dokument si vytvoríš teraz.

Important

Toto je najmenej "zaujímavá" kapitola Level 1 — žiadne tajné techniky, žiadne útoky, len disciplinovaný štart. Ale práve tu sa rozhoduje, či budeš mať server pod kontrolou, alebo či ho budeš o pol roka znovu inštalovať od nuly, lebo "už nevieš, čo je tam zlé".

Koncepty, ktoré treba pochopiť

apt update vs apt upgrade

Toto sú dva rôzne príkazy a ľudia ich pletú.

apt update — stiahne zoznam dostupných balíkov a ich verzií zo serverov poskytovateľa. Nič neinštaluje. Len aktualizuje databázu typu "toto sú teraz dostupné verzie".

apt upgrade — nainštaluje nové verzie balíkov, ktoré už máš nainštalované. Spolieha sa na databázu, ktorú aktualizoval apt update.

Preto sa typicky spúšťajú za sebou:

apt update && apt upgrade -y

Bez apt update sa apt upgrade spoľahne na starú databázu a môže ti povedať "všetko je aktuálne", hoci v skutočnosti vyšli updaty, o ktorých nevie.

Bezpečnostné updaty vs feature updaty

Na Ubuntu/Debian existujú dva typy updateov:

Bezpečnostné updaty — opravujú konkrétne CVE (Common Vulnerabilities and Exposures), čiže známe zraniteľnosti. Tie chceš vždy a hneď.

Feature updaty — nové verzie aplikácií, ktoré pridávajú funkcionalitu. Niekedy môžu zmeniť správanie, na ktoré sa spoliehaš. Pre produkčný server sú voliteľné, pre nový server na začiatok ich dáme tiež.

apt upgrade aplikuje oboje.

Audit baseline

Baseline je "snapshot stavu servera v jednom konkrétnom momente". V našom prípade to bude jeden textový súbor /root/server-baseline.txt, v ktorom budeš mať:

  • OS a kernel verzia
  • Beziace služby
  • Otvorené porty
  • Nainštalované balíky
  • Hostname, timezone, locale

Na čo to je? Keď ti o mesiac niekto povie "prečo počúva na porte 3306?", otvoríš baseline a vidíš — "áno, MySQL bol predinštalovaný od day 1", alebo "nie, toto je nové, niekto to pridal — preveriť".

Praktická časť

Túto časť budeš robiť v praktizačnom prostredí akadémie. V prehliadači sa otvorí cvičný server, ktorý simuluje "čerstvo kúpený VPS" — s pár neaktualizovanými balíkmi a default konfiguráciou, aby si videl, čo auditujeme.

Note

Praktizačné prostredie ti simuluje reálny scenár prvého prihlásenia. Server vidíš tak, ako by si ho videl pri prvom SSH pripojení na svoj nový VPS. Príkazy, ktoré sa tu naučíš, sú identické.

Praktická časť

Praktizačné prostredie

Spustí izolovaný lab pre túto kapitolu.

Krok 0 — Privítací email a prvé prihlásenie

Predstav si, že si si práve kúpil VPS na OVH/Hetzner/DigitalOcean. Prišiel ti email v tomto duchu:

Hello!
Your new VPS is ready.

IP:       203.0.113.45
Username: root
Password: Kx9pQ2nM4vRf8jL1

Login: ssh [email protected]

V praktizačnom prostredí vidíš jeden terminál pripojený na cvičný server (root@lab-server). Vidíš čierny prompt:

root@lab-server:~#

Si v. Teraz potrebuješ zistiť, čo tu vlastne máš.

Krok 1 — Survey: čo tu vlastne mám?

Predtým ako čokoľvek meníš, najprv si pozri, čo tu je. Začni týmito príkazmi:

# Aký OS a verzia?
lsb_release -a

# Aký kernel?
uname -r

# Aká architektúra? (x86_64, arm64, ...)
uname -m

# Hostname a domain
hostnamectl

Príklad výstupu, ktorý uvidíš:

Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble

6.8.0-31-generic
x86_64

   Static hostname: lab-server
         Icon name: computer-vm
        Machine ID: 8f3c1...
           Boot ID: a4e2b...
  Operating System: Ubuntu 24.04 LTS
            Kernel: Linux 6.8.0-31-generic
      Architecture: x86_64

Toto je základný odtlačok servera — vieš, čo máš pod rukou.

Ďalej — čo už beží?

# Aktívne služby (systemd units v stave "running")
systemctl list-units --type=service --state=running

# Otvorené porty (čo počúva, na čom porte, čí proces)
ss -tlnp

ss -tlnp ti ukáže niečo ako:

State    Local Address:Port    Process
LISTEN   0.0.0.0:22           sshd
LISTEN   127.0.0.1:5432       postgres
LISTEN   0.0.0.0:80           nginx

Toto je momentálne najdôležitejší výstup. Tu sa dozvieš, že poskytovateľ predinštaloval nginx a postgres, a oboje počúva. Vedel si to? Pravdepodobne nie.

Tip

Rozlišuj 0.0.0.0:port (počúva na všetkých sieťových rozhraniach, čiže aj na verejnej IP) vs 127.0.0.1:port (počúva len lokálne). Prvé je potenciálne vystavené internetu, druhé nie.

Krok 2 — Update systému

Teraz update. Najprv aktualizuj databázu balíkov:

apt update

Uvidíš výstup typu:

Hit:1 http://archive.ubuntu.com/ubuntu noble InRelease
Get:2 http://security.ubuntu.com/ubuntu noble-security InRelease [126 kB]
...
Reading package lists... Done

42 packages can be upgraded. Run 'apt list --upgradable' to see them.

42 balíkov sa dá aktualizovať. Pozri si, ktoré to sú:

apt list --upgradable

Teraz nainštaluj updaty:

apt upgrade -y

-y automaticky odpovedá "áno" na otázky. V produkcii by si to možno nedával (chceš vidieť, čo sa mení), pri prvom setupe je to OK.

Update môže trvať pár minút. Sleduj výstup — uvidíš, ktoré balíky sa aktualizujú.

Caution

Ak ti apt upgrade ponúkne reštart servera alebo reload služieb, odsúhlas. Servery, ktoré nereštartnú po kernel update, bežia so starou verziou, hoci v apt je uvedené, že je update aplikovaný.

Krok 3 — Housekeeping: hostname, timezone, locale

Teraz nastav základné parametre servera.

Hostname je meno, podľa ktorého spoznávaš svoj server. Default hostname od poskytovateľa býva niečo ako ubuntu alebo vps-123abc. Daj mu zmysluplné meno:

hostnamectl set-hostname moj-prvy-server

Reštart nepotrebuješ — zmena je okamžitá. Otvor nový terminál a uvidíš nový hostname v prompte. (V tejto session ho uvidíš až po bash alebo exit + nové prihlásenie.)

Timezone — server od poskytovateľa býva v UTC. To je v poriadku pre produkciu (logy v jednom timezone naprieč servermi), ale ty by si mal vedieť, v akom čase server žije:

# Zisti aktuálny timezone
timedatectl

# Nastavenie (príklad pre Slovensko)
timedatectl set-timezone Europe/Bratislava

# Alebo UTC, ak chceš
timedatectl set-timezone UTC

Tip

Pre produkčné servery je UTC často lepšia voľba — logy z viacerých serverov v rôznych krajinách sa potom dajú porovnávať bez prepočítavania. Pre osobný server, kde sa pozeráš na logy ručne, je domáci timezone intuitívnejší.

Locale — určuje jazyk a formát čísel/dátumov. Default býva en_US.UTF-8, čo je v poriadku pre väčšinu prípadov. Skontroluj:

locale

Ak by ti vadili anglické chybové hlášky, môžeš to zmeniť, ale odporúčam nechať en_US.UTF-8 — chybové hlášky v angličtine sa lepšie hľadajú na internete a v dokumentácii.

Time sync — zariaď, aby server mal správny čas. Bez správneho času zlyhávajú TLS certifikáty, logy sú nečitateľné, niektoré skripty robia divné veci:

# Skontroluj, či NTP sync beží
timedatectl

# Hľadaj "System clock synchronized: yes"

Na moderných Ubuntu/Debian systémoch beží systemd-timesyncd automaticky. Ak by tam bolo no, zapni ho:

timedatectl set-ntp true

Krok 4 — Disk, RAM, swap

Posledná časť auditu — koľko prostriedkov máš:

# Disk
df -h

# RAM a swap
free -h

# CPU info
lscpu | head -10

Príklad výstupu pre df -h:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G  4.2G   45G   9% /
tmpfs           1.9G     0  1.9G   0% /dev/shm

Vidíš, koľko miesta máš celkovo (Size), koľko sa už používa (Used) a koľko zostáva (Avail).

Note

Niektorí lacní VPS poskytovatelia neposkytujú swapfree -h ti ukáže Swap: 0B 0B 0B. Pre malé servery (1–2 GB RAM) je swap užitočný ako poistka proti OOM kill-u. V Level 1 to ešte neriešime, ale dobré o tom vedieť pre Level 2+.

Krok 5 — Vytvor baseline dokument

Teraz to všetko zhrň do jedného súboru, ktorý bude referencia pre budúcnosť:

cat > /root/server-baseline.txt << 'EOF'
=== Server Baseline ===
Dátum: $(date +%Y-%m-%d)
EOF

# Pridaj výstupy
echo "" >> /root/server-baseline.txt
echo "=== OS ===" >> /root/server-baseline.txt
lsb_release -a 2>/dev/null >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== Kernel ===" >> /root/server-baseline.txt
uname -a >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== Hostname ===" >> /root/server-baseline.txt
hostnamectl >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== Aktívne služby ===" >> /root/server-baseline.txt
systemctl list-units --type=service --state=running >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== Otvorené porty ===" >> /root/server-baseline.txt
ss -tlnp >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== Disk ===" >> /root/server-baseline.txt
df -h >> /root/server-baseline.txt

echo "" >> /root/server-baseline.txt
echo "=== RAM/Swap ===" >> /root/server-baseline.txt
free -h >> /root/server-baseline.txt

Pozri si výsledok:

cat /root/server-baseline.txt

Tento súbor zostane na serveri navždy. V ďalších kapitolách budeš robiť zmeny — pridávať používateľa, zapínať firewall, meniť SSH konfiguráciu. Vždy, keď sa server dostane do "stabilného nového stavu", môžeš spustiť rovnaký skript a vytvoriť nový snapshot (napríklad server-baseline-2026-05-12.txt), ktorý porovnáš s pôvodným.

[Skontrolovať úspech] ← (validator button)

Bežné chyby a pasce

apt upgrade zlyhá kvôli "dpkg interrupted"

Niekedy sa stane, že predchádzajúci apt proces bol prerušený a zostala "špinavá" databáza. Riešenie:

dpkg --configure -a
apt update
apt upgrade -y

Server po apt upgrade zostal "visieť"

Niektoré updaty (kernel, libc) vyžadujú reštart, aby sa prejavili. Ak apt upgrade ukončil s *** System restart required ***, urob:

reboot

A o 30 sekúnd sa znova prihlás.

systemctl list-units nezobrazuje očakávané služby

Bez --all a bez špecifikácie --state zobrazí systemctl len aktívne služby. Ak chceš vidieť všetky, vrátane neaktívnych:

systemctl list-units --all

Hostname sa zmenil, ale v prompte zostáva starý

Aktuálna shell session má starý hostname v premennej $HOSTNAME. Buď sa znova prihlás, alebo spusti exec bash (znova nahodí shell).

Keď to budeš robiť na vlastnom serveri

Postup je identický s tým, čo si práve absolvoval. Jediný rozdiel je v tom, že namiesto root@lab-server budeš pracovať na root@TVOJA_IP.

Pár pripomienok pre reálny VPS:

  • apt upgrade na produkčnom serveri môže trvať dlhšie, ak nebol updateovaný týždne/mesiace. Trpezlivosť.
  • Hostname vyber zmysluplne — web-prod-1, db-staging, nie kokos-blue (povedie ti to spomalí pri 10+ serveroch).
  • Timezone drž konzistentne naprieč servermi. Mix UTC a Europe/Bratislava ti pri ladení logov zničí deň.
  • Baseline dokument zálohuj — keď server stratíš (disaster recovery), je to dôkaz, aký mal byť.

Tip

Po dokončení Level 1 nájdeš v sekcii "Ďalšie kroky" sprievodcu výberom VPS poskytovateľa, ktorý sedí pre tvoje potreby. Tu zatiaľ nemusíš nič kupovať.

Skript — všetko jedným príkazom

Ručný postup z praktickej časti si urobil krok za krokom, aby si pochopil, čo a prečo robíš. Na svojom reálnom serveri to ale nemusíš robiť ručne — v sekcii "Skripty kapitoly" nižšie nájdeš setup-first-survey.sh, ktorý celý flow zautomatizuje.

Skript urobí:

  1. apt update && apt upgrade
  2. Audit (OS, kernel, služby, porty, disk, RAM)
  3. Pýta sa na hostname a timezone (interaktívne)
  4. Vytvorí /root/server-baseline.txt
  5. Vypíše súhrn

Použitie na Ubuntu/Debian serveri:

curl -O https://vcs-akademia.net/script/level-1/system-update/setup-first-survey.sh
bash setup-first-survey.sh

Tip

Pozri si skript pred spustením cez "Pozri →" pri skripte nižšie. Audit before run je dobrá hygiena pre každý skript z internetu.

Anti-patterns — čo NErobiť

"Spusti apt dist-upgrade na novom serveri, je to dôkladnejšie."

Nie. dist-upgrade môže odstraňovať balíky, ktoré sú v konflikte s novými verziami, alebo meniť závislosti spôsobom, ktorý ti rozbije aplikácie. Na nový server stačí apt upgrade. dist-upgrade je pre pokročilé scenáre, ktoré preberieš neskôr.

"Spusti do-release-upgrade aby si mal najnovšiu Ubuntu verziu."

Nie. do-release-upgrade urobí major version upgrade (napríklad z Ubuntu 22.04 na 24.04). Na novom serveri od poskytovateľa to nepotrebuješ — už máš LTS verziu. A pri produkčnom serveri sa tomu treba vyhýbať bez plánu a zálohy (môže to rozbiť aplikácie, ktoré závisia od starých verzií knižníc).

"Nainštaluj unattended-upgrades a zabudni na updaty navždy."

Toto je vlastne dobrá vec, ale nie na začiatku. unattended-upgrades preberieme v kapitole 7. Najprv sa nauč ručne, potom automatizuj.

"Audit baseline je strata času, je to len papierovanie."

Nie. V momente, keď nastane incident (server sa správa divne, niečo počúva na neznámom porte, niekto sa dostane dovnútra), je baseline jediný spôsob, ako vedieť, čo bolo normálne a čo je nové. Bez neho hraješ s útočníkom hru "je toto tu vždy alebo nie?" a prehráš.

Čo si zapamätať

  • apt update aktualizuje databázu balíkov, apt upgrade inštaluje updaty. Vždy spolu, v tomto poradí.
  • Predtým než niečo meníš, najprv si pozri, čo máš: OS, kernel, služby, porty, disk, RAM. Audit pred zmenou.
  • Otvorené porty ti hovoria, čo môže útočník vidieť zvonku. Pozri ich vždy na novom serveri cez ss -tlnp.
  • 0.0.0.0:port = služba počúva na verejnej IP a je dostupná komukoľvek z internetu. To je riziko — botnety to skenujú, snažia sa zneužiť známe zraniteľnosti a hádať heslá. Vystavená by mala byť len služba, ktorá tam má byť (typicky SSH, neskôr web).
  • 127.0.0.1:port = služba počúva len lokálne, z internetu sa k nej nikto nedostane. Bezpečné a odporúčané pre všetko, čo nemá byť verejné (databázy, admin panely, interné API).
  • Ak vidíš na novom serveri databázu (MySQL, Postgres) alebo admin panel počúvať na 0.0.0.0to je problém. Buď to zastav, alebo zmeň na 127.0.0.1, alebo zakáž cez firewall (CH 5).
  • Nastav hostname, timezone a over NTP sync hneď na začiatku. Bez správneho času zlyhávajú TLS certifikáty a logy sú nečitateľné.
  • Vytvor /root/server-baseline.txt ako referenciu pre budúcnosť. V momente incidentu je to jediný spôsob, ako vedieť, čo bolo normálne.

Ďalej

V ďalšej kapitole (CH 2 — Sudo user) vytvoríme non-root používateľa s sudo právami. Prihlasovanie ako root priamo je bezpečnostný anti-pattern, ktorý opravíme. Toto je príprava na CH 3, kde vypneme prihlásenie heslom — tam už budeme používať non-root účet od začiatku.

Predtým než pokračuješ, spusti praktizačné prostredie ešte raz a over, že vieš zopakovať audit + update flow rýchlejšie. Toto je workflow, ktorý budeš robiť na každom novom serveri, ktorý kedy budeš mať.

Skripty kapitoly
HLAVNÝ setup-first-survey.sh
Pozri →
HLAVNÝ setup-system-update.sh
Pozri →