Jak používat sudo v Linuxu a zvládnout soubor sudoers

  • Sudo vám umožňuje kontrolovaným a dočasným způsobem spouštět příkazy jako jiný uživatel (obvykle root).
  • Nastavení oprávnění jsou definována v souboru /etc/sudoers a v souborech /etc/sudoers.d pomocí příkazu visudo.
  • Skupiny jako sudo nebo wheel a aliasy v sudoers usnadňují udělování specifických oprávnění konkrétním uživatelům.
  • Možnosti jako NOPASSWD vám umožňují upravit zabezpečení a pohodlí při používání Sudo v různých scénářích.

použití sudo v Linuxu

Pokud pracujete s Linuxem denněDříve nebo později narazíš na příkaz sudoJe to klíč, který vám umožňuje provádět administrativní úkoly bez nutnosti přihlašování jako uživatel. root Neustále, což je nejen nepohodlné, ale i docela nebezpečné. Pochopení toho, jak to funguje, jaké má možnosti a jak to konfigurovat, je klíčové, pokud nechcete nechtěně narušit systém nebo zanechat bezpečnostní zranitelnost, aniž byste si toho uvědomili.

V tomto článku se pustíme do detailů. O co přesně jde? sudoJaký je jeho vztah k uživateli? root a se souborem /etc/sudoersJaké jsou rozdíly mezi používáním su y sudoa jak můžete jemně doladit nastavení a udělit tak specifická oprávnění (i bez nutnosti hesla) určitým uživatelům nebo skupinám. Myšlenka je taková, že až dočtete, budete mít jasno v tom, kdy je použít sudoCo dělá pod povrchem a jak to ovládat bez obav.

Co je sudo a proč je v Linuxu tak důležité?

Příkaz sudo Je to jeden z klíčových kusů jakéhokoli moderního linuxového systému. Jeho název se obvykle vysvětluje jako „superuser do“ nebo „substitute user and do“ a jeho funkce je jednoduchá, ale výkonná: umožňuje autorizovanému uživateli spouštět příkazy, jako by byl jiným uživatelem v systému, obvykle rootpo omezenou dobu.

V praxi to znamená že běžný uživatel může provádět administrativní úkoly – instalaci balíčků, úpravu systémových nastavení, správu služeb, změnu oprávnění k citlivým souborům – bez přihlásit se přímo jako rootToto oddělení mezi běžným uživatelem a superuživatelem je jedním z pilířů bezpečnosti v Linuxu.

Většina aktuálních distribucí (Debian, Ubuntu, mnoho derivátů, systémy typu SLE atd.) přinášejí sudo Je předinstalován a nedoporučuje se jej odinstalovat ani s ním lehkovážně manipulovat. Navíc je v mnoha systémech uživatel vytvořený během instalace automaticky přidán do administrátorské skupiny, která má oprávnění jej používat. sudoa stane se tak výchozím privilegovaným uživatelem.

Něco velmi důležitého k zapamatování je to, že sudo Nepřevádí uživatele na root Neposkytuje plný přístup k systému, ale spíše umožňuje uživatelům provádět specifické příkazy jako jiný uživatel, a to na základě pravidel definovaných v jeho konfiguraci. Tímto způsobem lze udělit velmi specifická oprávnění, aniž by byl poskytnut plný přístup k systému.

Jak Sudo funguje interně

Základní provoz sudo Z pohledu uživatele je to velmi jednoduché: umístíte slovo sudo před příkazem, který chceme spustit s oprávněními. Například pro aktualizaci seznamu balíčků pomocí apt-get V Debianu nebo Ubuntu bude muset běžný uživatel udělat něco jako:

> sudo apt-get update

Pokud se pokusíte spustit administrátorský příkaz bez příkazu sudoNejčastěji se zobrazí chyby, jako například „Oprávnění odepřeno“ nebo zprávy, které upozorňují, že určitý uzamčený soubor nelze otevřít v /var/lib nebo v jiném systémovém adresáři. Jakmile zopakujete stejný příkaz a přidáte sudo Dále se systém zeptá na vaše heslo a pokud je vše správně nakonfigurováno, příkaz bude proveden s oprávněními superuživatele.

Když spustíte příkaz s sudoProgram nejprve na základě konfiguračního souboru zkontroluje, zda je uživatel oprávněn jej používat a pro jaké konkrétní příkazy. /etc/sudoers a v mnoha systémech i další soubory v adresáři /etc/sudoers.d/Pokud to pravidla dovolí, sudo Ptá se na heslo (obvykle vaše, ne jejich). root) a dočasně zvýší vaše oprávnění pro spuštění příkazu jako cílový uživatel.

Zajímavý detail, který vás zpočátku často zaskočí Když se na terminálu zobrazí výzva k zadání hesla, při psaní se nezobrazují žádné znaky, ani hvězdičky. To je zcela normální: zadávání je „slepé“ a je to součást bezpečnostních opatření, která zabraňují zobrazení délky vašeho hesla.

Sudo navíc udržuje jakýsi druh „důvěryhodné relace“Po úspěšném zadání hesla zůstanou zvýšená oprávnění aktivní po určitou dobu (ve výchozím nastavení přibližně 15 minut v mnoha distribucích) ve stejném terminálu. Během této doby můžete spustit další příkazy pomocí sudo aniž by se vás znovu a znovu ptal na heslo.

Základní syntaxe a nejužitečnější možnosti příkazu Sudo

Obecná syntaxe sudo Je to velmi jednoduché:

> příkaz sudo

Nejběžnější způsob použití je jednoduše jak sudo comandoNabízí však řadu zajímavých možností. Mezi nejpoužívanější (a v mnoha oficiálních průvodcích zdůrazňované) patří:

  • -hZobrazí nápovědu se syntaxí a všemi dostupnými možnostmi programu. sudo.
  • -V: zobrazuje aktuální verzi sudo a některé podrobnosti o kompilaci.
  • -vObnoví „dobu odkladu“ pro ověřování, tj. obnoví počítadlo, aby vaše oprávnění nevypršela a vy nemuseli brzy znovu zadávat heslo.
  • -k: okamžitě zneplatní uložené přihlašovací údaje; je to jako říct sudo který „zapomene“, že jste se již ověřili, a příště vás donutí znovu požádat o heslo.
  • -l: zobrazuje, které příkazy máte oprávnění spustit sudo podle aktuální konfigurace sudoers.

Existují také velmi užitečné možnosti pro spouštění příkazů jako ostatní uživatelé. odlišný od root. Například s -u Pro konkrétní příkaz můžete zadat cílového uživatele:

> sudo -u pedro whoami

V tomto případě, i když vaše relace patří jinému uživateli, příkaz whoami Vrátí „pedro“, protože byl spuštěn, jako byste byli tímto uživatelem. To je velmi výhodné pro testování oprávnění nebo provádění úkolů spojených se servisními účty, aniž byste museli ručně přepínat relace.

sudo versus su a uživatel root

V Linuxu existuje několik mechanismů současně. Chcete-li získat administrátorská oprávnění: zaregistrujte se přímo jako root, použijte příkaz su a použití sudoKaždý z nich má své výhody a nevýhody a jejich pochopení vám ušetří spoustu problémů.

Přihlaste se přímo jako root (například s ssh root@servidorDíky tomu máte od začátku plný přístup k systému. To je velmi pohodlné, ale také extrémně nebezpečné: jakýkoli chybně zadaný příkaz může vymazat polovinu systému, změnit kritická oprávnění nebo znemožnit používání počítače. Proto se ve většině případů práce s přihlašovacími relacemi nedoporučuje. root otevřeno trvale.

Příkaz su (náhradní uživatel) Umožňuje přepnout na jiného uživatele v rámci stejného terminálu. Původní relace zůstává na pozadí a „zapouzdřuje“ novou. Pokud spustíte su pedroBudete požádáni o heslo. pedro a jakmile jste uvnitř, pokud napíšete exit Vrátíte se k předchozímu uživateli. Pokud nezadáte uživatelské jméno, su Ve výchozím nastavení se pokouší přepnout na root.

Je tu důležitá nuance su: pokud nepovolíte možnost přihlášení (su -, su -l o su --login), změní uživatele, ale ne prostředí. To znamená, že zůstanete v pracovním adresáři a s proměnnými předchozího uživatele, což může způsobit chyby oprávnění (například při pokusu o zobrazení seznamu domov (původního uživatele s přihlašovacími údaji nového uživatele).

Místo toho, sudo Nabízí bezpečnější a lépe kontrolovatelný přístupHeslo pro to znát nemusíte rootale vaše vlastní heslo a systém rozhodne, /etc/sudoerskteří uživatelé mohou spouštět které příkazy, například kteří uživatelé a z kterých počítačů. Dále každé použití sudo Zaznamenává se to v protokolech, což usnadňuje audit toho, co bylo provedeno se zvýšenými oprávněními.

Pro interaktivní relace „jako jiný uživatel“ se sudoExistuje několik velmi praktických variant:

  • Sudo -s: otevře shell jako cílový uživatel, který zdědí prostředí aktuálního uživatele.
  • sudo -i: spustí úplný přihlašovací shell pro cílového uživatele s vyčištěným prostředím a adresářem. $HOME, načítání souborů jako .profile o .bash_profile.

Obě možnosti jsou užitečné pro práci na jednorázové bázi. jako jiný uživatel (obvykle root nebo jakýkoli servisní účet) bez nutnosti pamatovat si a používat heslo, a zároveň si zachovat kontrolu a záznam provedených akcí.

Soubor /etc/sudoers a adresář /etc/sudoers.d

Srdce konfigurace sudo je to v archivu /etc/sudoersTam je definováno, kdo to může používat. sudoodkud, například který uživatel a které konkrétní příkazy lze spustit. Kromě toho mnoho distribucí obsahuje direktivu, která automaticky načte všechny další konfigurační soubory umístěné v /etc/sudoers.d/.

Je zásadní tomu porozumět /etc/sudoers Neměli byste upravovat „bez řádné úpravy“ s libovolným textovým editorem. Vždy se musí upravit pomocí příkazu visudo, který otevře soubor s editorem (ve výchozím nastavení vi o nano(v závislosti na konfiguraci), ale přidává vrstvu zabezpečení: před uložením kontroluje syntaxi a zabraňuje tomu, aby jej upravovaly dvě osoby současně.

Typické použití pro úpravu sudoerů Je to:

> sudo visudo -f /etc/sudoers

Můžete také vytvořit specifické soubory v /etc/sudoers.d/ k oddělení konfigurací podle skupin uživatelů, služeb atd. Můžete mít například soubor /etc/sudoers.d/networking se specifickými pravidly pro správu sítě, aniž by se mísila se zbytkem obecné konfigurace.

Při otevírání souboru /etc/sudoers na typickém systémuUvidíte řádky jako tyto (bez započítání komentářů):

  • kořen VŠE=(VŠE:VŠE) VŠEuživatel root Můžete spustit libovolný příkaz na libovolném hostiteli, jako libovolný uživatel a libovolná skupina.
  • %admin VŠE=(VŠE) VŠEkdokoli ve skupině admin má plná oprávnění k použití sudo.
  • %sudo ALL=(ALL:ALL) ALLTotéž platí pro skupinu sudo, což je v Ubuntu a derivátech obvykle klíčová skupina.
  • #include /etc/sudoers.d: označuje, že by se měly číst i soubory v daném adresáři (i když #(V tomto konkrétním kontextu se nejedná o komentář.)

Kromě pravidel pro uživatele a skupiny, sudoers Umožňuje definovat aliasy pro zjednodušení složitých konfigurací: uživatelské aliasy (User_Alias), příkazů (Cmnd_Alias), z prováděcích skupin (Runas_Alias) nebo hostitelů (Host_Alias).

Správa uživatelů a skupin pomocí sudoerů

Běžná praxe na serverech kontroluje přístup k sudo prostřednictvím skupin. Například v mnoha systémech stačí přidat uživatele do skupiny sudo o wheel abyste mohli získat plná administrativní povolení.

Kontrola, kteří uživatelé patří do skupiny určeno (například sudo), můžete použít:

> grep 'sudo' /etc/group

Pokud chcete uživateli udělit oprávnění sudoObvyklá praxe je přidat jej do odpovídající skupiny. Například začlenit bill Do skupiny sudo:

> sudo adduser bill sudo

Kdy potřebujete tato oprávnění zrušitJednoduše jej odeberte ze skupiny:

> sudo deleser bill sudo

Další, mnohem lepší možnost Zahrnuje udělení oprávnění pouze pro určité příkazy, aniž by se jim poskytovala volná ruka. Za tímto účelem se obvykle vytvářejí specifické soubory v /etc/sudoers.d/Například byste mohli definovat soubor /etc/sudoers.d/networking s něčím jako:

Cmnd_Alias ​​​​CAPTURE = /usr/sbin/tcpdump
Cmnd_Alias ​​​​SERVERY = /usr/sbin/apache2ctl, /usr/bin/htpasswd
Cmnd_Alias ​​​​NETALL = ZÁZNAM, SERVERY
%netadmin ALL = NETALL

S touto konfigurací každý uživatel ve skupině netadmin budete moci spustit příkazy definované pod aliasem NETALL (který seskupuje aliasy) CAPTURE y SERVERSbez plného přístupu ke všemu sudoVše, co je potřeba, je přidat k bill Do skupiny netadmin abyste mohli použít tcpdump a definované serverové nástroje.

Běžné příkazy, které vyžadují sudo

V každodenní správě systémůExistuje několik typů úkolů, které téměř vždy jdou ruku v ruce s sudoprotože zahrnují úpravu systému nebo přístup k privilegovaným informacím.

Správa balíků: v distribucích založených na zypper, apt nebo jiné správce balíčků, jakákoli operace, která instaluje, odebírá nebo aktualizuje software, vyžaduje oprávnění. Například:

> instalační balíček sudo zypper
> sudo apt-get install docker-ce

Dotazy, které však pouze čtou informace, například výpis repozitářů, lze obvykle spustit bez sudoJde o testování a sledování, kdy systém sám vrátí chybu oprávnění.

Správa služeb pomocí systemd Obvykle se to dělá prostřednictvím systemctlAkce, jako je spuštění, zastavení nebo restartování služeb, obvykle vyžadují sudo:

> sudo systemctl restartujte apache2

Naproti tomu neškodnější příkazy, jako je kontrola stavu služby Mohou fungovat bez oprávnění na mnoha systémech:

> stav systemctl NetworkManager

Správa uživatelských účtů také vyžaduje opatrnostPříkazy jako usermod, useradd o deluser Měly by téměř vždy jít s sudo, protože upravují uživatelskou databázi systému:

> sudo usermod -L -f 30 tux

Nakonec, oprávnění k souborům a správa vlastnictví s chown A společnost obvykle potřebuje oprávnění, když ovlivňují systémové cesty nebo jiné uživatele. Například, aby všechny soubory a podadresáře /home/test/tux-files stát se majetkem uživatele tux Můžete použít:

> sudo chown -R tux:tux /home/test/tux-soubory

Praktické příklady použití Sudo

Podívejme se na některé reálné případy. kde sudo To rozlišuje mezi chybou oprávnění a správnou administrativní operací.

Aktualizace indexů balíčků v Debianu/Ubuntu Bez oprávnění bude hlásit chyby, protože nemůže manipulovat se soubory. /var/lib/apt/listsPříkaz:

> apt-get aktualizace

Skončí to zprávou „Přístup odepřen“Jakmile to takto zopakujete, věci se změní:

> sudo apt-get update

Systém si vás vyžádá heslo.a pokud je váš uživatel autorizován sudoersAktualizace proběhne bez problémů. Je to opakující se vzorec: chyba oprávnění bez sudosprávné provedení s sudo.

Dalším velmi častým příkladem je kopírování souborů do systémových cest.Jak /usr/local/binPokud se pokusíte zkopírovat skript jednoduchým způsobem:

> cp script.sh /usr/local/bin/

Je normální, že si terminál stěžuje že nemáte oprávnění k zápisu do daného adresáře. Pokud operaci zopakujete přidáním sudo:

> sudo cp script.sh /usr/local/bin/

Budete požádáni o heslo a po úspěšném ověřeníKopie bude vytvořena a zaznamenána jako provedená se zvýšenými oprávněními.

Sudo můžete také kombinovat s volbou -u spouštět specifické příkazy jako jiný uživatel, bez změny relace nebo použití su. Například:

> kdo
> sudo -u pedro whoami

V první objednávce se zobrazí vaše skutečné uživatelské jméno., zatímco druhý vrátí „pedro“, což dokazuje, že spuštění bylo provedeno od daného cílového uživatele.

Udělení oprávnění bez hesla a další pokročilé možnosti

Jedna z nejsilnějších věcí na pocení Tato funkce umožňuje nastavit rozsah, v jakém je heslo vyžadováno, a pro které konkrétní příkazy. Někdy můžete chtít, aby někteří uživatelé mohli spouštět určité příkazy, aniž by museli pokaždé zadávat heslo, například pro automatizované skripty nebo tlačítka pro vypnutí v prostředí plochy.

Toho je dosaženo pomocí označení NOPASSWD v pravidlech sudoersNapříklad, pokud chcete miusuario může vykonat /bin/cat s sudo Bez nutnosti zadávat heslo můžete přidat řádek:

můjuživatel VŠE = NOHESSWD: /bin/cat

Podobně byste mu mohli povolit spravovat vypnutí zařízení. bez opakovaného ověřování, přidáním něčeho jako:

můjuživatel VŠE = BEZHESLA: /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart

Pro čistší a škálovatelnější konfiguraceJe vhodné používat aliasy. Typickým příkladem je definování uživatelské skupiny, skupiny příkazů a v případě potřeby i aliasu uživatele pro spuštění:

User_Alias ​​​​GROUP = pepe, perico, andres
Cmnd_Alias ​​​​POWER = /sbin/shutdown, /sbin/halt, /sbin/reboot, /sbin/restart
Runas_Alias ​​​​WEB = www-data, apache

S těmito definicemi byste pak mohli napsat Mnohem srozumitelnější pravidla, jako například:

CELÁ SKUPINA = SÍLA

Tedy každý uživatel uvedený v aliasu GRUPO Počítač budete moci vypnout nebo restartovat pomocí sudoa můžete si nastavit, zda chcete heslo vyžadovat, nebo ne NOPASSWD o PASSWDMůžete také omezit použití na konkrétní hostitele pomocí Host_Alias takže je platný pouze z konkrétní sítě.

Za hranicemi NOPASSWDExistují i ​​jiné štítky jak NOEXEC (aby se zabránilo spuštění jiných programů se zvýšenými oprávněními příkazem) nebo drobné kuriozity, jako je přidání insults k linii Defaults, aby sudo Pokaždé, když se ti nepodaří zadat heslo, udělám vtip v angličtině.

To vše ukazuje, že sudoers je mnohem víc než jen „root switch“.Při správné konfiguraci vám umožňuje navrhnout velmi detailní model oprávnění, přizpůsobený vašim potřebám a s úrovní zabezpečení, která je mnohem vyšší než typické „přihlaste se jako root a dělejte, co chcete“.

Mít nástroj jako sudosprávně pochopený a správně nakonfigurovanýJe to téměř povinné na každém moderním linuxovém systému, kde pracuje více uživatelů nebo kde chcete minimalizovat rizika, i když jste jediný uživatel. Využití kombinace sudo, /etc/sudoers, skupiny jako sudo o wheel a pokročilé tagy, jako například NOPASSWDMůžete dosáhnout velmi rozumné rovnováhy mezi pohodlím, jemnou kontrolou a bezpečností, aniž byste museli být neustále připoutáni k tréninku. root ani se nespoléhat jen na štěstí.

root uživatel v Linuxu
Související článek:
Uživatel root v Linuxu: oprávnění, rizika a osvědčené postupy

Přidat jako preferovaný zdroj