GNU/Linux >> Znalost Linux >  >> Linux

5 nových funkcí sudo, které by správci systému měli znát v roce 2022

Pokud chcete některým svým uživatelům udělit přístup pro správu a zároveň kontrolovat a kontrolovat, co dělají ve vašich systémech, použijte sudo . Nicméně i s sudo , je tu docela dost neviditelných problémů – jen přemýšlejte o poskytnutí shellového přístupu. Nedávné sudo vydává přidané funkce, které vám umožní vidět tyto problémy a dokonce je ovládat. Můžete například zapnout podrobnější a snadněji zpracovatelné protokolové zprávy a protokolovat každý příkaz provedený v relaci shellu.

Některé z těchto funkcí jsou zcela nové. Některé z nich staví na funkcích představených ve verzi 1.9.0 nebo ještě dříve. Například sudo mohl zaznamenat vše, co se stalo na terminálu, dokonce i ve verzi 1.8. Systém však tyto nahrávky uložil lokálně a bylo snadné je smazat, zvláště ty, kde byly nahrávky nejužitečnější:Shell sessions. Verze 1.9.0 přidala centrální sbírku záznamů relací, takže záznamy nemůže odstranit místní uživatel, a nejnovější verze přidaly relé, díky čemuž je sbírka ještě robustnější.

Pokud znáte pouze základy sudo nebo dříve používali pouze verzi 1.8, doporučuji přečíst si můj předchozí článek.

1. Protokolování ve formátu JSON

První novou funkcí, kterou chci představit, je protokolování ve formátu JSON. Jsem fanatik do protokolování (začal jsem pracovat na syslog-ng projekt před dvanácti lety) a tato funkce je první představenou od mého článku na Opensource.com. Když je povoleno, sudo zaznamenává mnohem více informací a dělá to jednodušším způsobem k analýze.

Tradiční syslog zprávy od sudo jsou krátké a obsahují pouze minimální množství nezbytných informací. To je způsobeno omezeními starého syslog implementace:Zprávy větší než 1 kB byly zahozeny nebo zkráceny:

Jan 28 13:56:27 localhost.localdomain sudo[10419]: czanik : TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

Nejnovější syslog implementace zvládnou mnohem větší velikosti zpráv. syslog-ng standardně přijímá zprávy protokolu o velikosti až 64 kB (ale samozřejmě může být menší nebo větší, v závislosti na skutečné konfiguraci).

Stejná událost obsahuje mnohem více informací, pokud je přihlášena ve formátu JSON. Více neznamená obtížnější zpracování:zprávy ve formátu JSON lze snadněji analyzovat mnoha softwarovými aplikacemi pro správu protokolů. Zde je příklad:

Jan 28 13:58:20 localhost.localdomain sudo[10518]: @cee:{"sudo":{"accept":{"uuid":"616bc9efcf-b239-469d-60ee-deb5af8ce6","server_time":{"seconds":1643374700,"nanoseconds":222446715,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submit_time":{"seconds":1643374700,"nanoseconds":209935349,"iso8601":"20220128125820Z","localtime":"Jan 28 13:58:20"},"submituser":"czanik","command":"/bin/bash","runuser":"root","runcwd":"/home/czanik","ttyname":"/dev/pts/0","submithost":"localhost.localdomain","submitcwd":"/home/czanik","runuid":0,"columns":118,"lines":60,"runargv":["/bin/bash"],"runenv":["LANG=en_US.UTF-8","HOSTNAME=localhost.localdomain","SHELL=/bin/bash","TERM=xterm-256color","PATH=/home/czanik/.local/bin:/home/czanik/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin","MAIL=/var/mail/root","LOGNAME=root","USER=root","HOME=/root","SUDO_COMMAND=/bin/bash","SUDO_USER=czanik","SUDO_UID=1000","SUDO_GID=1000"]}}}

Zprávy protokolu ve formátu JSON můžete povolit v sudoers soubor:

Defaults log_format=json

Další informace o tom, jak pracovat se zprávami protokolu ve formátu JSON, najdete v sudo z mého blogu syslog-ng.

2. Centrální sběr protokolů pomocí sudo_logsrvd

Další funkcí související s protokolováním v 1.9.4 je shromažďování všech sudo protokolovat zprávy (včetně selhání) pomocí sudo_logsrvd . Dříve systém zaznamenával úspěšné relace pouze při sudo_logsrvd skutečně pořídil záznam. Protokolování se stále provádí prostřednictvím syslog ve výchozím nastavení na konci.

Proč je toto důležité? Za prvé, můžete sbírat vše, co souvisí s sudo na jednom místě:Jak záznamy relace, tak všechny odpovídající zprávy protokolu. Za druhé, může také zaručit správné protokolování všech sudo -související události, jako sudo může odmítnout provádění příkazů, pokud sudo_logsrvd je nepřístupný.

Můžete povolit protokolování do sudo_logsrvd s následujícím nastavením v sudoers soubor (samozřejmě nahraďte IP adresu):

Defaults log_servers=172.16.167.150

Pokud chcete zprávy protokolu ve formátu JSON, potřebujete následující nastavení v [eventlog] části sudo_logsrvd konfigurace:

log_format = json

Jinak sudo_logsrvd používá tradiční sudo formát protokolu s jednoduchou úpravou:Obsahuje také informace o hostiteli, odkud protokol pochází:

Nov 18 12:40:16 centos8splunk.localdomain sudo[21028]:   czanik : 3 incorrect password attempts ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Nov 18 12:40:23 centos8splunk.localdomain sudo[21028]:   czanik : HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; TSID=00000A ; COMMAND=/bin/bash
Nov 18 12:40:30 centos8splunk.localdomain sudo[21028]:   czanik : command rejected by I/O plugin ; HOST=centos7sudo.localdomain ; TTY=pts/0 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash

Více o sysadmins

  • Povolit blog Sysadmin
  • Automatizovaný podnik:průvodce řízením IT pomocí automatizace
  • eKniha:Ansible Automation for SysAdmins
  • Příběhy z terénu:Průvodce správcem systému pro automatizaci IT
  • eKniha:Průvodce Kubernetes pro SRE a správce systému
  • Nejnovější články správce systému

3. Relé

Když původně představili sudo_logsrvd (verze 1.9.0) pro centrální shromažďování nahrávek relace mohli klienti posílat nahrávky pouze přímo. Verze 1.9.7 zavedla koncept relé. Pomocí relé můžete namísto přímého odesílání nahrávek odesílat nahrávky na více úrovní mezihostitelů, kteří strukturují vaši síť.

Proč je toto důležité? Za prvé, relé umožňují shromažďovat záznamy relací, i když je centrální hostitel nedostupný kvůli problémům se sítí nebo údržbě. Ve výchozím nastavení sudo odmítne spustit, když nemůže odesílat nahrávky, takže relé mohou zajistit, že můžete použít sudo nepřetržitě.

Za druhé vám také umožňuje mít přísnější kontroly ve vaší síti:Namísto otevírání brány firewall pro všechny hostitele centrálnímu sudo_logsrvd , musíte pouze povolit průchod vašeho relé.

Konečně vám umožňuje shromažďovat záznamy relací ze sítí bez přímého přístupu k internetu, jako jsou privátní sítě AWS, kde si můžete nainstalovat sudo_logsrvd v režimu přenosu na hostiteli brány.

Když používáte relé, konfigurace sudo klienty a centrální sudo_logsrvd připomíná to samé. Na hostiteli přenosu přidejte do [relay] následující řádek části sudo_logsrvd.conf :

relay_host = 172.16.167.161

Pokud je známo, že síťové připojení k centrálnímu serveru je problematické, můžete přenos nakonfigurovat tak, aby ukládal nahrávky před jejich předáním:

store_first = true

4. Logování dílčích příkazů

Chtěli jste někdy vědět, co se stane v rámci shellové relace spuštěné pomocí sudo ? Ano, záznamy relací existují, ale sledovat hodiny nahrávek jen proto, abyste viděli několik provedených příkazů, je nuda a obrovská ztráta času. Naštěstí verze 1.9.8 zavedla dílčí příkazy protokolování. Nyní stačí pravidelně kontrolovat své protokolové zprávy a sledovat záznamy pouze v případě, že se objeví něco podezřelého.

K tomu, abyste měli přístup k shellu, nepotřebujete ani pravidlo, které by umožnilo přístup k shellu, stačí přístup k editoru. Většina editorů umí spouštět externí příkazy. Můj oblíbený editor je JOE a tohle můžete vidět, když ho spustím přes sudo :

Aug 30 13:03:00 czplaptop sudo[10150]:   czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe

Nic zajímavého, jen editor – i když vytvořím shell a smažu z něj několik souborů a oddílů. Nyní se podívejme, co se stane, když povolíte podpříkazy protokolování:

Aug 30 13:13:14 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/joe
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/sh -c /bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/bin/bash
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/readlink /proc/10889/exe
[...]
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/sed -r s@/*:|([^\\]):@\1\n@g;H;x;s@/\n@\n@
Aug 30 13:13:37 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/tty
Aug 30 13:13:42 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/id
Aug 30 13:13:56 czanik : TTY=pts/1 ; PWD=/home/czanik ; USER=root ; COMMAND=/usr/bin/ls -A -N --color=none -T 0 /usr/share/syslog-ng/include/scl/

Vynechal jsem desítky řádků, abych ušetřil místo, ale stále můžete vidět, že jsem spustil shell a příkazy spouštěné bash_profile jsou také k dispozici v protokolech.

Dílčí příkazy protokolování můžete povolit v sudoers soubor pomocí následujícího nastavení:

Defaults log_subcmds

V tradičním sudo logy, můžete vidět z sudo id procesu, že tyto protokoly jsou ze stejného sudo zasedání. Pokud zapnete protokolování ve formátu JSON, jak je uvedeno výše, sudo zaznamenává do protokolů mnohem více informací, což usnadňuje jejich analýzu.

5. Zachycování dílčích příkazů

Dílčí příkazy protokolování odstraní většinu skrytých problémových oblastí z sudo , ale jsou situace, kdy nechcete jen sledovat, co se děje, ale také kontrolovat tok událostí. Například musíte uživateli udělit přístup k shellu, ale přesto mu chcete zabránit ve spuštění určitého příkazu. Odposlech je v takových případech ideální. Existují samozřejmě určitá omezení, například nemůžete omezit vestavěné příkazy shellů.

Řekněme who příkaz je nebezpečný. Odposlech můžete povolit ve dvou krocích:První jej povolí, druhý jej nakonfiguruje. V tomto případě můj uživatel nemůže spustit who :

Defaults intercept
czanik ALL = (ALL) ALL, !/usr/bin/who

Zde je to, co se stane, když zahájím relaci root shellu pomocí sudo a zkuste spustit who :

$ sudo -s
# who
Sorry, user czanik is not allowed to execute '/usr/bin/who' as root on czplaptop.
bash: /usr/bin/who: Permission denied

Spouštění shellů můžete snadno úplně zakázat:

Defaults intercept
Cmnd_Alias SHELLS=/usr/bin/bash, /usr/bin/sh, /usr/bin/csh
czanik ALL = (ALL) ALL, !SHELLS

To však také znamená, že nemůžete spustit shell session pomocí sudo . Nejen to, ale také nemůžete provádět externí příkazy z editorů. Toto se stane, když se pokusím spustit ls příkaz z vi :

$ sudo vi /etc/issue
Sorry, user czanik is not allowed to execute '/bin/bash -c /bin/ls' as root on czplaptop.
Cannot execute shell /bin/bash
Press ENTER or type command to continue

Co bude dál?

Doufám, že při čtení mého článku budete chtít tyto nové funkce sami vyzkoušet. Můžete si nainstalovat nejnovější sudo na mnoha distribucích Linuxu a variantách UNIX ze správce balíčků nebo použijte binární instalační program dostupný na webu Sudo.

Tento článek vám poskytuje pouze přehled nových možností. Pokud se chcete o těchto funkcích dozvědět více, navštivte webovou stránku, která hostí manuálové stránky, a také blog Sudo.


Linux
  1. Nové funkce v Ubuntu 17.04

  2. 6 možností pro tcpdump, které potřebujete vědět

  3. sudo -i, ale ponechat aktuální pracovní adresář

  1. Nové funkce ve Fedoře 26

  2. Co potřebují správci systému vědět o používání Bash

  3. Skuteční správci systému sudo nedělají

  1. Linux Mint 19 – datum vydání, nové funkce a další

  2. Jak zjistit, zda má uživatel práva sudo

  3. Nejlepší postupy penetračního testování, které potřebujete znát