sudo zná každý , že jo? Tento nástroj je standardně nainstalován na většině systémů Linux a je dostupný pro většinu BSD a komerčních unixových variant. Přesto, po rozhovoru se stovkami sudo uživatelů, nejčastější odpověď, kterou jsem dostal, byla, že sudo je nástroj ke zkomplikování života.
Existuje uživatel root a je zde su příkaz, tak proč mít další nástroj? Pro mnohé sudo byla pouze předpona pro administrativní příkazy. Jen hrstka zmínila, že když máte více administrátorů pro stejný systém, můžete použít sudo protokoly, abyste viděli, kdo co udělal.
Co je tedy sudo ? Podle sudo webové stránky:
"Sudo umožňuje správci systému delegovat oprávnění tím, že určitým uživatelům dává možnost spouštět některé příkazy jako root nebo jiný uživatel a zároveň poskytuje auditní záznam příkazů a jejich argumentů."
Ve výchozím nastavení sudo přichází s jednoduchou konfigurací, jediným pravidlem, které uživateli nebo skupině uživatelů umožňuje dělat prakticky cokoli (více o konfiguračním souboru dále v tomto článku):
%wheel ALL=(ALL) ALL
V tomto příkladu znamenají parametry následující:
- První parametr definuje členy skupiny.
- Druhý parametr definuje hostitele, na kterých mohou členové skupiny spouštět příkazy.
- Třetí parametr definuje uživatelská jména, pod kterými lze příkaz spustit.
- Poslední parametr definuje aplikace, které lze spouštět.
V tomto příkladu tedy členové kolečka skupina může spouštět všechny aplikace jako všichni uživatelé na všech hostitelích. I toto skutečně tolerantní pravidlo je užitečné, protože vede k protokolům o tom, kdo co na vašem počítači udělal.
Aliasy
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
Jakmile sdílenou schránku nebudete spravovat jen vy a váš nejlepší přítel, začnete samozřejmě dolaďovat oprávnění. Položky ve výše uvedené konfiguraci můžete nahradit seznamy:seznam uživatelů, seznam příkazů a tak dále. S největší pravděpodobností některé z těchto seznamů zkopírujete a vložíte do své konfigurace.
V této situaci se mohou aliasy hodit. Udržování stejného seznamu na více místech je náchylné k chybám. Alias definujete jednou a poté jej můžete použít mnohokrát. Když tedy ztratíte důvěru v některého ze svých správců, můžete ho z aliasu odebrat a máte hotovo. S více seznamy namísto aliasů je snadné zapomenout odebrat uživatele z jednoho ze seznamů se zvýšenými oprávněními.
Povolení funkcí pro určitou skupinu uživatelů
sudo příkaz přichází s obrovskou sadou výchozích hodnot. Přesto existují situace, kdy chcete některé z nich potlačit. To je, když použijete Výchozí příkaz v konfiguraci. Obvykle jsou tyto výchozí hodnoty vynuceny pro každého uživatele, ale nastavení můžete zúžit na podmnožinu uživatelů na základě hostitele, uživatelského jména a tak dále. Zde je příklad, o kterém moje generace systémových administrátorů ráda slyší:urážky. Toto je jen několik vtipných zpráv, když někdo zadá heslo špatně:
czanik@linux-mewy:~> sudo ls
[sudo] password for root:
Hold it up to the light --- not a brain in sight!
[sudo] password for root:
My pet ferret can type better than you!
[sudo] password for root:
sudo: 3 incorrect password attempts
czanik@linux-mewy:~>
Protože ne každý je fanouškem systémového humoru, jsou tyto urážky ve výchozím nastavení zakázány. Následující příklad ukazuje, jak povolit toto nastavení pouze pro vaše zkušené systémové správce, kteří jsou členy kolečka skupina:
Defaults !insults
Defaults:%wheel insults
Nemám dost prstů na to, abych spočítal, kolik lidí mi poděkovalo za přinášení těchto zpráv.
Ověření přehledu
V sudo jsou samozřejmě i vážnější funkce také. Jedním z nich je ověření digestu. Do své konfigurace můžete zahrnout přehled aplikací:
peter ALL = sha244:11925141bb22866afdf257ce7790bd6275feda80b3b241c108b79c88 /usr/bin/passwd
V tomto případě sudo zkontroluje a porovná výtah aplikace s tím, který je uložen v konfiguraci před spuštěním aplikace. Pokud se neshodují, sudo odmítne spustit aplikaci. I když je obtížné udržovat tyto informace ve vaší konfiguraci – pro tento účel neexistují žádné automatické nástroje – tyto výtahy vám mohou poskytnout další vrstvu ochrany.
Nahrávání relace
Méně známou funkcí sudo je také nahrávání relace . Po mém demu mnoho lidí opouští můj rozhovor s plány na jeho implementaci do své infrastruktury. Proč? Protože při nahrávání relace vidíte nejen název příkazu, ale také vše, co se v terminálu stalo. Můžete vidět, co vaši administrátoři dělají, i když mají přístup k shellu a protokoly ukazují pouze to bash je spuštěno.
V současné době existuje jedno omezení. Záznamy jsou uloženy lokálně, takže s dostatečnými oprávněními mohou uživatelé mazat své stopy. Zůstaňte naladěni na nadcházející funkce.
Pluginy
Počínaje verzí 1.8 sudo změněna na modulární architekturu založenou na pluginech. S většinou funkcí implementovaných jako pluginy můžete snadno nahradit nebo rozšířit funkčnost sudo napsáním vlastního. Pro sudo jsou již dostupné jak open source, tak komerční pluginy .
Ve své přednášce jsem demonstroval sudo_pair plugin, který je dostupný na GitHubu. Tento plugin je vyvinut v Rustu, což znamená, že jeho kompilace není tak snadná a ještě obtížnější je distribuovat výsledky. Na druhou stranu, plugin poskytuje zajímavou funkcionalitu, která vyžaduje, aby druhý administrátor schvaloval (nebo zamítal) spouštění příkazů pomocí sudo . Nejen to, ale relace lze sledovat na obrazovce a ukončit, pokud dojde k podezřelé aktivitě.
V ukázce, kterou jsem udělal během nedávné přednášky na konferenci All Things Open, jsem měl nechvalně známé:
czanik@linux-mewy:~> sudo rm -fr /
příkaz zobrazený na obrazovce. Všichni zadržovali dech, aby zjistili, zda se můj notebook nezničil, ale přežil.
Protokoly
Jak jsem již zmínil na začátku, logování a upozorňování je důležitou součástí sudo . Pokud nezkontrolujete sudo loguje pravidelně, nemá cenu používat sudo . Tento nástroj upozorňuje e-mailem na události uvedené v konfiguraci a zaznamenává všechny události do syslog . Protokoly ladění lze zapnout a použít k ladění pravidel nebo hlášení chyb.
Upozornění
E-mailová upozornění jsou nyní trochu staromódní, ale pokud používáte syslog-ng pro shromažďování zpráv protokolu, vaše sudo zprávy protokolu jsou automaticky analyzovány. Můžete snadno vytvářet vlastní upozornění a odesílat je na širokou škálu cílů, včetně Slack, Telegram, Splunk nebo Elasticsearch. Více o této funkci se můžete dozvědět z mého blogu na syslong-ng.com.
Konfigurace
Hodně jsme mluvili o sudo funkce a dokonce viděl několik řádků konfigurace. Nyní se podívejme blíže na to, jak sudo je nakonfigurován. Samotná konfigurace je k dispozici v /etc/sudoers , což je jednoduchý textový soubor. Přesto se nedoporučuje tento soubor přímo upravovat. Místo toho použijte vizuo , protože tento nástroj také provádí kontrolu syntaxe. Pokud se vám nelíbí vi , můžete změnit, který editor chcete použít, kliknutím na EDITOR proměnná prostředí podle vaší preferované možnosti.
Než začnete upravovat sudo konfiguraci, ujistěte se, že znáte heslo uživatele root. (Ano, dokonce i na Ubuntu, kde root ve výchozím nastavení nemá heslo.) Zatímco vizuo zkontroluje syntaxi, je snadné vytvořit syntakticky správnou konfiguraci, která vás uzamkne z vašeho systému.
Až budete mít v případě nouze po ruce heslo uživatele root, můžete začít upravovat konfiguraci. Pokud jde o sudoery soubor, je třeba si zapamatovat jednu důležitou věc:Tento soubor se čte shora dolů a poslední nastavení vyhrává. Tato skutečnost pro vás znamená, že byste měli začít s obecnými nastaveními a výjimky umístit na konec, jinak budou výjimky přepsány obecnými nastaveními.
Můžete najít jednoduchý sudoers soubor níže, založený na souboru v CentOS, a přidejte několik řádků, o kterých jsme hovořili dříve:
Defaults !visiblepw
Defaults always_set_home
Defaults match_group_by_gid
Defaults always_query_group_plugin
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
Defaults:%wheel insults
Defaults !insults
Defaults log_output
Tento soubor začíná změnou několika výchozích hodnot. Pak následují obvyklá výchozí pravidla:kořen uživatel a členové kolečka skupina má plná oprávnění k počítači. Dále povolíme urážky pro kolo skupinu, ale zakázat je pro všechny ostatní. Poslední řádek umožňuje nahrávání relace.
Výše uvedená konfigurace je syntakticky správná, ale dokážete najít logickou chybu? Ano, existuje jeden:Urážky jsou pro všechny zakázány, protože poslední obecné nastavení přepíše předchozí, konkrétnější nastavení. Jakmile přepnete dva řádky, nastavení funguje podle očekávání:Členové kolečka skupina dostává vtipné zprávy, ale ostatní uživatelé je nedostávají.
Správa konfigurace
Jakmile budete muset udržovat sudoers soubor na více počítačích, budete s největší pravděpodobností chtít spravovat konfiguraci centrálně. Zde jsou dvě hlavní možnosti open source. Oba mají své výhody a nevýhody.
Můžete použít jednu z aplikací pro správu konfigurace, kterou také používáte ke konfiguraci zbytku vaší infrastruktury. Red Hat Ansible, Puppet a Chef mají moduly pro konfiguraci sudo . Problém s tímto přístupem je, že aktualizace konfigurací zdaleka neprobíhá v reálném čase. Uživatelé také mohou stále upravovat sudoery soubor lokálně a změnit nastavení.
sudo nástroj může také uložit svou konfiguraci v LDAP. V tomto případě probíhají změny konfigurace v reálném čase a uživatelé si nemohou zahrávat s sudoery soubor. Na druhou stranu má tato metoda také omezení. Nemůžete například používat aliasy nebo sudo když je server LDAP nedostupný.
Nové funkce
K dispozici je nová verze sudo hned za rohem. Verze 1.9 bude obsahovat mnoho zajímavých nových funkcí. Zde jsou nejdůležitější plánované funkce:
- Nahrávací služba pro centrální shromažďování nahrávek relací, která nabízí mnoho výhod ve srovnání s místním úložištěm:
- Je pohodlnější vyhledávat na jednom místě.
- Nahrávky jsou dostupné, i když je odesílací stroj mimo provoz.
- Nahrávky nemůže smazat někdo, kdo chce smazat své trasy.
- audit plugin nepřidává nové funkce do sudoers , ale místo toho poskytuje rozhraní API pro pluginy pro snadný přístup k jakémukoli druhu sudo protokoly. Tento plugin umožňuje vytvářet vlastní protokoly ze sudo události pomocí pluginů.
- Schválení plugin umožňuje schvalování relací bez použití pluginů třetích stran.
- A můj osobní favorit:podpora pluginů v Pythonu, která vám umožňuje snadno rozšířit sudo pomocí Pythonu namísto nativního kódování v C.
Závěr
Doufám, že vám tento článek dokázal, že sudo je mnohem víc než jen jednoduchá předpona. Existuje spousta možností, jak doladit oprávnění ve vašem systému. Nemůžete jen doladit oprávnění, ale také zlepšit zabezpečení kontrolou výtahů. Záznamy relací vám umožňují kontrolovat, co se děje ve vašich systémech. Můžete také rozšířit funkčnost sudo pomocí pluginů, buď pomocí něčeho, co je již k dispozici, nebo psaním vlastních. Konečně, vzhledem k seznamu připravovaných funkcí, můžete vidět, že i když sudo je desítky let starý, je to živý projekt, který se neustále vyvíjí.
Pokud se chcete dozvědět více o sudo , zde je několik zdrojů:
-
sudo webové stránky
-
sudo blog
-
Sledujte nás na Twitteru