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é.
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ú swap — free -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 upgradena produkčnom serveri môže trvať dlhšie, ak nebol updateovaný týždne/mesiace. Trpezlivosť.- Hostname vyber zmysluplne —
web-prod-1,db-staging, niekokos-blue(povedie ti to spomalí pri 10+ serveroch). - Timezone drž konzistentne naprieč servermi. Mix
UTCaEurope/Bratislavati 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í:
apt update && apt upgrade- Audit (OS, kernel, služby, porty, disk, RAM)
- Pýta sa na hostname a timezone (interaktívne)
- Vytvorí
/root/server-baseline.txt - 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 updateaktualizuje databázu balíkov,apt upgradeinš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.0— to je problém. Buď to zastav, alebo zmeň na127.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.txtako 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ť.