Zpět na blog

Konfigurace souboru Linux Sudoers

Konfigurace souboru Linux Sudoers

Úvod

Přemýšleli jste někdy, proč musíte psát „sudo“ při pokusu o spuštění určitých příkazů v operačním systému Linux nebo Unix? Sudo je ve skutečnosti zkratka, která znamená „super-user do“. Když použijete příkaz sudo, můžete spouštět programy a provádět příkazy s bezpečnostními oprávněními jiného uživatele.

Ve výchozím nastavení umožňuje příkaz sudo uživatelům systému spouštět příkazy s oprávněními superuživatele. Nová instalace operačního systému Linux/Unix vytvoří účet root, který má oprávnění superuživatele. Při počátečním nastavení serveru se systémem Linux/Unix se správci systému přihlašují pomocí účtu root a přidělují systémová práva ostatním uživatelům systému. Tato nastavení jsou uložena v souboru s názvem sudoers. Účet s oprávněními root může soubor sudoers upravovat a měnit oprávnění ostatních uživatelů.

V tomto návodu si ukážeme, jak můžete získat oprávnění root a provádět úpravy v souboru sudoers.

Požadavky

Toto je praktický návod a pro jeho plné pochopení si budete muset příkazy vyzkoušet. V tomto návodu budeme používat server Ubuntu 20.04, nicméně podle těchto kroků můžete postupovat, i když máte jakoukoli moderní distribuci Linuxu, jako je Debian a CentOS. Můžete postupovat podle tohoto odkazu a nastavit si vlastní cloudový server Ubuntu na CloudSigma.

Získání oprávnění root

Oprávnění root můžete získat třemi způsoby, které si popíšeme níže:

Přihlášení jako root

Nejjednodušší metodou, kterou většina lidí používá k získání oprávnění root, je přihlášení do systému pomocí přihlašovacích údajů uživatele root. Pokud přistupujete k místnímu počítači, stačí zadat uživatelské jméno a budete vyzváni k zadání hesla.

Další metodou, kterou můžete použít k přihlášení jako root, je použití SSH – nástroje příkazového řádku pro přihlašování a provádění úloh na serveru. Vyžaduje uživatelské jméno a IP adresu vašeho serveru. Syntaxe pro přihlášení jako root je následující, nahraďte IP adresu vašeho serveru:

Když do terminálu zadáte výše uvedený příkaz, budete buď vyzváni k zadání hesla, pokud nemáte nastavené klíče SSH, nebo budete vyzváni k zadání hesla (passphrase) pro váš klíč SSH, pokud jste je nastavili. Po zadání správných přihlašovacích údajů budete přihlášeni. Postupujte podle tohoto návodu s podrobnými pokyny, jak se pomocí SSH připojit ke vzdálenému serveru v Ubuntu.

Použití su k získání oprávnění root

Do systému Linux se můžete přihlásit pomocí jakéhokoli jiného účtu, který není root, což je obvykle doporučený způsob při provádění nesprávních úloh. Kdykoli chcete získat oprávnění root, stačí do terminálu napsat su:

Systém vás vyzve k zadání hesla uživatele root, po jehož zadání získáte přístup k relaci shellu root. V této relaci shellu můžete provádět všechny administrativní úkoly, a kdykoli se budete chtít vrátit do normálního shellu, stačí stisknout Ctrl + D. Případně můžete do terminálu napsat exit a stisknout Enter.

Použití sudo ke spouštění příkazů s oprávněním root

Příkaz sudo, který byl stručně představen na začátku tohoto návodu, umožňuje spouštět jednorádkové příkazy bez nutnosti shellu s oprávněním root. Jednoduše napíšete sudo následované příkazem, který se má provést:

Chcete-li například aktualizovat systém, můžete zadat následující:

Požádá vás o heslo. Rozdíl mezi příkazem su a sudo je ten, že su vyžaduje heslo uživatele root, zatímco sudo vyžaduje heslo aktuálního uživatele. Přístup k sudo není uživatelům ve výchozím nastavení povolen, protože s sebou nese velká bezpečnostní rizika pro systém. Více o tom budeme hovořit v následujících částech.

Použití Visudo k úpravě souboru sudoers

Oprávnění sudo se konfigurují v souboru sudoers umístěném v /etc/sudoers. Tyto pravomoci jsou nezbytné pro každého uživatele, který chce získat přístup k systému Linux. Jakákoli syntaktická chyba zabrání uživatelům v přihlášení do systému, což způsobí nefunkčnost systému.

Visudo příkaz otevře soubor ve speciálním editoru, který při ukládání kontroluje syntaxi souboru. Je proto důležité, abyste používali pouze visudo příkaz k otevření souboru, abyste zabránili znefunkčnění vašeho serverového systému. Ve výchozím nastavení byl visudo nastaven tak, aby otevíral textový editor pomocí (vi) vim. Ubuntu však nakonfigurovalo visudo tak, aby používalo textový editor nano. V systému Debian nebo Ubuntu můžete přejít na jiný editor zadáním následujícího příkazu:

Zobrazí se seznam editorů, ze kterých si můžete vybrat výchozí editor, jak je znázorněno na snímku obrazovky. Vyberte číslo odpovídající editoru, který preferujete:

displays a list of editors

V distribuci CentOS Linux upravte soubor /etc/sudoers a přidejte následující řádky:

Zadejte následující příkaz. Nezapomeňte nahradit název your_editor_of_choice:

Tento příkaz přidá řádek do souboru ~/.bashrc. Chcete-li změny provést, zadejte do terminálu následující příkaz:

S nyní nakonfigurovaným visudo můžete otevřít soubor v /etc/sudoers zadáním příkazu:

Editing the Sudoers File

Po spuštění předchozího příkazu se soubor otevře ve vašem primárním editoru, jak jste jej nakonfigurovali. Níže je uveden obsah souboru:

Komentáře jsou poměrně popisné, ale níže si rozebereme, co jednotlivé řádky znamenají.

Výchozí řádky
  • Defaults env_reset – Obnoví proměnné prostředí terminálu, aby se odstranily všechny uživatelské proměnné. Tím se ze relace sudo vymažou potenciálně škodlivé proměnné.
  • Defaults mail_badpass – Instruuje systém, aby zasílal upozornění na neúspěšné pokusy o zadání hesla sudo e-mailem nakonfigurovanému uživateli mailto uživateli, obvykle účtu root.
  • Defaults secure_path – Obsahuje několik cest v souborovém systému, ve kterých bude operace sudo hledat aplikace k použití při spuštění, aby se zabránilo použití jiných uživatelem definovaných cest, které by mohly být pro systém nebezpečné.
Řádky specifikace uživatelských oprávnění
Tento řádek se liší od ostatních a specifikuje oprávnění uživatele root. Zde je vysvětlení, co jednotlivé značky v řádku znamenají:

  1. root ALL=(ALL:ALL) ALL – První pole specifikuje uživatelské jméno, na které se pravidlo bude vztahovat. V tomto případě se jedná o root uživatele.
  2. root ALL=(ALL:ALL) ALL – První ALL specifikuje, že se pravidlo bude vztahovat na všechny hostitele.
  3. root ALL=(ALL:ALL) ALL – Druhé ALL specifikuje, že uživatel, na kterého se toto pravidlo vztahuje (tj. root) může spouštět příkazy jako jakýkoli uživatel.
  4. root ALL=(ALL:ALL) ALL – Třetí ALL specifikuje, že uživatel, na kterého se toto pravidlo vztahuje (tj. root) může spouštět příkazy jako jakákoli skupina.
  5. root ALL=(ALL:ALL) ALL – Poslední ALL specifikuje, že se tato pravidla vztahují na všechny příkazy.

Z toho, co toto pravidlo naznačuje, vyplývá, že uživatel root může po zadání správného hesla spustit jakýkoli příkaz pomocí sudo.

Řádky specifikace skupinových oprávnění

Tyto řádky specifikují pravidla oprávnění sudo, která se vztahují na skupiny. Pole označují stejné akce jako řádky uživatelských oprávnění, s malým rozdílem. Začínají znakem %, který označuje názvy skupin.

Jak můžete vidět, skupina admin může provádět jakýkoli příkaz jako jakýkoli uživatel na jakémkoli hostiteli. Skupina sudo má stejné oprávnění s dodatečným oprávněním spouštět příkazy jako jakákoli skupina.

Řádek Include /etc/sudoers.d

Řádek #includedir /etc/sudoers.d může kvůli znaku # na začátku řádku vypadat jako komentář. Jedná se však o direktivu include, která určuje, že soubory v adresáři /etc/sudoers.d by měly být načteny a použity jako součást souboru sudoers. Soubory v tomto adresáři se řídí stejnými pravidly jako soubor sudoers.

Jakýkoli soubor v tomto adresáři, který neobsahuje tečku (.) a nekončí na ~ je přečten a připojen ke konfiguraci souboru sudoers. Tento adresář umožňuje aplikacím měnit oprávnění sudo při instalaci tím, že všechna přidružená pravidla umístí do jediného vyhrazeného souboru v adresáři /etc/sudoers.d bez úpravy výchozího souboru sudoers. Navíc, pokud chcete zkontrolovat nebo zrušit oprávnění pro nějakou aplikaci, můžete snadno zkontrolovat nebo upravit soubory v adresáři /etc/sudoers.d bez přímé úpravy souboru /etc/sudoers přímo.

Obecně platí, že všechny soubory v adresáři /etc/sudoers.d by měly být vždy upravovány pomocí příkazu visudo. Níže je uvedena syntaxe, nezapomeňte v příkazu nahradit název souboru, který chcete upravit:

Přiřazení oprávnění Sudo uživateli

Když novému uživateli udělíte obecný přístup k sudo, znamená to, že jste tomuto uživatelskému účtu udělili plný administrátorský přístup k systému. Jedná se o běžný úkol, který správci systému provádějí při vytváření jiných uživatelů než root s oprávněními sudo.

V systémech jako Ubuntu 20.04, které již mají obecnou administrační skupinu, můžeme uživateli snadno přiřadit oprávnění sudo přidáním uživatele do této skupiny. Skupina sudo, jak je vidět v souboru /etc/sudoers, má plná administrátorská oprávnění a uživatelské jméno můžeme do skupiny přidat zadáním následujícího příkazu:

Volitelně můžete použít příkaz gpasswd k dosažení stejného výsledku:

V systému CentOS se výchozí skupina s oprávněními sudo jmenuje wheel, takže oprávnění můžete přiřadit pomocí příkazu:

Volitelně můžete pomocí příkazu gpasswd dosáhnout stejného výsledku pomocí příkazu:

V některých případech wheel skupina v systému CentOS může být v souboru /etc/sudoers zakomentována. Chcete-li ji povolit, otevřete soubor pomocí visudo a odkomentujte řádek s názvem skupiny. To provedete odstraněním znaku # na začátku řádku: %wheel ALL=(ALL) ALL.

Vytváření vlastních pravidel

Se znalostí obecné syntaxe souboru sudoers, kterou jste doposud získali, je čas nastavit některá pravidla.

Vytvoření aliasů

Aliasy vám umožňují organizovat soubor sudoers seskupením položek pod různé „aliasy“. V této části se budeme zabývat třemi direktivami: User_Alias pro vytváření aliasů uživatelů/skupin, Cmnd_Alias pro vytváření aliasů příkazů a Runas_Alias pro povolení spuštění pod jiným uživatelem.

Například pomocí User_Alias, uvnitř vašeho /etc/sudoers souboru můžete přidat následující fragment kódu a vytvořit tak tři různé skupiny uživatelů. Někteří uživatelé mohou patřit do více než jedné skupiny:

Všimněte si, že všechny názvy skupin začínají velkým písmenem. Po přidání výše uvedených aliasů skupin do souboru /etc/sudoers můžete přiřadit oprávnění k aktualizaci databáze apt skupině GROUPTWO přidáním následujícího pravidla do souboru /etc/sudoers file:

Všimněte si, že bez specifikace uživatele/skupiny, pod kterými se má příkaz spustit, se příkaz sudo bude vždy standardně spouštět pod uživatelem root user.

Zde je příklad Cmnd_Alias , kde vytvoříme alias příkazu pro vypnutí a restartování systému. Pravidlo je pak přiřazeno skupině GROUPTHREE. Toho docílíte přidáním následujících řádků do souboru /etc/sudoers:

Ve výše uvedeném fragmentu kódu první řádek vytváří alias příkazu s názvem POWER, který obsahuje příkazy pro vypnutí a restart. Druhý řádek umožňuje členům skupiny GROUPTHREE spustit tento příkaz.

Zde je příklad Runas_Alias, kde vytvoříme alias, který umožní skupině uživatelů spouštět příkazy pod jiným uživatelem:

Ve výše uvedeném fragmentu kódu první řádek vytváří alias s názvem WEB, který určuje, že se alias spustí pod uživatelem apache nebo www-data. Druhý řádek přiřazuje alias skupině GROUPONE. Nyní mohou členové první skupiny spouštět příkazy buď jako uživatel apache nebo www-data users.

Zpřísnění pravidel

V této části se dozvíte o různých způsobech, jakými můžete řídit, jak sudo reaguje na volání. Některé příkazy jsou na jednorázových systémech relativně neškodné. V takových případech můžete uživatelům povolit jejich spuštění s oprávněními root bez nutnosti zadávat heslo uživatele root. Můžete například vytvořit pravidlo, které uživatelům ve skupině GROUPONE umožní spustit příkaz updatedb bez zadání hesla, a to přidáním následujícího řádku do souboru /etc/sudoers:

Značka NOPASSWD znamená, že nebude vyžadováno žádné heslo. Protějškem značky NOPASSWD je značka PASSWD, což je výchozí chování. To znamená, že při výzvě musí být zadáno heslo.

Značka se vztahuje na pravidlo, pokud není přepsána svým protějškem, například:

V tomto pravidle mohou uživatelé ve skupině GROUPTWO spustit příkaz updatedb příkaz bez zadání hesla. Před spuštěním příkazu kill však musí zadat heslo.

V některých případech můžete chtít uživatelům omezit spouštění určitých příkazů, abyste zabránili nebezpečnému spuštění. Zde přichází na řadu NOEXEC tag. Některé programy mohou spouštět jiné příkazy ze svého rozhraní. Příkladem takového programu je less. Pokud v rozhraní less zadáte příkaz s následující syntaxí, spustí se, což způsobí neočekávané chování.

Chcete-li takovému chování zabránit, můžete do souboru /etc/sudoers přidat následující pravidlo, kterým omezíte daného uživatele identifikovaného pomocí username:

Additional Information

V této části uvádíme některé další informace, direktivy a příkazy, které pro vás mohou být při práci se sudo užitečné.

Pokud jste v konfiguraci použili Runas_Alias, který určuje, že uživatel nebo skupina může běžet jako jiný uživatel, můžete spouštět příkazy jako tito uživatelé pomocí příznaku -u u uživatele a příznaku -g u skupin. Zde je syntaxe:

Každý z příkazů vás vyzve k zadání příslušného hesla. Pro usnadnění si sudo heslo na nějakou dobu ukládá, abyste ho nemuseli zadávat při každém spuštění příkazu se sudo. Po dokončení práce s příkazy s oprávněním sudo můžete tuto dobu vymazat zadáním následujícího příkazu:

V případě, že máte k provedení více úkolů s oprávněním sudo a chcete prodloužit dobu před vyžádáním hesla, nebo se chcete vyhnout tomu, aby příkaz sudo později vyžadoval heslo, můžete čas obnovit zadáním následujícího příkazu:

Příkaz vás vyzve k zadání hesla a uloží jej do mezipaměti pro pozdější použití sudo.

Chcete-li zobrazit seznam oprávnění sudo definovaných pro vaše jméno, můžete zadat následující příkaz:

Příkaz vypíše všechna pravidla nakonfigurovaná v souboru /etc/sudoers, která se vztahují na vaše uživatelské jméno. Z těchto pravidel si můžete udělat představu o tom, jaké úkoly může vaše uživatelské jméno v systému provádět. Zde je ukázkový snímek obrazovky:

screenshot

V některých případech se může stát, že spustíte příkazy a ty selžou, protože jste před ně zapomněli napsat sudo. V takových situacích možná budete muset příkaz napsat znovu a začít se sudo. Abyste nemuseli příkaz přepisovat, můžete využít funkci bashi pro „opakování posledního příkazu“. Syntaxe je tvořena dvěma vykřičníky. Poslední příkaz, který jste spustili v terminálu, můžete provést zadáním následujícího:

Na závěr je důležité vědět, že sudo jednoduše povýší spouštěný příkaz na oprávnění sudo. Další informace naleznete v pokynech na tomto odkazu, kde si můžete se svými uživateli užít trochu zábavy.

Závěr

Při práci s více uživateli je klíčové vyznat se v příkazu sudo a souboru sudoers. V tomto návodu jsme si představili základy čtení a úprav souboru sudoers a také různé metody, které můžete použít k získání oprávnění root.

Mějte vždy na paměti, že oddělení oprávnění je to, co činí systémy Linux bezpečnými. Oprávnění superuživatele by proto neměla být udělována běžným uživatelům. Přidělujte pouze ta oprávnění, která jsou pro konkrétního uživatele nezbytně nutná k provádění jeho specifických úkolů v systému, a nikoli všechna oprávnění.

Přejeme příjemnou práci s počítačem!

author

Manpreet Singh

Autor · CloudSigma

Preslav Dobrev je kreativní designér ve společnosti CloudSigma, který se zaměřuje na konzistentní firemní identitu prostřednictvím tradičních i inovativních marketingových kanálů. Je zdatný v propojování umělecké vize se strategickým marketingem za účelem vytváření působivých příběhů značky.

Komentáře

Zatím žádné komentáře. Buďte první.