CH 2 · sudo-user

Sudo user — preč od root prihlasovania

🚧 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í.

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.

Praktická časť

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 - peter v 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:

  1. Pýta sa na meno a heslo nového používateľa
  2. Vytvorí ho cez adduser
  3. Pridá ho do sudo skupiny
  4. Otestuje, že sudo z nového účtu funguje
  5. 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.
  • adduser vytvára používateľa interaktívne. usermod -aG sudo ho pridá do sudo skupiny.
  • Vždy -aG (append), nie -G (replace). -G ti 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.

Skripty kapitoly
HLAVNÝ setup-sudo-user.sh
Pozri →