LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Linux v příkazech - sudo

V dnešním dílu se podíváme na poměrně mocný program, který vám dovolí předávat všechna, nebo jenom některá superuživatelská práva normálním uživatelům.

1.11.2004 10:00 | Ondřej Čečák | Články autora | přečteno 78291×

You had mail, but the super-user read it, and deleted it!

Název programu vznikl složením slov "superuser do", a to poměrně jasně vystihuje jeho funkci. S pomocí suda můžete dovolit normálnímu uživateli spouštět všechny, nebo jen některé příkazy s právy superuživatele. Takto lze např. pohodlně vyřešit situaci, kdy je vhodné (ba přímo nutné), aby někteří uživatelé používali programy určené ke správě, ovládání systému a podobně.

Instalace

Program si můžete stáhnout z domovské stránky http://www.sudo.ws/sudo/ (http://www.courtesan.com/sudo/sudo.html) a následně zkompilovat. S největší pravděpodobností bude ovšem zahrnut i ve vaší distribuci, takže vám doporučuji nejprve sáhnout po distribučním balíčku s binárkou či zdrojáky.

Sudo běží jako suid s právy roota, takže už jeho samotná instalace skrývá bezpečnostní riziko, na které byste měli brát ohled.

Konfigurace

Veškeré nastavení se provádí v konfiguračním souboru /usr/sudoers (nejčastěji). Ačkoli tento soubor můžete editovat ve svém oblíbeném editoru, měli byste použít program visudo. Tento má totiž dvě užitečné vlastnosti:

  • kontroluje syntax (takže vás upozorní na případnou chybu)
  • stará se o to, aby soubor editoval v jednu chvíli pouze jeden uživatel (to je užitečné v případě, když se o systém stará více lidí s právy roota)

Nejzákladnější volby

A nyní se můžeme vrhnout na vlastní konfiguraci. Po spuštění programu visudo by se vám mohl objevit implicitní konfigurační soubor podobný tomuto:

# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL) ALL

Řekněme tedy, že chceme přidělit uživateli spravce a členům skupiny admini superuživatelská práva. Proto do odpovídající sekce připíšeme:

# User privilege specification
root    ALL=(ALL) ALL
spravce ALL=(ALL) ALL
%admini ALL=(ALL) NOPASSWD: ALL

Tak. Nyní můžeme jako uživatel spravce vyzkoušet, jak to funguje. Obecně uživatel spravce použije příkaz sudo následovaný cestou k programu. Tedy např.:

spravce@stroj:~$ sudo /usr/bin/whoami

Password:
root

Co se vlastně stalo? Uživatel spravce spustil whoami s právy roota (pozn.: jak je zřejmé, program whoami vypíše userid; výstupem je tedy název uživatele, který příkaz zadal). Všimněte si, že před spuštěním příkazu musel spravce zadat (své) heslo. To proto, aby jeho shell nešel zneužít, pokud by se např. zapomněl odhlásit. Implicitně si sudo pamatuje heslo 5 minut, takže ho není nutné zadávat opakovaně.

V předchozím příkladu zbývá nevysvětlený poslední řádek – ten pomocí % dovoluje spuštění libovolného příkazu se superuživatelskými právy členům skupiny admini, a to bez nutnosti zadávání hesla (díky volbě NOPASSWD:).

Tím jsme si předvedli úplně nejzákladnější funkci programu sudo. Důležité je ovšem zmínit, že vaším cílem by měl být spíše superuživatelský přístup minimalizovat. Sudo je ideální především na rozdělování různých práv a většinou se nehodí pouze k předávání všech práv superuživatele.

Omezování

Ačkoli nadpis této kapitolky zavání BOFH, představím vám zde velice užitečné možnosti, jak předat pouze určitá práva a některé další "omezující" volby.

Nejdříve se ještě můžeme vrátit k zadávání hesla. Vytvořme si v konfiguračním souboru "novou sekci" s následujícím obsahem:

# Defaults specification
Defaults:spravce      timestamp_timeout=0, passwd_tries=1

Tímto nastavíme, že uživatel spravce bude muset zadávat své heslo při spuštění suda neustále, protože timestamp_timeout je roven nule. Pokud zde napíšete libovolné přirozené číslo, sudo si bude pamatovat heslo zadaný počet minut. Jestliže této volbě nastavíte hodnotu -1, bude nutné zadat heslo jenom jednou za přihlášení.

Volba passwd_tries=1 znamená, že pokud se uživatel při zadávání hesla splete, bude muset příkaz spustit znovu (a jeho přihlášení bude logováno jako neúspěšné; implicitně je tato hodnota rovna 3).

Zajímavé je také to, jak sudo nakládá se systémovými proměnnými. Pokud si (nejlépe jako superuživatel) zadáte příkaz sudo -V, uvidíte mj. také seznamy proměnných, které sudo kontroluje, maže nebo nuluje. V případě, že byste chtěli uživateli spravce smazat například proměnnou PROMENNA, připište k poslednímu předcházejícímu příkladu , env_delete+="PROMENNA". Důležité je + před znakem =, v případě že by + chybělo, mazala by se pouze jedna zadaná proměnná.

Jak už jsem poznamenal v úvodu, předání všech superuživatelských práv není obvykle ta správná cesta. Pojďme tedy skupinu programů omezit:

# User privilege specification
root     ALL=(ALL) ALL
spravce  ALL=	   /sbin/shutdown
%admini  stroj=	   /usr/local/sbin/admini/

Tímto nastavením jsme docílili toho, že uživatel spravce může spustit se superuživatelským oprávněním pouze program shutdown. Druhý řádek dovoluje členům skupiny admini spouštět jako root na počítači stroj programy v adresáři /usr/local/sbin/admini/.

Ovšem sudo nemusí dávat uživateli "pouze" práva superuživatele, programy lze spouštět pod libovolným uživatelem, např.:

# User privilege specification
root     ALL=(ALL) 		  ALL
jirka	 ALL=(pepa,lenka,franta)  /bin/kill,/usr/bin/killall

Tímto příkazem může uživatel jirka ukončovat procesy uživatelům pepa, lenka a franta. A jak že to udělá? Jednoduše spustí sudo s parametrem -u:

jirka@stroj:~$ sudo -u pepa killall program

Protože v minulém příkazu v posledním řádku není uvedeno ALL, ale výčet uživatelů, je uživatel oprávněn spouštět zadané příkazy pouze s vyjmenovanými právy. V případě že tam ALL uvedeno je, znamená to, že je možné spouštět příkazy pod libovolným uživatelem.

Náš předchozí příklad můžeme ještě vylepšit o volbu, která zajistí, že sudo bez parametru -u spustí příkaz pod defaultním uživatelem:

Defaults:jirka runas_default=pepa

Aliasy

Protože se občas některé volby opakují a protože jsou delší konfiguráky trošku nepřehledné a náročnější na úpravy, nabízí sudo zadávání aliasů. Pokud už funkce není zřejmá z názvu, příklad jejich použití ujasní:

# Host alias specification
Host_Alias KANCELAR = 192.168.0.0/24

# User alias specification
User_Alias SPRAVCI = spravce,jarda
User_Alias UZIVATELE = pepa,jirka,lenka,franta

# Runas alias specification
Runas_Alias OP = operator

# Cmnd alias specification
Cmnd_Alias  WWW  = /bin/su www
Cmnd_Alias  KILL = /bin/kill,/usr/bin/killall
Cmnd_Alias  HALT = /sbin/halt
Cmnd_Alias  SHELLS = /bin/sh, /bin/bash, /bin/ksh, \
		     /bin/tcsh, /usr/local/bin/rsh

Tímto zápisem si definujeme aliasy, které můžeme dále použít. Např.:

# User privilege specification
root    ALL=(ALL) 	ALL
SPRAVCI	KANCELAR=(ALL)  ALL

pepa    KANCELAR=(OP) KILL

UZIVATELE ALL=(ALL) HALT

spravce ALL=(ALL) /bin/, WWW, !SHELLS

Všimněte si především posledního řádku. Znak ! obrací význam aliasu SHELLS, takže správce může spustit s privilegii roota cokoli v adresáři /bin/, kromě programů vyjmenovaných v aliasu SHELLS. Zajímavé je také použití aliasu WWW, který povoluje změnu uživatele, ale pouze se zadaným parametrem.

Podobně můžeme např. povolit uživateli vojta, aby mohl zasahovat do nastavení sítě, ovšem v příkazu se nesmí objevit eth0. Dále nastavíme ještě uživateli spravce libovolné použití programu tcpdump k odchytávání síťového provozu. Opět můžme použít alias:

# Cmnd alias specification

Cmnd_Alias SIT=/bin/ip *, !/bin/ip *eth0*
Cmnd_Alias SNIFFER=/usr/sbin/tcpdump *

# User privilege specification
root    ALL=(ALL) ALL
spravce ALL=(ALL) SNIFFER
vojta   ALL=(ALL) SIT

Kompletní ukázka

Kompletní a fungující ukázku konfiguračního souboru lze nalézt na oficiálních stránkách, konkrétně na adrese http://www.courtesan.com/sudo/sample.sudoers.

Bezpečnost

Kromě toho, že sudo by nemělo obsahovat známé chyby (protože to je root suid binárka) se u konfigurace vyplatí opravdu pořádně přemýšlet, a to obzvlášť, pokud udělujete uživatelům pouze částečná práva. Pozor si např. dejte na:

  • editory (některé totiž dokáží spouštět další příkazy, o editaci např. /etc/shadow nemluvě)
  • chmod, chown (defacto přístup ke všem souborům)
  • zdánlivě bezpečné věci jako tar, gzip (opět pozor na získání souboru s hesly)
  • passwd (minimálně root by měl být zakázan)
  • správce balíčků (útočník si pak případně může nainstalovat starou verzi balíčku, o které ví, že je zranitelná)

Z bezpečnostního hlediska je také velice zajímavé použít sudo tak, aby řídilo (a logovalo) přístup k ostatním seuid/segid programům (nebo alespoň k těm, které vlastní root). Takže následně sudo bude jedniný programu roota, který vyžaduje seuid/segid bit. Toto řešení má několik výhod; přímo použití suda může být vymezeno právy filesystému jenom na ty, kteří seuid/segid programy vyžadují (různí démoni apod.), lze kontrolovat a omezovat předávané parametry a případný útočník bude mít opět o něco komplikovanější postup.

Logování

Implicitní nastavení logování je u různých distribucí různé; soubor s logy si můžeme nastavit v úvodu konfiguračního souboru programu sudo:

Defaults logfile=/var/log/sudo.log

Příklad souboru s logy:

Oct 30 19:56:28 : spravce : TTY=pts/9 ; 
    PWD=/home/spravce ;  USER=root ;  COMMAND=/usr/bin/whoami
Oct 30 20:00:28 : spravce : TTY=pts/5 ;  
    PWD=/home/spravce ; USER=pepa ; COMMAND=/usr/bin/killall doom3
Oct 30 20:01:04 : petra : user NOT in sudoers ; TTY=tty/1 ;  
    PWD=/home/petra ; USER=root ;  COMMAND=/bin/bash      
Oct 30 20:11:39 : franta : 3 incorrect password attempts ; TTY=pts/10 ;
    PWD=/etc/ ; USER=root ; COMMAND=/bin/cat /etc/shadow

Vysvětlovat význam jednotlivých položek asi nemá cenu, protože jsou docela zřejmé. Pozor si ale dávejte především na hodnotu položky COMMAND, protože tam se nezobrazují přesměrování (např. /bin/cat /etc/shadow > /tmp/session_mm_apache0 bude zobrazeno pouze po >).

Pokud se sudo správně nakonfiguruje, může se stát důležitým a vítaným pomocníkem, a to nejenom správce systému. Doufám, že si ho také oblíbíte ...

Za konzultace bych chtěl poděkovat Honzovi Houšťkovi.

Verze pro tisk

pridej.cz

 

DISKUZE

Nejsou žádné diskuzní příspěvky u dané položky.



Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze