V predchádzajúcej kapitole si sa prihlasoval ako root. To je default,
ktorý ti dáva poskytovateľ pri kúpe VPS. Funguje to, ale je to
nesprávne z troch konkrétnych bezpečnostných dôvodov, ktoré preberieme
za chvíľu.
V tejto kapitole vytvoríš vlastného non-root používateľa s sudo
právami a budeš sa prihlasovať ako on. Root účet zostane existovať, ale
nikdy sa cezeň priamo neprihlasuješ.
Toto je príprava na ďalšie kapitoly — v CH 3 generuješ SSH kľúč pre tvoj non-root účet, v CH 4 vypneme priame root prihlasovanie cez SSH úplne. Aby to fungovalo, musíš najprv mať pripravený náhradný spôsob, ako sa na server dostať. Tu si ho vytvoríme.
Prečo to musíš spraviť
Prihlasovanie ako root priamo má tri konkrétne bezpečnostné problémy.
Po prvé, audit log nepovie nič. Keď sa pozrieš do /var/log/auth.log,
uvidíš stovky riadkov "root logged in", "root ran command X". To je
informačne nulové — ak na server pristupuje viacero ľudí, nevidíš,
kto čo urobil. Ak ti server kompromitujú, nevieš, kedy sa to stalo,
ako sa dostali dovnútra, alebo či to boli oni alebo ty kto pred
týždňom omylom zmazal niečo dôležité.
S sudo používateľom je audit log čistý: "peter logged in", "peter ran sudo apt upgrade". Forenzná analýza po incidente sa stáva možnou.
Po druhé, root je univerzálny terč. Botnety, ktoré skenujú servery,
vždy skúšajú prihlásenie ako root s rôznymi heslami. Je to najčastejšie
meno na svete. Ak útočník uhádne heslo k root, má celý server hneď.
Ak by uhádol heslo k tvojmu non-root účtu, dostane menej — bez sudo hesla
nemôže veľa pokaziť, a sudo mu poskytne ďalšiu vrstvu obrany.
Štatisticky: 90% pokusov o brute-force SSH login mieri na root. Premenovaním
sa svetom autentifikácie nevyhneš, ale odstrániš veľkú časť útokov len
tým, že root prihlasovanie zakážeš.
Po tretie, root errory sú katastrofické. Príkaz rm -rf /tmp/cache
ako bežný používateľ zmaže cache. Ako root, ak omylom napíšeš rm -rf / tmp/cache (medzera), zmaže ti celý filesystem. Nie je to teória
— stalo sa to aj veľkým firmám.
Sudo zavádza vedomé povolenie pred deštruktívnymi operáciami. Píšeš
sudo len keď to naozaj potrebuješ. Zvyšok času pracuješ ako bežný
používateľ a omyl má obmedzený dopad.
Important
Toto nie je o tom, či si dobrý alebo zlý admin. Ide o redukciu bezpečnostného rizika. Aj najlepší ľudia robia preklepy o tretej ráno. Sudo je systém, ktorý ťa pred tým chráni.
Koncepty, ktoré treba pochopiť
Čo je root, čo je sudo
root je špeciálny účet v Linuxe s UID 0. Môže urobiť čokoľvek
— meniť systémové súbory, mazať dáta iných používateľov, zastaviť
služby, reštartovať server. Bez obmedzení.
sudo (od "substitute user do") je nástroj, ktorý dovolí bežnému
používateľovi spustiť konkrétny príkaz s root právami. Vyžaduje
heslo bežného používateľa (nie root hesla). A každý sudo príkaz sa
logguje do /var/log/auth.log.
Sudo skupina
Linux používa skupiny na riadenie prístupu. Existuje skupina,
ktorej členovia môžu používať sudo:
- Na Debiane: skupina sa volá
sudo - Na Ubuntu: skupina sa volá
sudo(od 12.04+) - Na RHEL/Fedora/CentOS: skupina sa volá
wheel
Pridať používateľa do tejto skupiny znamená "tento používateľ môže volať sudo". To je všetko — žiadne čaro, žiadne ďalšie nastavenia.
NOPASSWD vs vyžadovanie hesla
Sudo má dve hlavné konfigurácie:
Predvolená (vyžaduje heslo) — keď voláš sudo prikaz, sudo sa
opýta tvoje používateľské heslo. To je vrstva bezpečnosti — aj keď
sa niekto dostane k tvojej shell session, bez hesla nemôže privilege
escalation.
NOPASSWD — sudo nepýta heslo. Pohodlnejšie, ale odstraňuje bezpečnostnú vrstvu. Pre osobný server sa neodporúča. Pre serverové automatizácie (CI/CD agenti, deployment skripty) má zmysel.
V tejto kapitole nastavíme default mode (s heslom).
Praktická časť
Túto časť budeš robiť v praktizačnom prostredí akadémie. Cvičný
server začína v stave, kde si prihlásený ako root (rovnako ako po
prvom prihlásení na nový VPS).
Note
Po dokončení tejto kapitoly nebudeš sa prihlasovať ako root.
Budeš sa prihlasovať ako tvoj nový non-root používateľ a pre
systémové úlohy použiješ sudo.
Praktizačné prostredie
Spustí izolovaný lab pre túto kapitolu.
Krok 0 — Kde sme
V termináli si prihlásený ako root@lab-server. Pozri si to:
whoami
id
Výstup:
root
uid=0(root) gid=0(root) groups=0(root)
uid=0 znamená root. Tvoja úloha je prestať tu byť.
Krok 1 — Vytvor nového používateľa
Vytvor používateľa s rozumným menom. Konvencia: krátke, malými písmenami,
bez špeciálnych znakov. Príklad: peter, admin, deploy. Nepoužívaj
mená typu root2, superuser, god — provokuješ útočníkov.
adduser peter
adduser (s rozšíreným menom — nie useradd) je interaktívny
príkaz. Pýta sa ťa:
- Password — zadaj silné heslo. Toto je heslo, ktoré budeš zadávať
pri
sudo. Zapamätaj si ho. - Full Name, Room Number, atď. — môžeš stlačiť Enter (preskočiť).
- Is the information correct? —
Y.
adduser automaticky:
- Vytvorí používateľa
peter - Vytvorí domovský adresár
/home/peter - Skopíruje default súbory (
.bashrc,.profile) - Vytvorí skupinu
peter(rovnaké meno ako používateľ)
Skontroluj:
id peter
Výstup by mal byť:
uid=1000(peter) gid=1000(peter) groups=1000(peter)
uid=1000 znamená "prvý bežný používateľ". Skupina peter (1000).
Žiadny sudo zatiaľ.
Krok 2 — Pridaj používateľa do sudo skupiny
Bez sudo skupiny by peter bol len obyčajný účet bez možnosti
robiť administrátorské úlohy. Pridaj ho:
usermod -aG sudo peter
usermod mení existujúceho používateľa. -aG sudo znamená "pridaj
ho do skupiny sudo, zachovaj všetky existujúce skupiny".
Caution
Zámerne -aG (append), nie -G (replace). Bez -a by si
používateľa odstránil zo všetkých ostatných skupín a nahradil ich
len skupinou sudo. To je častá chyba, ktorá rozbije používateľský
účet. Vždy -aG.
Skontroluj:
id peter
groups peter
Druhý príkaz vypíše skupiny, do ktorých peter patrí:
peter : peter sudo
Vidíš sudo v zozname. Hotovo.
Krok 3 — Otestuj sudo z nového účtu
Preber sa do nového účtu a otestuj sudo. Z root terminálu:
su - peter
su - peter znamená "preber sa do peter shell-u, načítaj jeho
prostredie (.bashrc, .profile, atď.)". Pomĺčka je dôležitá — bez nej
sa shell otvorí s prostredím root-a, čo je mätúce.
Tvoj prompt sa zmení na:
peter@lab-server:~$
Vidíš $ namiesto # — to znamená non-root shell. Spusti niečo, čo
vyžaduje root práva bez sudo:
apt update
Dostaneš chybu:
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
Bežný používateľ nemôže apt update. Skús cez sudo:
sudo apt update
Sudo sa ťa opýta:
[sudo] password for peter:
Zadaj peter heslo (nie root). Po overení príkaz prejde.
Tip
Sudo si pamätá overenie 15 minút (default). Ak v tomto okne spustíš
ďalší sudo prikaz, nepýta sa heslo znova. Po 15 minútach idle sa
pýta znova.
Krok 4 — Otestuj, že prihlásenie ako peter funguje
Toto je kritický krok. Predtým než urobíme čokoľvek ďalšie, musíš
overiť, že sa vieš prihlásiť ako peter z čerstvého SSH spojenia.
Najprv sa odhlás z peter shell-u (vrátiš sa do root):
exit
A potom z root shell-u otestuj SSH prihlásenie ako peter na ten istý server:
ssh peter@localhost
Server sa ťa opýta:
- "Are you sure you want to continue connecting" →
yes(akceptuj host key) - "peter@localhost's password" → zadaj peter heslo
Mal by si byť dnu ako peter@lab-server. Toto je dôkaz, že tvoj non-root
účet je plne funkčný pre SSH prihlásenie. Bez tohto kroku nepokračuj.
Important
Tento test je dôležitý, lebo v ďalších kapitolách (CH 3 SSH key,
CH 4 SSH hardening) budeme zakazovať priame root prihlasovanie cez
SSH. Ak by peter nefungoval a my vypneme root, zamkneš sa zo
servera von. Vždy najprv testujeme, potom zatvárame staré dvere.
Odhlás sa späť do root:
exit
Krok 5 — Aktualizuj baseline
V CH 1 si vytvoril /root/server-baseline.txt. Pridaj do neho informáciu
o novom používateľovi — bude to užitočné pri budúcom audite:
cat >> /root/server-baseline.txt << EOF
=== Sudo používateľ ===
Pridaný: $(date +%Y-%m-%d)
Meno: peter
UID: $(id -u peter)
Skupiny: $(groups peter | cut -d: -f2 | xargs)
EOF
Skontroluj:
tail -10 /root/server-baseline.txt
[Skontrolovať úspech] ← (validator button)
Bežné chyby a pasce
"User already exists" pri adduser
Niektorí poskytovatelia ti predinštalovali používateľa (ubuntu,
debian). adduser meno zlyhá. Buď použí iné meno, alebo si pozri
existujúceho používateľa:
cat /etc/passwd | grep -v nologin
A pridaj ho do sudo skupiny: usermod -aG sudo existujuci_user.
sudo: command not found po pridaní do skupiny
sudo balík nemusí byť nainštalovaný (málokedy na moderných image-och,
ale stáva sa):
apt install sudo
Sudo pýta heslo dvakrát alebo nepýta vôbec
Druhé sa stáva, keď tvoj používateľ má NOPASSWD direktívu v
/etc/sudoers.d/. Skontroluj:
sudo cat /etc/sudoers.d/* 2>/dev/null
Ak vidíš peter ALL=(ALL) NOPASSWD: ALL, niekto (alebo skript) to tam
pridal. Pre osobný server odporúčam odstrániť — bezpečnostne
zbytočne otvorené.
Stratíš heslo k novému používateľovi
Z root účtu (kým ho máš) môžeš resetovať:
passwd peter
Ak si stratil aj root prístup, je to vážnejšie — potrebuješ rescue mode poskytovateľa (preberáme v Level 2).
Keď to budeš robiť na vlastnom serveri
Postup je identický. Pripomienky pre reálny VPS:
- Meno používateľa — daj rozumné, krátke, podľa konvencie. Pre osobný
server tvoje meno alebo prezývka funguje fajn (
peter,mike). V tíme odporúčam meno-priezvisko (peter-novak). - Heslo — silné, jedinečné pre tento server. Použí password manager.
- Test prihlásenia z iného terminálu — pred pokračovaním k CH 3
alebo CH 4 sa naozaj prihlás cez novú SSH session ako tvoj
non-root user. Nie len
su - peterv existujúcej session.
Tip
Po dokončení Level 1 nájdeš v sekcii "Ďalšie kroky" sprievodcu výberom VPS poskytovateľa. Tu zatiaľ nemusíš nič kupovať.
Skript — všetko jedným príkazom
V sekcii "Skripty kapitoly" nižšie nájdeš setup-sudo-user.sh, ktorý
celý proces zautomatizuje. Skript:
- Pýta sa na meno a heslo nového používateľa
- Vytvorí ho cez
adduser - Pridá ho do
sudoskupiny - Otestuje, že
sudoz nového účtu funguje - Aktualizuje baseline (ak existuje)
Použitie na Ubuntu/Debian serveri (ako root):
curl -O https://vcs-akademia.net/script/level-1/sudo-user/setup-sudo-user.sh
bash setup-sudo-user.sh
Tip
Pozri si skript pred spustením cez "Pozri →". Predtým než dáš akémukoľvek skriptu root práva na tvoj server, prečítaj si ho.
Anti-patterns — čo NErobiť
"Pridaj NOPASSWD, aby sa sudo nepýtalo heslo, je to otravné."
Nie. Sudo heslo je vrstva bezpečnosti. Útočník, ktorý sa dostane do tvojej shell session (cez napríklad kompromitovaný terminál multiplexer alebo session hijacking), môže bez sudo hesla eskalovať na root. Sudo heslo ho zastaví. Otravnosť 15-minútového cache-u je akceptovateľná cena.
"Daj svojmu používateľovi UID 0, aby mal rovnaké práva ako root."
Nie. To z neho urobí druhý root účet. Stratíš celú výhodu sudo
auditu (logy ukážu uid=0, nie meno). Sudo skupina je správna cesta.
"Vytvor sudo používateľa, ale stále sa prihlasuj ako root, lebo je to zvyk."
Nie. Účel vytvorenia sudo používateľa je práve prestať používať root
priame prihlasovanie. V CH 4 to zakážeme cez sshd_config. Začni si
zvykať teraz.
"Použí useradd namiesto adduser, je to štandard."
useradd je nízkoúrovňový nástroj, ktorý vytvorí len používateľský
záznam — žiadny domov, žiadne default súbory, žiadne nič. adduser je
Debian/Ubuntu wrapper, ktorý urobí celý setup interaktívne. Pre
manuálne vytvorenie účtu na Debian/Ubuntu je adduser správny nástroj.
useradd je užitočný v skriptoch, kde chceš plnú kontrolu — ale tam
ho používaš s 5–7 flagmi.
Čo si zapamätať
- Root login je bezpečnostné riziko z troch dôvodov: žiadny audit trail, univerzálny terč pre botnety, väčší dopad chýb.
- Sudo je nástroj na kontrolované zvýšenie práv — pýta heslo, loguje akciu, dáva root práva len pre konkrétny príkaz.
adduservytvára používateľa interaktívne.usermod -aG sudoho pridá do sudo skupiny.- Vždy
-aG(append), nie-G(replace).-Gti zničí všetky ostatné skupiny. - Otestuj prihlásenie ako non-root v novej SSH session predtým, než v CH 4 zakážeš root SSH.
- Vystavený root účet = väčšina brute-force pokusov na svete. Sudo používateľ = menej zaujímavý cieľ.
Ďalej
V ďalšej kapitole (CH 3 — SSH key authentication) sa naučíš prihlasovať pomocou SSH kľúča namiesto hesla. Generuješ kľúč na svojom počítači, kopíruješ verejnú časť na server pre nového non-root používateľa (nie root) a testuješ.
Po CH 3 budeš mať na serveri non-root účet s SSH kľúčom — pripravené pre CH 4, kde zakážeme priame prihlasovanie ako root úplne.
Predtým než pokračuješ, spusti praktizačné prostredie ešte raz a
over, že si robil všetko správne — vyskúšaj sa prihlásiť ako peter
v novej SSH session a urob aspoň jeden sudo príkaz.