Přehled
sudo znamená superuser do . Umožňuje oprávněným uživatelům provádět příkazy jako jiný uživatel. Dalším uživatelem může být běžný uživatel nebo superuživatel. Většinu času jej však používáme k provádění příkazů se zvýšenými oprávněními.
příkaz sudo funguje ve spojení s bezpečnostními politikami, výchozí bezpečnostní politika je sudoers a je konfigurovatelná pomocí /etc/sudoers soubor. Jeho bezpečnostní zásady jsou vysoce rozšiřitelné. Je možné vyvíjet a distribuovat vlastní zásady jako pluginy.
Jak se to liší od su
V GNU/Linuxu existují dva způsoby, jak spustit příkaz se zvýšenými oprávněními:
- Pomocí su příkaz
- Pomocí sudo příkaz
ne znamená přepnout uživatele . Pomocí su se můžeme přepnout na uživatele root a spustit příkaz. Tento přístup má ale několik nevýhod.
- Potřebujeme sdílet heslo uživatele root s jiným uživatelem.
- Nemůžeme poskytnout řízený přístup, protože uživatel root je superuživatel
- Nemůžeme kontrolovat, co uživatel dělá.
sudo řeší tyto problémy jedinečným způsobem.
- Za prvé, nepotřebujeme kompromitovat heslo uživatele root. Běžný uživatel používá své vlastní heslo ke spuštění příkazu se zvýšenými oprávněními.
- Můžeme ovládat přístup uživatele sudo, což znamená, že můžeme omezit uživatele na provádění pouze určitých příkazů.
- Kromě toho jsou všechny aktivity uživatele sudo protokolovány, takže můžeme vždy zkontrolovat, jaké akce byly provedeny. Na GNU/Linuxu založeném na Debianu jsou všechny aktivity protokolovány /var/log/auth.log soubor.
Následující části tohoto návodu tyto body osvětlí.
Ruce se sudo
Nyní si rozumíme se sudo. Ušpiněme si ruce od praktického. Pro ukázku používám Ubuntu. Chování s jinou distribucí by však mělo být totožné.
Povolit přístup sudo
Pojďme přidat běžného uživatele jako uživatele sudo. V mém případě je uživatelské jméno linuxtechi
1) Upravte soubor /etc/sudoers následovně:
$ sudo visudo
2) Přidejte pod řádek, abyste umožnili sudo přístup uživateli linuxtechi:
linuxtechi ALL=(ALL) ALL
Ve výše uvedeném příkazu:
- linuxtechi označuje uživatelské jméno
- Nejprve VŠECHNY pokyny k povolení přístupu sudo z libovolného terminálu/stroje
- Druhý (ALL) dává pokyn sudo příkazu, který má být spuštěn jako jakýkoli uživatel
- Třetí ALL označuje, že všechny příkazy lze provést jako root
Spustit příkaz se zvýšenými oprávněními
Chcete-li provést příkaz se zvýšenými oprávněními, stačí před příkaz zadat sudo slovo takto:
$ sudo cat /etc/passwd
Když provedete tento příkaz, požádá o heslo linuxtechi, nikoli o heslo uživatele root.
Provést příkaz jako jiný uživatel
Kromě toho můžeme použít sudo k provedení příkazu jako jiný uživatel. Například v níže uvedeném příkazu uživatel linuxtechi provede příkaz jako uživatel devesh:
$ sudo -u devesh whoami [sudo] password for linuxtechi: devesh
Vestavěné chování příkazů
Jedním z omezení sudo je – vestavěný příkaz Shell s ním nefunguje. Například v příkazu je zabudována historie, pokud se pokusíte provést tento příkaz pomocí sudo, chyba příkazu nenalezena bude hlášena následovně:
$ sudo history [sudo] password for linuxtechi: sudo: history: command not found
Přístup k root shellu
Abychom předešli výše uvedenému problému, můžeme získat přístup ke kořenovému shellu a spustit odtud jakýkoli příkaz, včetně vestavěného Shell.
Pro přístup k root shellu spusťte níže uvedený příkaz:
$ sudo bash
Po provedení tohoto příkazu – uvidíte, že se znak výzvy změní na znak libra (#).
Recepty
V této části probereme několik užitečných receptů, které vám pomohou zvýšit produktivitu. Většinu příkazů lze použít k dokončení každodenních úkolů.
Proveďte předchozí příkaz jako uživatel sudo
Předpokládejme, že chcete provést předchozí příkaz se zvýšenými oprávněními, pak bude užitečný trik:
$ sudo !4
Výše uvedený příkaz provede 4. příkaz z historie se zvýšenými oprávněními.
Pokud chcete provést předchozí příkaz s právy root pomocí příkazu sudo, použijte následující příkaz,
$ sudo !!
příkaz sudo s Vim
Mnohokrát upravujeme konfigurační soubory systému a při ukládání si uvědomujeme, že k tomu potřebujeme přístup root. Protože tím můžeme přijít o své změny. Není třeba propadat panice, k záchraně z této situace můžeme použít níže uvedený příkaz ve Vimu:
:w !sudo tee %
Ve výše uvedeném příkazu:
- Dvojtečka (:) označuje, že jsme ve Vimově bývalém režimu
- Vykřičník (!) označuje, že spouštíme příkaz shell
- sudo a tee jsou příkazy shellu
- Znak procenta (%) označuje všechny řádky z aktuálního řádku
Provádění více příkazů pomocí sudo
Dosud jsme provedli pouze jeden příkaz pomocí sudo, ale můžeme s ním provést více příkazů. Jednoduše oddělte příkazy středníkem (;) takto:
$ sudo -- bash -c 'pwd; hostname; whoami'
Ve výše uvedeném příkazu:
- Dvojitá pomlčka (–) zastaví zpracování přepínačů příkazového řádku
- bash označuje název shellu, který se má použít ke spuštění
- Po příkazech, které se mají provést, následuje volba –c
Spustit příkaz sudo bez hesla
Když je příkaz sudo spuštěn poprvé, zobrazí výzvu k zadání hesla a ve výchozím nastavení bude heslo uloženo do mezipaměti po dobu dalších 15 minut. Toto chování však můžeme přepsat a zakázat ověřování hesla pomocí klíčového slova NOPASSWD následovně:
linuxtechi ALL=(ALL) NOPASSWD: ALL
Omezit uživatele na provádění určitých příkazů
Abychom zajistili kontrolovaný přístup, můžeme omezit uživatele sudo na provádění pouze určitých příkazů. Například pod řádkem lze provádět pouze příkazy echo a ls
linuxtechi ALL=(ALL) NOPASSWD: /bin/echo /bin/ls
Přidat řádek nebo textový řetězec k souboru pomocí příkazu sudo
Existují některé scénáře, kdy přidáme několik řádků k existujícímu souboru s místním uživatelem, který má práva sudo,
$ echo ‘textový řetězec’ | sudo tee -a
Příklad je uveden níže:
[email protected]:~$ echo "deb http://ftp.de.debian.org/debian buster main contrib" | sudo tee -a /etc/apt/sources.list deb http://ftp.de.debian.org/debian buster main contrib [email protected]:~$
Alternativní způsob připojení řádků nebo textu k existujícímu souboru pomocí příkazu sudo,
sudo sh -c 'echo "deb http://ftp.de.debian.org/debian buster main contrib" >> /etc/apt/sources.list'
Statistiky sudo
Pojďme se podívat na příkaz sudo a získat o něm přehled.
$ ls -l /usr/bin/sudo -rwsr-xr-x 1 root root 145040 Jun 13 2017 /usr/bin/sudo
Pokud pečlivě sledujete oprávnění k souboru, setuid bit je povolen na sudo. Když některý uživatel spustí tento binární soubor, spustí se s oprávněními uživatele, který soubor vlastní. V tomto případě je to uživatel root.
Abychom to demonstrovali, můžeme s ním použít příkaz id takto:
$ id uid=1002(linuxtechi) gid=1002(linuxtechi) groups=1002(linuxtechi)
Když provedeme příkaz id bez sudo, zobrazí se id uživatele linuxtechi.
$ sudo id uid=0(root) gid=0(root) groups=0(root)
Ale pokud provedeme příkaz id pomocí sudo, zobrazí se id uživatele root.
Závěr
Z tohoto článku vyplývá, že sudo poskytuje běžným uživatelům kontrolovanější přístup. Pomocí těchto technik může více uživatelů komunikovat s GNU/Linux bezpečným způsobem.
Přečtěte si také:Jak vytvořit pevné a měkké (symlink) odkazy na systémech Linux