Jenom bych upřesnil, že i su
se dá používat bez hesla, stejně jako sudo
. Z hlediska hesel umí sudo
navíc oproti su
dvě věci*). Za prvé místo hesla cílového uživatele vyžadovat heslo současného uživatele. Což je asi ochrana pro ty nezodpovědné uživatele, kteří nechávají odemčený počítač, když od něj odchází. Za druhé to, že si umí nějakou dobu pamatovat, že heslo bylo zadáno a nevyžadovat ho znovu – to pro případ, kdy je dotyčný ještě línější, a nejen, že nezamyká počítač, ale doufá, že během třeba patnácti minut mu tam nikdo nic neprovede.
*) su
to neumělo dříve. Je možné, že už to mezi tím do su
někdo také implementoval – nevím, nezkoumal jsem to, protože obojí považuju za nesmysl.
Zadání hesla není jen ochrana pro nezodpovědné uživatele. Ostatně, ten pojem nemám rád. Pokud nějaký jev pozorujeme u velké části uživatelů, je potřeba to přijmout jako fakt. Účelem je stavět i bariéru tomu, aby v některém scriptu, nebo třeba při lovení z historie, nevlétl do vykonání privilegovaný příkaz. To je trochu narušeno zapamatováním si sese, ale stále to jako částečná bariéra proti chybám slouží.
Sudo umí ještě jednu věc: omezit co se smí spouštět. Tady vidím velký koncepční problém sudo. Opět, omezení příkazů je šikovné jako ochrana před chybou. Koncepční problém vidím v tom, že si to spousta lidí zaměňuje za bezpečnostní opatření (ve smyslu ochrany proti obecným rizikům). Pochopitelně, rizikům se tím nepředejde, víceméně se musí předpokládat, že každý povolený program, script, má v sobě funkcionalitu, která může být zneužita a každý, komu povolím sudo (na roota) že musí mít plnou důvěru k provádění všech operací (nejen těch povolených).
Sudo považuji tedy za prasárnu ve smyslu, že povýšilo špatné návyky na standard. Nicméně bych neignoroval účelnost takového nástroje pro operace, pro které bylo určeno původně.
Mám dotaz ohledně "správnosti" používání "sudo" (či "doas"...).
Na systému mám sice administrátorský účet, pod kterým se dělají "nebezpečné" věci, ale fakticky se na něj hlásím jen vyjímečně; tímto účtem není "root" a když je potřeba něco "extra" (instalace aplikace...), používám "sudo". Prakticky, pokud jako běžný uživatel nutně musím udělat nějaký zásah do systému, volám "su - spravce" a pak "sudo destroy-it-all".
Přišlo mi to vždy celkem přirozené, ale teď se z diskuse zdá, že je to jedna bezpečnostní hrozba za druhou a jen si koleduji o !totální smajznutí desktopu s likvidací dat až k páté off-lineové kopii" (s trochou nadsázky).
A ještě dodatek: "normální" uživatel na "sudo" samozřejmě nedosáhne.
28. 1. 2021, 10:33 editováno autorem komentáře
Pointa je v tom, že používat sudo není o nic bezpečnější, než se přihlásit (nebo pomocí su přehlásit) přímo na roota. Pokud by v sudo nebyla série chyb (v poslední době vyplavávají), pak by sudo nebylo ani o nic nebezpečnější. Jenže díky své komplikovanosti je to magnet na chyby, které uživatel (správce) nevidí: navenek se sudo tváří jako skvělý nástroj, který může k bezpečnosti pouze přispět.
Ale v mém "modu operandi" nepotřebuji znát heslo uživatele "root", staží heslo toho správcovského účtu. Ovšem i tak jsem trošku chráněný před tím "provést blbost" - musím to heslo zadat do "sudo".
Sice je tu možnost, že "spravce" spustí pomocí "sudo" něco nebezpečného, aniž by se ověřoval, ale stejně se ověřuje svým heslem, takže mi to jako nějaké snížení bezpečnosti nepřipadá.
Podle mne je to jen taková "pojistka proti ukvapenosti", ve stylu "opravdu chceš dělat něco takhle nebezpečnýho? [a/N]".
Ovšem i tak jsem trošku chráněný před tím "provést blbost" - musím to heslo zadat do "sudo".
Zapomínáte tu hlavní úvahu. Tou je to, že spoustu operací lidé dělají pod sudo -u root, místo toho, aby se někdo zamyslel, proč je pro každou blbinu potřeba oprávnění zvyšovat a proč je potřeba oprávnění zvyšovat na nejvyšší možnou úroveň. Ku příkladu, proč by měla být potřeba ekvivalence roota pro překonfigurování a reloadování nastavení databáze či poštovního serveru? Brání něco tomu, aby DB i pošta běžely ve vlastním kontextu?
Sudo nám vtlouklo do hlavy, že zvyšovat oprávnění na maximum (byť i jen chvilkově) je vlastně "bezpečné".
Podle mne je to jen taková "pojistka proti ukvapenosti", ve stylu "opravdu chceš dělat něco takhle nebezpečnýho? [a/N]".
Ano, tohle užití beru, ale na to je sudo příliš překomplikovaný nástroj.
Horší je, že se sudo využívá i k tomu, že správce dá pověření spustit jen omezený příkaz běžnému uživateli a neuvědomí si, že v tom může být velký bezpečnostní problém.
Proti ukvapenosti může sloužit stejně dobře i doas a su. Podívejte se schválně, jaké všechny volby dovoluje sudoers a řekněte upřímně, jestli všem skrytým rizikům může někdo rozumět.
Nezlobte se na mne, ta diskuse pořád ukazuje, že sudo
vyzdvihují lidé, kteří toho o bezpečnosti unixových systémů moc nevědí. A věří přesně těm zárukám, které sudo
neposkytuje, ale tváří se, že ano.
Takže z toho pak vznikají takovéhle komické komentáře, kdy někomu dáte oprávnění roota, ale věříte, že po činnosti dotyčného zůstane záznam v logu (který root samozřejmě může zlikvidovat, pokud nemáte speciálně ošetřené append-only logy, na které ani root nemůže).
Toť otázka pro filosofy.
Každopádně na ("produkčním") serveru by se o takové věci měl starat dobře proškolený a zkušený administrátor. Na desktopu, který přijde do rukou i nám, v podstatě "laikům", je takový log často k nezaplacení.
A mít možnost občas třeba ručně vynutit update, na zařízení, které je v podstatě "pro jednoho uživatele" a jediným nebezpečím je možná ztráta fotek z dovolené, mi přijde jako "vlastně dobrá věc" - když vím, že dělám něco, co je svým způsobem "mimořádné".
Nemáme, my laici, pořád "za zadkem" administrátora.
Určitě máte pravdu, že nemusí běžet všechno pod rootem. Na druhou stranu - já se s tím potkávám většinou na desktopu a tam takové věci, jako databázový či poštovní server, nespouštím.
A nezdá se mi, že by mne "sudo" přesvědčovalo, že "je to bezpečné" - spíš to má pro mne opačný efekt: "teď děláš něco, co by sis měl dobře rozmyslet".
Ale v mém "modu operandi" nepotřebuji znát heslo uživatele "root", staží heslo toho správcovského účtu.
Heslo roota nemusíte znát ani při použití su
.
Ovšem i tak jsem trošku chráněný před tím "provést blbost" - musím to heslo zadat do "sudo".
Právě naopak. V tu chvíli se soustředíte na zadání hesla a přestanete věnovat pozornost tomu příkazu. Pravděpodobnost provedení blbosti je naopak vyšší.
Podle mne je to jen taková "pojistka proti ukvapenosti", ve stylu "opravdu chceš dělat něco takhle nebezpečnýho? [a/N]".
Takováhle pojistka ale nefunguje, lidský mozek holt funguje jinak. Přičemž to zadávání hesla je ještě méně bezpečné, než pouhé potvrzení ano/ne, protože ještě podstatně víc odvádí pozornost od toho příkazu.
Mimochodem, to tady všichni používáte tak slabá hesla, že je klidně opakovaně píšete do terminálu? Nebo ta hesla pořád kopírujete ze správce hesel?
Vzhledem k tomu, že já pracuji na "svém" stroji, tak to heslo není tak složité, abych ho nezvládl napsat - je to potřeb jen párkrát do roka. Příležitostí k odposlechu je tedy poměrně málo. (Ale zas tak blbé a krátké, aby se to dalo běžně prolomit do pár minut, to heslo není.) Neočekávám nějaký cílený útok na tento noťas.
Na serverech máme hesla pouze uživatelská, s politikou vynucenou složitostí a trvanlivostí. Tam žádné administrátorské heslo nepoužívám, když je třeba, provedeme "su" na "lepší" účet, ale ani tam není "sudo" povolené - pokud nám to "správce nepůjčí" (na pár hodin). Potřebujeme to tam skoro každej rok.
Zadání hesla ve skutečnosti není vůbec žádná ochrana. Naopak to bezpečnost snižuje – uživatel se v tu chvíli soustředí na zadání hesla a přestane věnovat pozornost samotnému příkazu. S těmi skripty a historií jste si to vyvrátil sám s tím zapamatováním hesla.
Sudo umí ještě jednu věc: omezit co se smí spouštět.
Právě že neumí. Jenom vytváří tu iluzi, že to umí. sudo
spustí nějaký proces s právy roota – a nad tím, co ten proces dělá, už nemá žádnou kontrolu.
Nicméně bych neignoroval účelnost takového nástroje pro operace, pro které bylo určeno původně.
Ale vždyť to, co sudo
„umí“ navíc oproti su
je právě to omezení toho, co je možné spouštět – přitom ve skutečnosti ale tohle není schopné zaručit. Takže ve skutečnosti je sudo
použitelné přesně pro to samé, jako su
, jenom vyvolává mylný dojem, že umí něco víc. A to je to, proč mám se sudo
problém – evidentně je spousta lidí, kteří těm slibům věří.
Jestliže je "su" a "sudo" tak nebezpečné, jak by tedy měly být akové věci nastavené, například na běžném "desktopu", kde uživatel v podstatě nevyleze ze svého omezeného profilu a pouze občas potřebuje něco, co se dožaduje vyšších oprávnění (instalace programu, vynucený update, nastavení síťovky "pro všechny uživatele"...)?
Já to dělám už spoustu let pořád stejně, když přišlo do módy sudo
, neměl jsem důvod něco na tom měnit. Pracuji jako běžný uživatel, a když potřebuji počítač spravovat, napíšu su -
. Dostanu se do červeného rootovského promptu, a tam udělám, co potřebuji. Typicky mám vedle ještě terminál s obyčejným uživatelem, kde řeším ty věci, které nevyžadují roota. Nemíchá se mi historie. Na první pohled vidím, zda zrovna pracuji jako běžný uživatel nebo jako root, a to rozhodnutí dělám ještě před tím, než se začnu zabývat daným příkazem. Nepíšu automaticky před každý příkaz sudo
.
sudo
vytýkám jedinou věc – že je dnes vnímáno jako podstatně bezpečnější varianta su
, když ve skutečnosti jsou na tom s bezpečností stejně (když má zrovna sudo
zalepené všechny známé bezpečnostní díry). Povolit někomu su
na roota, to si každý rozmyslí. Ale sudo
rozdává na potkání.
Není "komplikovanější", podle mne je v podstatě stejné. Jen po instalaci tam "nastal" privilegovaný "admin" a roota mi to ani neukázalo. to je celý rozdíl, pokud mohu posoudit.
Každopádně to nepovažuji za "bezpečnější" nebo "méně bezpečné" řešení - jen "to tak prostě je". Nikdy mi nepřipadlo, že zrovna tohle by zasluhovalo nějakou zvýšenou pozornost. Posle mne je to vlastně jen rozdíl ve jméně uživatele. (No dobrá - a není to jednička.)
A napsat "sudo" před příkaz, na který "obyčejnej admin" nestačí mi nepřekáží - alespoň vím, že dělám něco, co může mít poněkud větší dopad. Nic víc, nic míň.
28. 1. 2021, 15:19 editováno autorem komentáře
> Zadání hesla ve skutečnosti není vůbec žádná ochrana. Naopak to bezpečnost snižuje – uživatel se v tu chvíli soustředí na zadání hesla a přestane věnovat pozornost samotnému příkazu.
Předpokládejme hypotetickou alternativu asadmin, která cokoliv co dostane prostě spustí jako root. Předpokládejme, pro účely diskuse, že se nějaké skupině crackerů podařilo infikovat Firefox nějakým malwarem.
Napadený firefox pustí asadmin cat /dev/random > /dev/sd0. Prů---švih jako vrata. Ve variantě sudo-se-zeptá-na-heslo je v takovou hypotetickou chvíli potřeba napadnout jak firefox, tak sudo. Není napadnout dva programy zároveň těžší, než napadnout jeden?
> Právě že neumí. Jenom vytváří tu iluzi, že to umí.
[Zdroj?]
Žádná hypotetická varianta neříká nic o reálné bezpečnosti. Já si můžu vymyslet jinou hypotetickou variantu, že nějaká akce webové stránky vyvolá kontrolu oprávnění v jádru, která však bude obsahovat chybu způsobující smazání disku. Když bude uživatel pracovat pod rootem, vyhodnotí se to hned na začátku a další kontrola oprávnění se provádět nebude, takže nedojde ani k té chybě a mazání disku. Znamená to, že v tomto jednom hypotetickém případě bude bezpečnější s prohlížečem pracovat pod rootem? Ano, znamená. Znamená to, že je obecně bezpečnější pracovat s prohlížečem pod rootem místo pod běžným uživatelem? V žádném případě.
[Zdroj?]
Je potřeba trošku tušit, jak fungují oprávnění v unixových systémech. sudo
(když to jde dobře) zkontroluje, zda podle konfigurace může spustit daný příkaz (což je něco jiného, než zda správce chtěl povolit spouštění daného příkazu). Pokud ano, přepne efektivní oprávnění na roota a spustí požadovaný proces. Tím role sudo končí. Výsledkem tedy je, že požadovaný proces běží s oprávněními roota. Pokud v systému nejsou další ochrany omezující roota, ten proces může dělat v systému naprosto cokoli. Pokud v tom procesu bude chyba lokálního spuštění kódu, spustí kód pod rootem. Pokud bude proces spouštět jiný proces, spustí ho pod rootem. Cokoli bude ten proces provádět, dělá pod rootem. sudo
s tím nic neudělá.
Kdybyste nechtěl při použití sudo
předat úplná rootovská práva, musel byste si například ověřit, že cílová aplikace, tak jak ji spustíte, neumožní spustit žádný jiný kód. Ponechme teď stranou variantu chyby lokálního spuštění kódu. I tak byste si musel ověřit, že aplikace neumožňuje spustit žádný jiný proces. Že tam není žádná feature jako třeba !
ve vimu. Děláte to pokaždé, když něco zpřístupňujete přes sudo
? Ne, jenom odevzdáte práva roota.
Myslíte si, že ty aplikace, které spouštíte přes sudo
, se nějak extra brání záludnému uživatelskému vstupu? Představte si, že píšete program jako iptables
, systemctl
apod. – něco, co bude spouštět výhradně root. Budete nějak extra řešit, aby tam uživatel nemohl škodit zákeřným vstupem? Třeba když předává cestu k souboru, aby nemohl zadat /tmp/../home/user
? Proč byste to řešil, váš program přece spouští root, který může vše – takže přístup k nějakému souboru nebude získávat takhle krkolomně, vždyť si ten soubor jako root může kdykoli přečíst.
No a vy pak takovýhle program někomu zpřístupníte přes sudo
pomocí program -d /tmp/*
. Co by se asi tak zlého mohlo stát, vždyť jste umožnil pod rootem to spouštět pouze nad adresářem /tmp
, že…
> Je potřeba trošku tušit, jak fungují oprávnění v unixových systémech. sudo (když to jde dobře) zkontroluje, zda podle konfigurace může spustit daný příkaz (což je něco jiného, než zda správce chtěl povolit spouštění daného příkazu).
Nemyslím si, naopak - je to přesně totéž. Pokud jako správce povolím pouze updatedb, může uživatel pracovat pouze s updatedb. Pokud jako správce povolím bash (světe div se), může uživatel pracovat s bashem.
Neobahuju komplikovanost suda (nemám v lásce příkazy, jejichž manuál začíná minimanuálem na manuál) a o víkendu si doas vyzkouším. Ale tvrdit, že sudo nepřináší zvýšení bezpečnosti je tvrzení přinejlepším odvážné. Můžu vyjmenovat příkazy, které uživatel bude mít dovoleno spouštět a které ne? Můžu. A pokud dovolím bash, je to můj problém - ať už mojí neznalostí nebo mojí volbou použitého nástroje.
Stejně jako je sudo bezpečnější než asadmin, je vyjmenování dovolených příkazů bezpečnější než su -: buď musím napadnout sudo (nebo su, nebo doas, prostě ten samotný elevační proces), nebo se musím spokojit s lámáním dovolených programů.
Ne, nemusíte se spokojit s lámáním dovolených programů. Lámat můžete něco, co má být bezpečné a o čem můžete důvodně předpokládat, že je to bezpečné. Jenže vy klidně povolíte komplikovaný program, o jehož bezpečnosti (s ohledem na únik rootovských oprávnění) nevíte vůbec nic.
Váš komentář přesně ukazuje, proč je sudo
nebezpečné. Vzbuzuje dojem bezpečnosti, ale výsledek bezpečný není. Je to jako dát na dveře zámek a tvrdit, jak to ten zámek zabezpečil – a neřešit, že ty „dveře“ jsou z papíru.
Ten příspěvek je o tom, že bash uživateli asi nepovolíte. Ale klidně mu povolíte jiné aplikace, které možná umožňují bash spustit – ale to nezkoumáte.
Problém je v tom, že sudo
přestalo být vnímáno jako hack, u kterého se vždy očekává, že nebude moc bezpečný. A začalo být vnímáno jako běžný bezpečnostní nástroj, který je a priory bezpečný, tudíž u něj není potřeba nijak zvlášť myslet na bezpečnost – stačí se vyvarovat pár profláklým bezpečnostním chybám, jako spuštění bashe, a pak se nic nemůže stát. Jenže sudo
(z principu, jak funguje) nemá pár nebezpečných pastí a jinak je jeho použití bezpečné. sudo
je jedna velká bezpečnostní díra, a je možné po pečlivé analýze najít výjimečné případy použití, které budou bezpečné. Přičemž je myslím symptomatické, že za celé ty dva dny v obou diskusích nepadl jediný příklad bezpečného použití sudo
(samozřejmě s výjimkou sudo -i
, kdy vědomě předám všechna rootovská práva jinému uživateli).
Přičemž je myslím symptomatické, že za celé ty dva dny v obou diskusích nepadl jediný příklad bezpečného použití sudo
Ale ano, padl. Situace, kdy neřešíte bezpečnost, ale chyby obsluhy. Tedy, kdy mi nevadí dát kolegovi klidně celého roota, ale je mi pro eliminaci problémů milejší mu aspoň měkkou metodou omezit to, co smí dělat. Např. na vývojovém serveru by mi nevadilo, kdyby měli programátoři klidně roota - ale ve skutečnosti nejsou dost zběhlí na to, aby neudělali malý problém (malým problémem myslím např. dočasné rozhození vývojového serveru) - a tak mají povoleno např. jen restartovat službu, restartovat server, změnit systémový čas apod. - a k tomu všemu mají jasné kuchařky ve Wiki.
Neřeším tedy bezpečnost z hlediska průniku do systému (nezajímá mě, nevadí mi), ale z hlediska snížení výpadků a prostojů v práci.
Obdobný přístup můžete mít právě k desktopu.
Hlavně prosím vás nevykládejte teenagerům, že jednou z variant bezpečného sexu je prostě to neřešit a vlítnout na to.
Pokud se budou snažit o potomka a řeší pouze zdraví, pak bohatě stačí věrnost...
Slovo bezpečnost nevyjadřuje žádnou absolutní míru. Je vždy relativní vůči tomu, co požadujete či očekáváte. ...snad proto traktory a bagry nemají airbagy?
Pane Jirsáku, vy btw tedy tvrdíte, že jsou vývojáři Debianu tupci, když sudo stále implementují a vy tomu rozumíte lépe? Možná byste se do toho měl vložit a napsat jim, svět potřebuje geniální lidi. Je škoda, že trávíte většinu svého života dohadováním se na Rootu, to je promarněný talent bezpečnostního odborníka, který strčí do kapsy i takhle slušné vývojáře.