Modul 3 · 3.2
sudo a minimálne práva
Modul 3: Používatelia, práva a sudo · Čas čítania: 11 minút
Cieľ lekcie: Po tejto lekcii budete vedieť pracovať ako bežný používateľ so sudo, bezpečne pridať správcu, meniť nastavenia sudo bez toho, aby ste si zablokovali prístup, a vysvetliť, prečo minimálne práva chránia váš server.
Kľúčové pojmy: sudo, skupina sudo, skupina wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, uzamknutie účtu root, log sudo, minimálne práva (least privilege), služobný používateľ
Prečo nepracovať jednoducho ako root?
Po inštalácii sa často prihlasujete ako root. Je to pohodlné: všetko je dovolené. No práve v tom je problém:
- Stačí jeden preklep.
rm -rf / home/anna/oud(všimnite si medzeru za prvou lomkou) ako root vymaže celý váš server. Ako bežný používateľ dostanete chybové hlásenie. - Všetko beží ako root. Skript, ktorý vložíte z internetu, program, ktorý testujete: všetko dostane plné práva.
- Žiadna stopa. Ak pracujú traja ľudia ako root, dodatočne nikto nevie, kto čo urobil.
- Root je meno, ktoré skúša každý útočník. Prihlasovanie ako root je lepšie úplne vypnúť (lekcia 2.2), no to sa dá až vtedy, keď máte inú cestu k správcovským právam.
Tou inou cestou je sudo: prihlásite sa pod vlastným účtom a iba pred príkaz, ktorý potrebuje správcovské práva, napíšete sudo.
anna@web1:~$ apt update
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
anna@web1:~$ sudo apt update
[sudo] password for anna:
Hit:1 http://deb.debian.org/debian trixie InRelease
...(Ubuntu od verzie 25.10 štandardne používa sudo-rs, novú implementáciu sudo. Pre všetko v tejto lekcii funguje rovnako.)
sudo žiada vaše heslo, nie heslo účtu root. Potom si ho štandardne pamätá štvrť hodiny, takže ho nemusíte zadávať pri každom príkaze. Každý príkaz, ktorý spustíte cez sudo, sa zapíše do logu.
Vytvorenie správcu
Na Debiane a Ubuntu smie každý člen skupiny sudo robiť cez sudo čokoľvek. Je to uvedené v /etc/sudoers:
%sudo ALL=(ALL:ALL) ALLČítajte to takto: členovia skupiny sudo (%) smú na všetkých strojoch (ALL) ako ktorýkoľvek používateľ a skupina ((ALL:ALL)) spustiť akýkoľvek príkaz (ALL).
Pridanie správcu teda prebieha v dvoch krokoch, ako root:
root@web1:~# adduser anna
root@web1:~# adduser anna sudoPotom vložte Annin verejný kľúč do /home/anna/.ssh/authorized_keys so správnym vlastníkom a právami:
root@web1:~# mkdir -p /home/anna/.ssh
root@web1:~# cp /root/.ssh/authorized_keys /home/anna/.ssh/
root@web1:~# chown -R anna:anna /home/anna/.ssh
root@web1:~# chmod 700 /home/anna/.ssh
root@web1:~# chmod 600 /home/anna/.ssh/authorized_keysNezabudnite na chown: ak súbor skopíruje root, patrí účtu root, a potom sa Anna nemôže prihlásiť svojím kľúčom.
Teraz, kým zostáva vaša relácia root otvorená, otestujte v druhom okne:
anna@laptop:~$ ssh anna@192.0.2.10
anna@web1:~$ sudo -l
[sudo] password for anna:
User anna may run the following commands on web1:
(ALL : ALL) ALL
anna@web1:~$ sudo whoami
rootAž keď to funguje, nastavte v nastaveniach SSH PermitRootLogin no (lekcia 2.2). Odvtedy sa vždy prihlasujete ako Anna.
Jednu vec si zapamätajte: Anna teraz potrebuje na sudo heslo. Uložte si ho do správcu hesiel. Prihlásenie prebieha kľúčom, sudo heslom: dve rôzne veci, ktoré musí mať útočník obe.
Zmena nastavení sudo: vždy cez visudo
Chyba v /etc/sudoers môže znamenať, že sudo prestane úplne fungovať. Ak sa nedá prihlásiť ani ako root, ste v slepej uličke. Preto nastavenia sudo nikdy neupravujte bežným editorom, ale pomocou visudo. Ten otvorí dočasnú kópiu a pred uložením skontroluje jej obsah:
root@web1:~# visudo -f /etc/sudoers.d/backupPodobne ako pri SSH radšej použite vlastný súbor v /etc/sudoers.d/ než hlavný súbor. Pri tomto priečinku dajte pozor na dve pravidlá:
- Súbory, ktorých názov obsahuje bodku alebo končí na
~, sa preskakujú.backup.confteda nefunguje,backupáno. Slúži to na ignorovanie kópií z editorov, no mnohých ľudí to prekvapí. - Súbor musí patriť účtu root a ostatní doň nesmú zapisovať (bežné je 440; visudo to zariadi).
Ak chcete existujúci súbor skontrolovať bez úprav: visudo -c skontroluje všetko.
NOPASSWD: praktické, ale vedzte, čo robíte
S NOPASSWD sudo už nežiada heslo:
anna ALL=(ALL:ALL) NOPASSWD: ALLNiektoré obrazy VPS to nastavujú pre predvoleného používateľa, takže po prihlásení kľúčom máte hneď správcovské práva. Pomocou sudo -l zistíte, čo platí u vás. Dôsledok: kto má Annin kľúč, je okamžite root. Druhý zámok už neexistuje. Pri osobnom serveri sa tak môžete rozhodnúť, ale urobte to vedome.
Oveľa lepšie je NOPASSWD iba pre jeden konkrétny príkaz, napríklad pre zálohovací skript, ktorý musí bežať automaticky:
backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backupPoužívateľ backup potom smie ako root spustiť presne tento jeden skript, bez hesla, a nič iné. Dve pasce:
- Vždy uvádzajte úplnú cestu. Ak uvediete iba
maak-backup, niekto si môže dať na začiatok svojej cesty vlastný program s týmto názvom. - Do samotného skriptu tento používateľ nesmie môcť zapisovať. Inak ho upraví a potom spúšťa ako root ľubovoľné príkazy. To isté platí pre príkazy, ktoré dokážu samy otvoriť shell, napríklad editor (
vim,nano) aleboless: kto ich smie spustiť cez sudo, môže z programu otvoriť shell s právami root. Takéto príkazy cez sudo nikdy samostatne nepovoľujte.
Čo sa zaznamenáva
Zakaždým, keď niekto použije sudo, pribudne záznam v journale (a na systémoch s rsyslog aj v /var/log/auth.log):
anna@web1:~$ sudo journalctl _COMM=sudo --since today
Nov 09 10:31:02 web1 sudo[2214]: anna : TTY=pts/0 ; PWD=/home/anna ; USER=root ; COMMAND=/usr/bin/apt updateVidíte kto, kde, ako kto a ktorý príkaz. To je jeden z dôvodov, prečo nepracovať viacerí ako root. Neúspešné pokusy o sudo ("incorrect password attempts") z účtu, ktorý nie je váš, sú varovným signálom.
Minimálne práva vo väčšom
sudo je jedno z použití všeobecného princípu: minimálne práva (least privilege). Každý používateľ a každá služba dostane presne tie práva, ktoré potrebuje, a nie viac. Na serveri to okrem iného znamená:
- pracujete ako bežný používateľ a sudo používate iba vtedy, keď je to potrebné;
- každá služba beží pod vlastným používateľom bez shellu (lekcia 3.1), nie ako root;
- webová aplikácia dostane databázového používateľa, ktorý smie používať iba svoju vlastnú databázu, nie správcu databázového servera;
- zálohovací skript smie iba ten jeden príkaz, ktorý potrebuje (NOPASSWD s úplnou cestou);
- kolega, ktorý iba aktualizuje web, dostane právo zápisu do
/var/www/example.comcez skupinu, nie sudo.
Myšlienka: ak sa niečo pokazí (diera v plugine, ukradnutý kľúč), škoda zostane obmedzená na toho jedného používateľa alebo službu. V princípoch CIS a v lekcii o hardeningu (10.1) sa to stále opakuje.
Na AlmaLinux a Rocky Linux
Tam sa skupina správcov nevolá sudo, ale wheel: usermod -aG wheel anna. Pravidlo v /etc/sudoers je %wheel ALL=(ALL) ALL. visudo a /etc/sudoers.d fungujú rovnako. Hlásenia sudo nájdete tam aj v /var/log/secure.
Zhrnutie
- Pracujte ako bežný používateľ a na správu používajte sudo; sudo žiada vaše vlastné heslo a zaznamenáva každý príkaz.
- Vytvorenie správcu:
adduser anna,adduser anna sudo(wheel na systémoch podobných RHEL), kľúč so správnym vlastníkom a právami, test v druhom okne, až potom vypnúť prihlasovanie ako root. - Pravidlá sudo upravujte iba pomocou
visudo, najlepšie vo vlastnom súbore v/etc/sudoers.d/bez bodky v názve. - NOPASSWD pre všetko odstraňuje jeden zámok; radšej ho použite iba pre jeden príkaz s úplnou cestou, ktorý používateľ nemôže meniť.
- Minimálne práva: každý používateľ a služba dostane presne to, čo potrebuje, aby chyba alebo únik zostali malé.
Kvíz
Úloha
Úloha O3.2: Správca so sudo. Vytvorte na svojom serveri bežného správcu (napríklad anna), správne nastavte kľúč, v druhom okne otestujte prihlásenie a sudo -l a potom vypnite prihlasovanie ako root cez SSH (PermitRootLogin no). Odškrtnite kroky, vložte výstup id (iba meno a skupiny) a odpovedzte na otázky: ktoré pravidlo dáva vášmu správcovi práva, je niekde NOPASSWD a ako sa dostanete dnu, ak zabudnete heslo?
Úloha O3.2: Správca so sudo
Túto úlohu vykonávate sami, nikto ju nekontroluje. Odškrtnite, čo ste urobili, a označte úlohu ako splnenú.
%sudo ALL=(ALL:ALL) ALL v /etc/sudoers (RHEL: %wheel). NOPASSWD len vedome a najlepšie obmedzené na jeden príkaz. Pri zabudnutom hesle: cez konzolu poskytovateľa, nové heslo pre root cez panel alebo záchranné prostredie, potom passwd <gebruiker>.
Vaše zaškrtnutia a poznámky zostávajú iba v tomto prehliadači, nikam ich neposielame. Po prihlásení si v sekcii Moje kurzy uchovávame iba to, že ste úlohu splnili.
Ďalšie čítanie
Kroky v týchto článkoch platia pre VPS od WebOké; u iných poskytovateľov to funguje podobne.
- Zabezpečenie vášho VPS: prvých päť minút
- Nemáte už prístup k svojmu VPS? Čo robiť ďalej
- Návod na DirectAdmin 12.2: Databázoví používatelia, oprávnenia a heslá
- Ubuntu Server: User management: https://ubuntu.com/server/docs/how-to/security/user-management/
- Príručka Debianu k sudoers: https://manpages.debian.org/trixie/sudo/sudoers.5.en.html
- VPS: od prvého prihlásenia po bezpečný server 3.1: Vlastný používateľ so sudo
