Nejasnosti ohledně suoders

Nejasnosti ohledně suoders
« kdy: 17. 02. 2019, 23:54:22 »
Dobrý den.

Snažím se pochopit Linux a momentálně jsem u sudoers.

root ALL=(ALL) ALL
Co přesně se stane, když tuhle řádku smažu? Přestane v tu chvíli existovat root a já už nebudu nikdy dělat akce, kde potřebuji být root?

username ALL=(ALL) ALL
Pokud je tahle syntaxe stejná jako u řádku nahoře, znamená to, že username má v tuhle chvíli právo spustit jakýkoliv příkz. Znamená to tedy, že má stejný práva jako root? Pokud ne, v čem se liší jejich práva, když zápis je stejný?

%sudo ALL=(ALL) ALL
Proč mám možnost přidat uživatele do skupiny sudo, ale v listu skupin skupinu sudo nevidím? A pokud má stejný zápis syntaxe jako dva příklady nad touto otázkou, je rozdíl mezi tím, že bych měl uživatele ve skupině kde může spouštět všechny příkazy nebo že bych ho měl zvlášť?


Re:Nejasnosti ohledně suoders
« Odpověď #1 kdy: 18. 02. 2019, 07:52:16 »
Soubor sudoers vyjmenovává uživatele, kteří se mouhou změnit na roota.

root ALL=(ALL) ALL se přidává pro jistotu, aby mohl root změnit sám sebe na roota. To vypadá na první pohled nesmyslně, ale účel to má. Můžete mít sepsané scripty, které sudo využívají. Kdyby tento řádek chyběl, tak by scripty paradoxně fungovalo ostatním uživatelům v sudoers, ale rootovi ne :). Někdy se přidává NOPASSWD, pak rootovi mohou volání sudo projít bez zdržování.

Zbytek uživatelů je na Vás, jestli je přidáte do skupiny sudo, nebo jestli je vyjmenujete ručně. Některé systémy (distribuce) ani skupinu sudo nemají, takže je nutné umět se podle situace zorientovat.

Re:Nejasnosti ohledně suoders
« Odpověď #2 kdy: 18. 02. 2019, 07:54:50 »
Konfigurační soubor sudoers konfiguruje chování programu sudo, který umožňuje spustit program s oprávněním jiného uživatele. sudoers nijak neovlivňuje, jací uživatelé a jaké skupiny v systému existují. Zkoumání sudo a sudoers bych klidně nechal na později, důležitější je pochopit systém uživatelů, skupin a přístupových práv. sudo není pro používání Linuxu nezbytné, je to spíš módní záležitost a často se používá špatně – na internetu je mnoho příkladů, kde někdo mechanicky před každý příkaz píše sudo, aniž by to bylo nutné a a niž by dotyčný přemýšlel nad tím, proč to dělá.

V prvním případě se tedy v seznamu uživatelů nic nemění, uživatel root bude dál existovat a akce, kde potřebujete být root, můžete dělat dál – stačí se jako root přihlásit. Pokud neznáte heslo roota, je rozumné mu nějaké bezpečné heslo nastavit (a poznamenat si ho), ale na roota se můžete dostat i bez hesla, např. při startu systému v jednouživatelském režimu.

Druhý příklad – podstatné je to, že se každý program spouští v kontextu nějakého uživatele. Spuštění stejného programu, jaký může spustit root, tedy ještě neznamená, že mám práva roota – ten program spouštím pod svými právy. Ten druhý příklad říká, že uživatel username může spustit libovolný příkaz (poslední ALL) jménem jakéhokoli uživatele (to je to (ALL)). Pokud ho spustí jménem uživatele root, poběží příkaz s právy roota, ale pokud ho spustí jménem uživatele třeba apache, poběží s právy uživatele apache.

K třetímu případu – sudo a skupiny jsou nezávislé, obojí se konfiguruje pomocí nezávislých textových souborů, nic vám tedy nemůže zabránit do sudoers přidat skupinu, která neexistuje, nebo z /etc/group odebrat skupinu, která je použitá v sudoers. Pokud skupinu sudo nemáte, to pravidlo v sudoers se nikdy nemůže uplatnit – ale třeba jí v budoucnosti vytvoříte a pak se to pravidlo začne používat. Pro uživatele by neměl být rozdíl v tom, jestli pravidlo v sudoers přidáte přímo jemu nebo skupině, do které patří. Nejsem si ale jist, jak se uplatňují priority, jak by to fungovalo v případě nějakých konfliktů – jestli v takovém případě nemá vliv to, zda jde o pravidlo pro uživatele nebo skupinu.

Re:Nejasnosti ohledně suoders
« Odpověď #3 kdy: 18. 02. 2019, 07:58:06 »
Soubor sudoers vyjmenovává uživatele, kteří se mouhou změnit na roota.
Nikoli, je to oprávnění spouštět programy jménem jiného uživatele – nemusí to být jenom root.

root ALL=(ALL) ALL se přidává pro jistotu, aby mohl root změnit sám sebe na roota.
Tenhle řádek hlavně umožní rootovi spouštět pomocí sudo jakýkoli příkaz jménem jakéhokoli jiného uživatele. Třeba když chce root editovat nějaký soubor uživatele a nechce převzít jeho vlastnictví (protože pak už by se k němu ten uživatel nedostal).

Re:Nejasnosti ohledně suoders
« Odpověď #4 kdy: 18. 02. 2019, 08:00:39 »
root ALL=(ALL) ALL se přidává pro jistotu, aby mohl root změnit sám sebe na roota.
Tenhle řádek hlavně umožní rootovi spouštět pomocí sudo jakýkoli příkaz jménem jakéhokoli jiného uživatele. Třeba když chce root editovat nějaký soubor uživatele a nechce převzít jeho vlastnictví (protože pak už by se k němu ten uživatel nedostal).

Na to rootovi stačí daleko jednodušší a s heslem neotravující: su


Re:Nejasnosti ohledně suoders
« Odpověď #5 kdy: 18. 02. 2019, 08:38:28 »
Na to rootovi stačí daleko jednodušší a s heslem neotravující: su
Které ovšem dělá něco jiného (mimo jiné přepne kontext trvale), a je to jiná aplikace z jiného balíčku než sudo, např. nemusí být nainstalovaná.

Re:Nejasnosti ohledně suoders
« Odpověď #6 kdy: 18. 02. 2019, 09:19:41 »
Na to rootovi stačí daleko jednodušší a s heslem neotravující: su
Které ovšem dělá něco jiného (mimo jiné přepne kontext trvale), a je to jiná aplikace z jiného balíčku než sudo, např. nemusí být nainstalovaná.

Tady jste si to asi zaměnil. Su je naopak standardní, neodinstalovatelná součást systému. Např. v debianu je to součást balíku "login" (který nejde odinstalovat). Na BSD je to součást base systemu (bez které se nedá systém instalovat).

Oproti tomu sudo je naopak balíček, který vůbec nemusí být nainstalován. Pokud nainstalujete debiana holého, nebo čisté FreeBSD, sudo v něm není.

Su nepřepíná práva trvale, běžně se volá:
Kód: [Vybrat]
su - uzivatel -c "prikaz k vykonani"
Rozdílem je, že su k elevaci práv potřebuje zadat heslo roota.
Sudo k elevaci práv potřebuje mít záznam v sudoers + (volitelně) zadat heslo volajícího uživatele.

Re:Nejasnosti ohledně suoders
« Odpověď #7 kdy: 18. 02. 2019, 09:45:41 »
Su je naopak standardní, neodinstalovatelná součást systému.
Ve světe linuxu, kde si každý může sestavit distribuci jakou chce, je dost ošemetné psát o „standardní součásti systému“.

Rozdílem je, že su k elevaci práv potřebuje zadat heslo roota.
Záleží na konfiguraci, obvyklá je i konfigurace, kdy vybraní uživatelé/skupiny mohou používat su bez hesla roota. root pak může mít silnější heslo.

Su nepřepíná práva trvale, běžně se volá:
Kód: [Vybrat]
su - uzivatel -c "prikaz k vykonani"Sudo k elevaci práv potřebuje mít záznam v sudoers + (volitelně) zadat heslo volajícího uživatele.
Což stále znamená jen to, že se daný příkaz předá shellu, který su spustí.

Sudo k elevaci práv potřebuje mít záznam v sudoers + (volitelně) zadat heslo volajícího uživatele.
sudo lze nakonfigurovat i tak, že vyžaduje zadání hesla roota nebo hesla cílového uživatele.

Primární rozdíl mezi su a sudo je v tom, že su slouží pro přepnutí na daného uživatele – používá se tehdy, když dál chci pracovat jako jiný uživatel a chová se stejně, jako kdybych se jako daný uživatel přímo přihlásil (s tou výjimkou, že můžu udělat su na uživatele, jehož heslo neznám nebo který má zakázané přihlášení). sudo bylo původně zamýšleno pro spouštění konkrétních příkazů s oprávněními jiného uživatele – takový suid bit na steroidech. Např. aby správce webového serveru mohl bez oprávnění roota restartovat webový server, který při startu oprávnění roota potřeboval. sudoers s příkazem ALL jde proti původnímu smyslu sudo a je to taková divná a zbytečná náhrada za su.

Re:Nejasnosti ohledně suoders
« Odpověď #8 kdy: 18. 02. 2019, 10:55:21 »
Su je naopak standardní, neodinstalovatelná součást systému.
Ve světe linuxu, kde si každý může sestavit distribuci jakou chce, je dost ošemetné psát o „standardní součásti systému“.
To já bych zase opatrný nebyl. Su patří do základu systému jak v Unixech (od verze 1, rok 1974), tak i podle LSB: https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Common/LSB-Common/rcommands.html, zatímco sudo je obyčejný balík, který v systému být může, ale taky nemusí. Na některých systémech je alternativou pro sudo program doas.

Záleží na konfiguraci, obvyklá je i konfigurace, kdy vybraní uživatelé/skupiny mohou používat su bez hesla roota. root pak může mít silnější heslo.
To už není vlastnost su, ale PAM. PAM je ale také volitelný, nejde spoléhat na to, že je k dispozici.

Což stále znamená jen to, že se daný příkaz předá shellu, který su spustí.
Nehraje to moc velkou roli. Prostředí se buďto zachová původní, nebo se nastaví podle nového uživatele (parametrem). Volání přes shell je bezpečnostní pojistka, aby měl uživatel validní shell z /etc/shells. V sudo můžete stejnou kontrolu (validního shellu uživatele) nastavit konfigurací přes PAM, ale ten nemusí být všude k dispozici. Se špatně nakonfigurovaným sudo / PAM můžete kontrolu shellu obejít, což bych považoval za potenciální bezpečnostní riziko.

Primární rozdíl mezi su a sudo je v tom, že su slouží pro přepnutí na daného uživatele – používá se tehdy, když dál chci pracovat jako jiný uživatel a chová se stejně, jako kdybych se jako daný uživatel přímo přihlásil (s tou výjimkou, že můžu udělat su na uživatele, jehož heslo neznám nebo který má zakázané přihlášení).
Zde velmi nesouhlasím. Podívejte se např. do instalačních scriptů software, nebo do initscriptů. Su -c "příkaz" se volá často. Sudo se ve scriptech používá spíš zřídka, resp. nepamatuji se, kde bych to potkal.

sudoers s příkazem ALL jde proti původnímu smyslu sudo a je to taková divná a zbytečná náhrada za su.
Souhlasím bezvýhradně.

Re:Nejasnosti ohledně suoders
« Odpověď #9 kdy: 19. 02. 2019, 14:34:35 »
Děkuji moc pánové za rozepsání a objasnění pár věcí.

Rád bych si to shrnul.

Sudoers dává tedy schopnost uživateli nebo skupině spustit příkaz za jiného uživatele. V praxi tedy můžu jako john (při téhle konfiguraci john ALL=(ALL) ALL) spustit příkaz za johna, kde dostanu zamítnutí, protože nemám oprávnění, ale protože john může spustit příkaz i za jiného uživatele a já mám možnost ALL, spustím příkaz třeba jako root a v tu chvíli už dostanu zelenou. Zatím nemám možnot testovat, proto se zeptám. Ověřují se nějak dané konfigurace? Třeba kdybych nastavil, že john může spustit nějaký příkaz a může ho spustit buď za sebe (logicky) nebo za uživatele andrew, no bohužel ani andrew k tomuto příkazu nemá práva. Dostanu chybovou hlášku nebo je to moje hloupost? A chápu to dobře, že služby jsou také uživatelé? Tedy můžu nastavit uživateli john možnost spouštět za službu (uživatele)? Pokud ano, kde zjistím, která služba má jaké oprávnění?
K tomu sudo a skupině: napsal jste, že jsou nezávislé, ale pokud nemám skupinu sudo, pravidla se neuplatní. Nejsou tyhle věci v rozporu? Nebo můžu uživateli přidat skupinu, kterou vytvořila konfigurace sudoers bez toho, abych ji vytvořil v groups?

A ještě jednou moc děkuji, važím si toho!

Re:Nejasnosti ohledně suoders
« Odpověď #10 kdy: 19. 02. 2019, 15:04:13 »
Dekuji ze mas jeste silu opravovat ty nesmysly kolegy Jirsaka - prosim, ignorujte toho trotla, co to ma max vyctene z knih, ale zrejme to nikdy sam nedelal

Sice se ke vsemu ma potrebu vyjadrovat, ale to, ze je Guru fora, nic o jeho kvalitach nevypovida
Předně, díky.

Kolega Jirsák možná nevyužívá tolik historických znalostí, přesto se vyjádřil k tématu. Já jsem za jeho příspěvek rád, protože mi to nabízí vhled do myšlení "méně konzervativních" správců. Mě by nikdy nenapadlo užít ACL, abych nahradil funkci, kterou mohu zajistit daleko jednoduššími způsoby. Jsem ještě generace vychovaná otázkou: "a co se stane, když tento mechanismus selže?" a díky tomu vymýšlím možná složitější, přesto (snad?) bezpečnější řešení.

Přiznám se, že mě, v mé stařecké zaslepenosti ještě nenapadlo, že už existuje garda uživatelů, kteří považují sudo za standard a su za něco zvláštního.

Vilith

  • *****
  • 660
    • Zobrazit profil
Re:Nejasnosti ohledně suoders
« Odpověď #11 kdy: 19. 02. 2019, 15:11:46 »
sudo zacalo propagovat Ubuntu, osobne nechapu, proc ho vsude cpou a preferuji

Linux ma tu vyhodu, ze jde udelat stejna vec mnoha zpusoby. Ne kazde reseni je ale alegantni a "ciste"

Re:Nejasnosti ohledně suoders
« Odpověď #12 kdy: 19. 02. 2019, 15:22:42 »
sudo zacalo propagovat Ubuntu, osobne nechapu, proc ho vsude cpou a preferuji

Sudo byl ve své době určitý odklon od stereotypu. Stereotypem pre-Ubuntu doby bylo přihlašování jako root. Dokonce nebylo ani zvykem přihlášení na neprivilegovaného uživatele + su. Mementem doby je OpenSSH direktiva PermitRootLogin, která z Yes přešla na Without-password, a teprve po letech na No.

Sudo proti tomu zbořilo konvence a řeklo: stačí obyčejný uživatel a elevovat oprávnění budeme až podle potřeby. Bylo to v době, kdy Windows zavedly UAC. Sudo v počátku snažení bylo vyvinutějším mechanismem než UAC: UAC vycházelo z práv administrátora, ale snižovalo je směrem dolů. Sudo vycházelo z práv uživatele a povyšovalo je nahoru. Čistě teoreticky je sudo-cesta čistší. V praxi ale UAC funguje lépe. Proč? Protože sudo vyžaduje heslo u každého uprdnutí a technicky s tím nejde nic dělat. UAC, oproti tomu, může pracovat s tím, co je "téma doby".

Pokud si můžu vybrat, tak na server mi sudo nepatří, tam mi stačí su a správné metody správy. Naopak, na pracovní stanici mám raději UAC, než sudo.

Re:Nejasnosti ohledně suoders
« Odpověď #13 kdy: 19. 02. 2019, 16:59:16 »
Jsem rád, že se zde rozvíjí takáto diskuze.

Mohl by mi někdo prosím odpovědět na můj souhrn? Zda to chápu správně?

Re:Nejasnosti ohledně suoders
« Odpověď #14 kdy: 19. 02. 2019, 17:03:41 »
Jsem rád, že se zde rozvíjí takáto diskuze.

Mohl by mi někdo prosím odpovědět na můj souhrn? Zda to chápu správně?

john ALL=(ALL) ALL

Dává možnost uživateli "john" vykonávat jakýkoliv příkaz, za jakéhokoliv uživatele (včetně roota). Jediné, na co bude tázán je heslo uživatele "john" (jen pro jistotu, jestli je "john" stále u klávesnice). Není vyžadováno heslo roota, není vyžadováno heslo žádného jiného uživatele.

Co se týče skupiny, kolega měl na mysli, že toto pravidlo se neuplatní, dokud skupina neexistuje. Pokud založíte skupinu "sudo" a do ní přídáte uživatele "john", bude chování stejné, jako v prvním případě. Pokud do skupiny "sudo" přidáte ještě uživatele "jack", bude totéž platit i pro Jacka.