Přejít na obsah

Nastavení cookies

Zvolte, které druhy cookies povolíte. Svou volbu můžete kdykoli změnit přes Nastavení cookies v dolní části každé stránky. Prohlášení o ochraně osobních údajů

Nezbytné

Vždy zapnuté

Potřebné pro přihlášení, uchování košíku a zapamatování vašich voleb. Jsou vždy zapnuté.

Které cookies?
  • weboke_sessie, weboke_klant, weboke_remember: vaše relace a trvalé přihlášení
  • weboke_basket: váš košík
  • wkBtwIncl: zobrazení cen s DPH nebo bez DPH
  • wok_cookies: vaše volba cookies, 12 měsíců

Měří, která reklama vede k návštěvě nebo objednávce, abychom neplatili za reklamy, které nic nepřinášejí.

Které cookies?
  • Google Ads přes Google Tag Manager (_gcl_au, _gcl_aw), až 90 dní
  • OpenAI Ads, reklamy v ChatGPT
  • wok_aff: partner, který vás k nám doporučil (partnerský program), 60 dní

4,6

Země a jazyk

Každá země má vlastní web s cenami a DPH dané země.

Zobrazit

sudo a minimální oprávnění

Modul 3: Uživatelé, oprávnění a sudo · Doba čtení: 11 min.

Cíl lekce: Po této lekci budete umět pracovat jako běžný uživatel se sudo, bezpečně přidat správce, změnit nastavení sudo, aniž byste se sami zablokovali, a vysvětlit, proč minimální oprávnění chrání Váš server.

Klíčové pojmy: sudo, skupina sudo, skupina wheel, /etc/sudoers, /etc/sudoers.d, visudo, NOPASSWD, sudo -l, uzamčení účtu root, log sudo, minimální oprávnění (least privilege), služební uživatel

Proč prostě nepracovat jako root?

Po instalaci se často přihlašujete jako root. Je to pohodlné: smíte všechno. Ale právě v tom je problém:

  • Stačí jeden překlep. rm -rf / home/anna/oud (všimněte si mezery za prvním lomítkem) jako root smaže celý Váš server. Jako běžný uživatel dostanete chybové hlášení.
  • Všechno běží jako root. Skript, který vložíte z internetu, program, který testujete: všechno dostane plná oprávnění.
  • Žádná stopa. Pokud jako root pracují tři lidé, nikdo později neví, kdo co udělal.
  • Root je jméno, které zkouší každý útočník. Přihlášení jako root je lepší úplně vypnout (lekce 2.2), to ale jde teprve tehdy, když máte jinou cestu ke správcovským oprávněním.

Tou jinou cestou je sudo: přihlásíte se pod svým účtem a jen před příkaz, který potřebuje správcovská oprávnění, 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 verze 25.10 standardně používá sudo-rs, novou implementaci sudo. Pro vše v této lekci funguje stejně.)

sudo se ptá na Vaše heslo, ne na heslo uživatele root. Poté si ho standardně pamatuje čtvrt hodiny, takže ho nemusíte zadávat u každého příkazu znovu. Každý příkaz, který spustíte přes sudo, se zapíše do logu.

Vytvoření správce

Na Debianu a Ubuntu smí přes sudo dělat všechno každý člen skupiny sudo. Je to uvedeno v /etc/sudoers:

%sudo   ALL=(ALL:ALL) ALL

Čtěte to takto: členové skupiny sudo (%) smějí na všech strojích (ALL) jako kterýkoli uživatel a skupina ((ALL:ALL)) spustit jakýkoli příkaz (ALL).

Přidání správce tedy proběhne ve dvou krocích, jako root:

root@web1:~# adduser anna
root@web1:~# adduser anna sudo

Poté uložte veřejný klíč uživatelky Anna do /home/anna/.ssh/authorized_keys se správným vlastníkem a oprávněními:

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_keys

Nezapomeňte na chown: soubor zkopírovaný uživatelem root patří uživateli root, a pak se Anna nemůže přihlásit svým klíčem.

Nyní, zatímco relace root zůstává otevřená, otestujte ve druhém okně:

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
root

Teprve když to funguje, nastavte v konfiguraci SSH PermitRootLogin no (lekce 2.2). Od té doby se vždy přihlašujete jako Anna.

Jednu věc si zapamatujte: Anna nyní potřebuje pro sudo heslo. Uložte si ho do správce hesel. Přihlášení probíhá klíčem, sudo heslem: dvě různé věci, které musí mít útočník obě.

Změna nastavení sudo: vždy pomocí visudo

Chyba v /etc/sudoers může znamenat, že sudo přestane úplně fungovat. Pokud se navíc nemůže přihlásit ani root, uvíznete. Proto nastavení sudo nikdy neupravujte běžným editorem, ale pomocí visudo. Ten otevře dočasnou kopii a před uložením zkontroluje její obsah:

root@web1:~# visudo -f /etc/sudoers.d/backup

Stejně jako u SSH raději použijte vlastní soubor v /etc/sudoers.d/ než hlavní soubor. Dejte pozor na dvě pravidla této složky:

  • Soubory, jejichž název obsahuje tečku nebo končí na ~, se přeskakují. backup.conf tedy nefunguje, backup ano. Účelem je ignorovat kopie vytvořené editory, ale mnoho lidí to překvapí.
  • Soubor musí patřit uživateli root a ostatní do něj nesmějí zapisovat (obvyklé je 440; visudo to zařídí).

Chcete-li zkontrolovat existující soubor bez úprav: visudo -c zkontroluje vše.

NOPASSWD: praktické, ale vězte, co děláte

S NOPASSWD se sudo už neptá na heslo:

anna ALL=(ALL:ALL) NOPASSWD: ALL

Některé obrazy VPS to nastavují pro výchozího uživatele, takže jste po přihlášení klíčem rovnou správcem. Pomocí sudo -l zjistíte, co platí u Vás. Důsledek: kdo má klíč uživatelky Anna, je rovnou root. Druhý zámek už neexistuje. U osobního serveru se tak můžete rozhodnout, ale udělejte to vědomě.

Mnohem lepší je NOPASSWD jen pro jeden konkrétní příkaz, například pro zálohovací skript, který musí běžet automaticky:

backup ALL=(root) NOPASSWD: /usr/local/bin/maak-backup

Uživatel backup pak smí jako root spouštět přesně ten jeden skript, bez hesla, a nic dalšího. Dvě pasti:

  • Vždy používejte úplnou cestu. Se samotným maak-backup si může někdo vložit vlastní program s tímto názvem na začátek své cesty (PATH).
  • Do samotného skriptu tento uživatel nesmí mít možnost zapisovat. Jinak ho upraví a pak jako root spouští libovolné příkazy. Totéž platí pro příkazy, které samy umějí otevřít shell, například editor (vim, nano) nebo less: kdo je smí spustit přes sudo, může z programu otevřít shell s právy root. Takové příkazy přes sudo nikdy samostatně nepovolujte.

Co se zaznamenává

Pokaždé, když někdo použije sudo, objeví se záznam v journalu (a na systémech s rsyslog také 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 update

Vidíte kdo, kde, jako kdo a jaký příkaz. To je jeden z důvodů, proč nepracovat jako root ve více lidech. Neúspěšné pokusy o sudo („incorrect password attempts“, tedy pokusy se špatným heslem) z účtu, který nejste Vy, jsou varovným signálem.

Minimální oprávnění ve velkém

sudo je jedním z uplatnění obecného principu: minimálních oprávnění (least privilege). Každý uživatel a každá služba dostane přesně ta oprávnění, která potřebuje, a nic víc. Na serveru to mimo jiné znamená:

  • pracujete jako běžný uživatel a sudo používáte jen tehdy, když je to nutné;
  • každá služba běží pod vlastním uživatelem bez shellu (lekce 3.1), ne jako root;
  • webová aplikace dostane databázového uživatele, který smí používat jen svou vlastní databázi, ne správce databázového serveru;
  • zálohovací skript smí jen ten jeden příkaz, který potřebuje (NOPASSWD s úplnou cestou);
  • kolega, který jen aktualizuje web, dostane právo zápisu do /var/www/example.com přes skupinu, ne sudo.

Myšlenka: pokud se něco pokazí (zranitelnost v pluginu, ukradený klíč), škoda zůstane omezená na toho jednoho uživatele nebo službu. V principech CIS a v lekci o hardeningu (10.1) se to bude stále vracet.

Na AlmaLinux a Rocky Linux

Tam se skupina správců jmenuje wheel místo sudo: usermod -aG wheel anna. Řádek v /etc/sudoers je %wheel ALL=(ALL) ALL. visudo a /etc/sudoers.d fungují stejně. Hlášení sudo najdete tam také v /var/log/secure.

Shrnutí

  • Pracujte jako běžný uživatel a pro správu používejte sudo; sudo se ptá na Vaše vlastní heslo a zaznamenává každý příkaz.
  • Vytvoření správce: adduser anna, adduser anna sudo (wheel na systémech odvozených od RHEL), klíč se správným vlastníkem a oprávněními, test ve druhém okně, teprve pak vypnout přihlášení root.
  • Pravidla sudo upravujte jen pomocí visudo, nejlépe ve vlastním souboru v /etc/sudoers.d/ bez tečky v názvu.
  • NOPASSWD pro všechno odstraňuje jeden zámek; raději ho používejte jen pro jeden příkaz s úplnou cestou, který uživatel nemůže změnit.
  • Minimální oprávnění: každý uživatel a služba dostane přesně to, co potřebuje, takže chyba nebo zranitelnost zůstane malá.

Kvíz

1. Na jaké heslo se sudo standardně ptá, když Anna napíše sudo apt update?



2. Vytvoříte soubor /etc/sudoers.d/backup.conf s platným pravidlem, ale nefunguje. Proč?



3. Proč upravujete pravidla sudo pomocí visudo?



4. Které pravidlo dává zálohovacímu uživateli nejmenší riziko?



5. V jakém pořadí vypnete přihlášení root, aniž byste se sami zablokovali?



Úkol

Úkol O3.2: Správce se sudo. Vytvořte na svém serveru běžného správce (například anna), správně nastavte svůj klíč, ve druhém okně otestujte přihlášení a sudo -l a poté vypněte přihlášení root přes SSH (PermitRootLogin no). Odškrtněte kroky, vložte výstup id (jen jméno a skupiny) a odpovězte na otázky: které pravidlo dává Vašemu správci oprávnění, je někde NOPASSWD a jak se dostanete dovnitř, když zapomenete heslo?

Úkol O3.2: Správce se sudo

Tento úkol provádíte sami; nikdo ho nekontroluje. Odškrtněte, co jste udělali, a označte úkol jako splněný.




Vaše zaškrtnutí a poznámky zůstávají pouze v tomto prohlížeči; nikam je neposíláme. Pokud jste přihlášeni, ukládáme v sekci Moje kurzy pouze to, že jste úkol splnili.

Doporučujeme k přečtení

Postupy v těchto článcích platí pro VPS od WebOké; u jiných poskytovatelů to funguje podobně.

Chvíli strpení…

Nastavení vašich domén

U každé domény nastavte jmenné servery, propojení s hostingem a to, kdo bude držitelem.

Načítání vašich domén…