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 79343×
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
|
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 ...
|