GNU/Linux >> Znalost Linux >  >> Linux

Použití sudo k delegování oprávnění v Linuxu

V mém předchozím článku „Skuteční sysadmini nedělají sudo“ jsem diskutoval o opravdu hrozném zneužití sudo podle některých distribucí. V tomto článku, který je částečně výňatkem z kapitoly 11 mé knihy „Používání a správa Linuxu, Zero to SysAdmin, svazek 1:Začínáme“, prozkoumám několik platných případů použití sudo .

Případ použití 1:Vzdálená kopie souboru

Nedávno jsem napsal krátký program Bash pro kopírování některých souborů MP3 z USB flash disku na jednom síťovém hostiteli do jiného síťového hostitele. Soubory se zkopírují do konkrétního adresáře na serveru, který provozuji pro organizaci, ke které patřím, odkud je lze stáhnout a přehrát.

Můj program dělá několik dalších věcí, jako je změna názvů souborů před jejich zkopírováním, aby byly automaticky seřazeny podle data na webové stránce. Po ověření, že přenos proběhl správně, také odstraní všechny soubory na jednotce USB. Tento pěkný malý program má několik možností, jako je -h pro zobrazení nápovědy -t pro testovací režim a několik dalších.

Můj program, jakkoli je úžasný, musí běžet jako root, aby mohl vykonávat své primární funkce. Bohužel tato organizace má kromě mě jen pár lidí, kteří mají zájem o správu našich zvukových a počítačových systémů, což mě staví do pozice, kdy hledám polotechnické lidi, kteří by zaškolili přihlášení k počítači, který používáme k převodu a spusťte tento malý program.

Není to tak, že bych program nemohl spustit sám, ale nejsem tam vždy z různých důvodů, jako je cestování a nemoc. I když jsem přítomen jako „Líný SysAdmin“, mám rád, když za mě moji práci dělají ostatní. Takže píšu skripty pro automatizaci těchto úkolů a používám sudo pomazat několik uživatelů, aby spouštěli skripty. Mnoho linuxových příkazů vyžaduje, aby byl uživatel root, aby mohly být spuštěny. To chrání systém před náhodným poškozením, jako je to způsobené mou vlastní hloupostí a úmyslným poškozením uživatelem se zlými úmysly.

Udělejte to sudo, které vám jde tak dobře

sudo program je užitečný nástroj, který mi jako systémovému správci s přístupem root umožňuje delegovat odpovědnost za všechny nebo několik administrativních úkolů na jiné uživatele počítače, jak uznám za vhodné. Umožňuje mi to provést delegování bez ohrožení hesla uživatele root, a tak zachovat vysokou úroveň zabezpečení hostitele.

Předpokládejme například, že jsem běžnému uživateli, „ruserovi“ udělil přístup ke svému programu Bash, myprog , který musí být spuštěn jako root, aby mohl vykonávat část jeho funkcí. Nejprve se uživatel přihlásí jako ruser se svým vlastním heslem. Uživatel poté pomocí následujícího příkazu spustí myprog .

sudo myprog

sudo program kontroluje /etc/sudoers a ověří, že ruser má povoleno spouštět myprog . Pokud ano, sudo požaduje, aby uživatel zadal své vlastní heslo – nikoli heslo uživatele root. Poté, co ruser zadá své vlastní heslo, program se spustí. sudo také zaznamenává fakta o přístupu k myprog s datem a časem spuštění programu, úplným příkazem a uživatelem, který jej spustil. Tato data jsou přihlášena do /var/log/security .

Zjistil jsem, že protokol každého příkazu běží pomocí sudo být nápomocný při tréninku. Vidím, kdo co udělal a zda skutečně zadal příkaz správně.

Udělal jsem to, abych delegoval oprávnění ke spuštění jednoho programu sobě a jednomu dalšímu uživateli. Nicméně sudo lze použít k mnohem více. To může umožnit správci systému delegovat pravomoc pro správu síťových funkcí nebo specifických služeb jedné osobě nebo skupině důvěryhodných uživatelů. Umožňuje delegovat tyto funkce a zároveň chránit zabezpečení hesla root.

Konfigurace souboru sudoers

Jako správce systému mohu použít /etc/sudoers umožňuje uživatelům nebo skupinám uživatelů přístup k jednomu příkazu, definovaným skupinám příkazů nebo všem příkazům. Tato flexibilita je klíčem k výkonu i jednoduchosti použití sudo pro delegování.

Zkopíroval jsem celý sudoers soubor na Obrázku 1 z hostitele, na kterém jej používám, abych jej pro vás dekonstruoval. Přišlo mi to velmi matoucí, když jsem se s tím poprvé setkal. Doufejme, že to pro vás nebude tak nejasné, až projdeme. Líbí se mi, že distribuce založené na Red Hatu mívají výchozí konfigurační soubory se spoustou komentářů a příkladů, které poskytují vodítko. To vše usnadňuje, protože je potřeba méně googlování.

K úpravě sudoers nepoužívejte svůj standardní editor soubor. Použijte visudo protože je navržen tak, aby umožnil jakékoli změny, jakmile je soubor uložen a opustíte editor. Kromě vi je možné použít editory stejným způsobem jako visudo .

Začněme analyzovat tento soubor na začátku s několika typy aliasů.

Aliasy hostitele

Sekce Aliasy hostitelů se používá k vytvoření skupin hostitelů, na kterých lze použít příkazy nebo aliasy příkazů k poskytování přístupu. Základní myšlenkou je, že tento jediný soubor bude udržován pro všechny hostitele v organizaci a zkopírován do /etc na každém hostiteli. Některé hostitele, například servery, lze tedy nakonfigurovat jako skupinu, aby některým uživatelům umožnili přístup ke konkrétním příkazům, jako je možnost spouštět a zastavovat služby, jako je HTTPD, DNS, sítě, možnost připojovat souborové systémy atd.
IP adresy lze použít místo názvů hostitelů v aliasech hostitele.

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
User_Alias AUDIO = dboth, user

## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
 
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw
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 env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  ALL=(ALL) ALL

## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL

## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

################################################################################
# Added by David Both, 11/04/2017 to provide limited access to myprog #
################################################################################
#
AUDIO guest1=/usr/local/bin/myprog

Obrázek 1 :Výchozí soubor sudoers s mými úpravami tučně.

Uživatelské aliasy

Další skupinou příkladů konfigurace jsou uživatelské aliasy. To umožňuje uživateli root třídit uživatele do skupin s aliasy, takže celé skupině lze poskytnout přístup k určitým funkcím root. Pro malý program, který jsem napsal, jsem do této sekce přidal následující alias, který definuje alias AUDIO a k tomuto aliasu přiřadí dva uživatele.

User_Alias AUDIO = dboth, ruser

Je to možné, jak je uvedeno v sudoers samotný, jednoduše použít skupiny Linux definované v /etc/groups soubor místo aliasů. Pokud zde již máte definovanou skupinu, která vyhovuje vašim potřebám, například „audio“, použijte název skupiny, kterému předchází % podepište se takto:%audio při přiřazování příkazů dostupných skupinám později v sudoers soubor.

Aliasy příkazů

Dále dolů sudoers soubor je část s aliasy příkazů. Tyto aliasy jsou seznamy souvisejících příkazů, jako jsou síťové příkazy nebo příkazy potřebné k instalaci aktualizací nebo nových RPM balíčků. Tyto aliasy umožňují systémovému správci snadno povolit přístup ke skupinám příkazů.

V této části je již nastavena řada aliasů, které usnadňují delegování přístupu ke konkrétním typům příkazů. Pro náš případ použití žádné z nich nepotřebujeme.

Výchozí nastavení prostředí

Další část nastavuje některé výchozí proměnné prostředí. Položka, která je v této sekci nejzajímavější, je !visiblepw řádek, který zabraňuje sudo od spuštění, pokud je uživatelské prostředí nastaveno tak, aby zobrazovalo heslo. Toto je bezpečnostní opatření, které by nemělo být přepsáno.

Sekce příkazů

Tato sekce je hlavní částí sudoers soubor. Vše potřebné lze provést bez všech aliasů přidáním dostatečného množství položek zde. Aliasy to zjednodušují tím, že pomocí již definovaných aliasů sdělují sudo kdo co umí na kterých hostitelích. Příklady jsou samozřejmé, jakmile pochopíte syntaxi v této části. Podívejme se tedy na syntaxi, kterou najdeme v sekci příkazů. Na Obrázku 2 máme obecný záznam pro našeho uživatele, ruser.

ruser ALL=(ALL) ALL

Obrázek 2 :Obecná položka, která říká, že ruser může spouštět jakýkoli program na libovolném hostiteli jako jakýkoli uživatel.

První ALL na řádku označuje, že toto pravidlo platí pro všechny hostitele. Druhé ALL umožňuje ruserovi spouštět příkazy jako kterýkoli jiný uživatel. Ve výchozím nastavení jsou příkazy spouštěny jako uživatel root, ale ruser může zadat v sudo příkazového řádku, že program je spuštěn jako jakýkoli jiný uživatel. Poslední ALL znamená, že ruser může spouštět všechny příkazy bez omezení. Tato položka by způsobila, že by se z Rusera stal uživatel root. Tento záznam nebudeme používat, protože nechceme, aby tento uživatel měl všechny tyto možnosti.

Všimněte si, že existuje záznam pro root, jak je znázorněno na Obrázku 3 . Tento záznam umožňuje rootovi mít všeobjímající přístup ke všem příkazům na všech hostitelích.

root ALL=(ALL) ALL

Obrázek 3 :Záznam, který říká, že toot může spouštět jakýkoli program na libovolném hostiteli jako jakýkoli uživatel.
Ale samozřejmě jsem to musel vyzkoušet, takže jsem zakomentoval řádek na obrázku 3 a jako root se pokusil spustit chown bez sudo . To fungovalo – k mému velkému překvapení. Pak jsem použil sudo chown a to selhalo se zprávou „root není v souboru sudoers. Tento incident bude nahlášen." To znamená, že root může spouštět vše jako root, ale nic při použití sudo příkaz. To by zabránilo rootovi spouštět příkazy jako ostatní uživatelé prostřednictvím sudo příkaz, ale root má mnoho způsobů, jak toto omezení obejít.

Záznam na Obrázku 4 je ten, který jsem přidal pro řízení přístupu k myprog . Specifikuje, že uživatelé, kteří jsou uvedeni ve skupině AUDIO, jak je definováno v horní části sudoers mít přístup pouze k jednomu programu, myprog , na jednom hostiteli, host1.

AUDIO guest1=/usr/local/bin/myprog

Obrázek 4 :Toto je položka, kterou jsem přidal, abych umožnil uživatelům, kteří jsou součástí skupiny AUDIO, přístup k myprog na hostiteli, host1.

Všimněte si, že syntaxe řádku na obrázku 4 určuje pouze hostitele, kterému má být tento přístup povolen, a program. Neurčuje, že uživatel může spouštět program jako kterýkoli jiný uživatel.

Obcházení hesel

Obrázek 5 ilustruje použití NOPASSWORD pro umožnění uživatelům uvedeným ve skupině AUDIO spouštět myprog bez nutnosti zadávat jejich hesla.

AUDIO guest1=NOPASSWORD : /usr/local/bin/myprog

Obrázek 5 :Tento hypotetický záznam by umožnil uživatelům, kteří jsou součástí skupiny AUDIO, přístup k myprog bez nutnosti zadávat jejich hesla.

Neudělal jsem to pro svůj program, protože se domnívám, že uživatelé s sudo přístup se musí zastavit a přemýšlet o tom, co dělají, a to s tím může trochu pomoci. Použil jsem záznam pro můj malý program jako příklad.

Kolo

Specifikace kola v příkazové sekci sudoers soubor, jak je znázorněno na Obrázku 6 umožňuje všem uživatelům ve skupině kol spouštět všechny příkazy na libovolném hostiteli. Skupina kol je definována v /etc/group Aby to fungovalo, musí být do skupiny přidán soubor a uživatelé. % znak před názvem skupiny znamená, že sudo by měl hledat tuto skupinu v /etc/group soubor.

%wheel ALL = (ALL) ALL

Obrázek 6 :Tento záznam říká, že všichni uživatelé, kteří jsou členy skupiny kol, jak je definováno v /etc/group soubor může spouštět všechny příkazy na libovolném hostiteli.

Je to dobrý způsob, jak delegovat úplný přístup root více uživatelům bez zadání hesla uživatele root. Pouhé přidání uživatele do skupiny koleček jim dává přístup k plným kořenovým pravomocím. Poskytuje také prostředky ke sledování jejich aktivit prostřednictvím záznamů vytvořených pomocí sudo . Některé distribuce, jako je Ubuntu, přidávají ID uživatelů do skupiny kol v /etc/group což jim umožňuje používat sudo příkaz použít všechny privilegované příkazy.

Případ použití 2:Prezentace

Obvykle si představíme prezentace jako úhledné snímky vytvořené LibreOffice Impress nebo PowerPoint, animované přechody a grafiku, ale nemusí tomu tak být. 3. března tohoto roku jsem na Open Source 101 v Columbii v Jižní Karolíně představil rozšířenou relaci s názvem „Using and Configuring Bash.“

Nyní, pokud se účastníte dlouhého sezení o používání Bash, proč byste chtěli vidět spoustu efektních snímků? Osobně chci vidět používání Bash. Tak jsem vytvořil Bash skript, který se stal mou prezentací. Nejsem rychlý ani přesný písař, takže mi to také umožnilo předprogramovat všechny příkazy, které jsem chtěl demonstrovat, do skriptu Bash, takže mi stačilo stisknout Enter pro přesun na další snímek obsahující text nebo pro zadání příkazu. To pro mě fungovalo velmi dobře a zdálo se, že se to líbilo i účastníkům, protože to byl opravdu dobrý případ použití skriptů Bash.

To je relevantní, protože jeden a pouze jeden z příkazů v tomto 1500 řádkovém skriptu Bash shell vyžadoval oprávnění root. Bylo by neuvěřitelně nejisté přihlásit se jako root a spustit celý program. Co když dojde k chybě, která smaže nebo pokazí některé důležité soubory na úrovni systému? Jako sysadmin a Bash programátor nejsem dokonalý a dochází k chybám.

Odpověď tedy byla spustit program jako „studentský“ uživatel a použít sudo příkaz jako předpona jednoho příkazu, který vyžadoval privilegovaný přístup. Dokonce i uprostřed mé prezentace bylo zadání hesla pro studenta snadné. To jsem také použil ve své prezentaci jako příklad jednoho vhodného použití sudo .

Nastavení pro tento případ použití je stejné jako pro předchozí případ, jen s jinými uživatelskými jmény a názvy příkazů.

Závěrečné myšlenky

Použil jsem sudo v těchto případech pro velmi omezený cíl – poskytnout jednomu nebo dvěma uživatelům přístup k jedinému příkazu. Dosáhl jsem toho dvěma řádky, pokud ignorujete mé vlastní komentáře. Delegování oprávnění k provádění konkrétních úloh na uživatele, kteří nemají přístup root, je jednoduché a může vám jako správci systému ušetřit spoustu času. Může také výrazně zvýšit zabezpečení tím, že poskytuje přístup ke konkrétním příkazům pouze v případě potřeby.

sudo příkaz také generuje položky protokolu, které mohou pomoci odhalit problémy. sudoers soubor nabízí nepřeberné množství možností a možností konfigurace. Zkontrolujte man soubory pro sudo a sudoers pro prachové a špinavé detaily.

[ Stáhnout nyní:Průvodce systémového administrátora skriptováním v Bash. ]


Linux
  1. Spusťte kontejnery na Linuxu bez sudo v Podman

  2. Přidejte uživatele systému Linux s oprávněními root dokumentů

  3. při použití CPAN v linux ubuntu bych jej měl spustit pomocí sudo / jako root nebo jako můj výchozí uživatel

  1. Ladění Linuxu pomocí ProcDump

  2. Oprávnění pro Linux 101

  3. Co je Umask v Linuxu

  1. Průvodce pro začátečníky oprávněními pro Linux

  2. Spusťte příkaz cd jako superuživatel v Linuxu

  3. Android - Jak rootovat Samsung S6 pomocí Linuxu?