V Linuxu se taky dá použít machinectl:
machinectl shell --uid=root
Není to přímý ekvivalent sudo, protože se tím vytvoří celé nové sezení jako kdyby se root přihlásil přímo. Záleží na případech použití, v některých se to výborně hodí. Nevýhoda je, že to předpokládá funkční polkit. Výhoda je, že místo sudoers se to dá nastavit přes polkit.
No ja neviem ... V článku je jasne napísané "Proti sudo má ale doas dvě výhody: je menší a má jednodušší konfigurační soubor. Obojí dohromady znamená menší složitost a méně bezpečnostních problémů." Platí to aj pre machinectl? Neštudoval som zdrojáky, ale mám pocit, že machinectl + polkit bude zložitosťou minimálne na úrovni sudo, možno aj o rád horšie.
Koncepčně je machinectl řádově složitější, než sudo. Jenže jak právě i tento příklad dokazuje, představa "jednodušší kód = méně bezpečnostních problémů" není automaticky pravda. Konkrétně tady byl problém v tom, že sudo implementuje parser (z podstaty věci zpracovává potenciálně nebezpečná vstupní data), v C (z podstaty věci snadno zranitelný), v rámci privilegovaného procesu - setuid root (což je konceptuálně špatně). Je to sice jednoduché, ale zároveň už z principu jasně nebezpečné.
machinectl je neprivilegovaná utilita, ověřování práv provádí nezávislý proces (polkit) a případný start sezení pod root další nezávislý proces (systemd). Je to složité, ale pokud se důvěřuje dbusovým rozhraním mezi nimi, pak zpracování nebezpečných dat a bezpečnostně kritické operace jsou vzájemně striktně oddělené, takže i kdyby dejme tomu v programu machinectl byla tatáž chyba, jako v sudo, takto zneužít by ji nešlo.
To samozřejmě neznamená, že machinectl a celé prostředí dbus/polkit/systemd nemůže mít zase jiné problémy. Jenže ve skutečnosti bezpečnost nakonec vždycky záleží na jádru a LSM, což je ještě mnohem komplexnější, než tohle všechno dohromady. Takže argument o jednoduchosti je z velké části lichý.
Není to nesmysl obecně, jen je nesmysl používat ho "the Ubuntu way", tj. podle hesla "když to vyžaduje práva roota, napište před příkaz sudo
". Já ho třeba používám k tomu, abych mohl konkrétní příkazy (včetně parametrů), které potřebují práva roota, spouštět pod svým normálním uživatelem, pro ty příkazy pak obvykle mám i nějaký alias nebo wrapper script. Na tohle se to naopak hodí velmi dobře.
V konfiguraci PAM nastavíte pro příslušný auth
řádek povolující použití su
na roota atribut trust
(typicky se to nastavuje pro skupinu wheel
) – tím umožníte oprávněným uživatelům spouštět su
bez zadávání hesla roota.
Aby ten uživatel nemohl spustit nic jiného, než ten konkrétní příkaz, nedokáže zajistit ani sudo
. To jen spustí ten příkaz pod rootem, a dál už nedovede ovlivnit, jaký kód nebo procesy ten příkaz bude spouštět.
Ne, jestli ten příkaz umožní něco dalšího není věcí admina, je to věcí autora toho příkazu a všech závislostí.
Podle mne ten účel, kterého se snaží docílit sudo
, je v praxi nesplnitelný. Právě to mi vadí, že to slibuje něco, co nedokáže žádným způsobem zaručit. A spousta lidí tomu věří.
Neměl bych problém s tím, pokud by si takhle někdo používal sudo soukromě. Ve smyslu vím, že to není bezpečné, ale tomuhle nemehlu bych potřeboval umožnit tohle spustit pod rootem, na záměrné škodění nemá schopnosti, i kdyby něco napáchal, nestane se nic hrozného, a nevyplatí se řešit to pořádně. Všichni víme, že je potřeba dělat kompromisy, že provozujeme řešení, která nejsou perfektně zabezpečená – ale děláme to s vědomím toho rizika a se znalostí bezpečnostních dopadů.
Jenže takhle se sudo
od dob Ubuntu nepoužívá. Začalo se používat jako nejdůležitější bezpečnostní nástroj, který odděluje běžného uživatele od rootovských práv. Jenže ten nástroj tohle neumí a nemůže umět. O čemž bohužel evidentně většina uživatelů neví.
Mimochodem, v tomhle vlákně byla řeč o pracovní stanici. Tedy já jako jediný uživatel používám počítač, ke kterému zároveň mám administrátorské oprávnění. A jediné, co chci, je nepracovat zbytečně pořád pod rootem, abych omylem nenapáchal nějakou škodu. Tam je mi sudo
opravdu k ničemu, protože před mojí blbostí mne neochrání. Je to přesně ten případ, kdy se sudo
používá jako náhrada su
– nejsou vyjmenované příkazy, které mohu jako root spouštět, naopak, záměrně je povolené úplně všechno.
gparted nepouziva sudo ale poolkit (tak jako vetsina GUI programu (s vyjimkou tech kterem autor nenapsal parradkovej wrapper pro pkexec a polkit pravidlo)), drive se pro gui pouzivalo gksudo(z balicku gksu) ktere aby uz je obsolete, takze v distrech neni pritomno, tedy kdyz se GUI SW zepta na heslo, z 99% to je polkit dotaz...
Hlavně chybí wildcardy, ovšem pozor u sudo s wildcardy, viz https://blog.compass-security.com/2012/10/dangerous-sudoers-entries-part-4-wildcards/
Pravděpodobně to je potenciálně nebezpečné, ale já jsem si poslední dobou oblíbil "su bez hesla pro všechny ve skupině wheel" - není k tomu potřeba nic doinstalovávat, pouze v /etc/pam.d/su odkomentovat
auth sufficient pam_wheel.so trust group=wheel
Jsem si vědom toho, že to nejspíš není ten správný přístup, jen mi to přišlo fér zmínit, když už se tady psalo o tolika možnostech (sudo, doas, systemctl magie nademnou...)
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.
Jen dotaz "trochu bokem": neznamená "sudo" spíš "switch user and do" než "superuser do"?
Měl jsem za to, že se dá switchnout i na někoho jiného, než roota. (Alespoň u nás ve firmě, když žádám o dočasné povolení "sudo", musím napsat, na kterého uživatele se budu přepínat. Jasně, že to je snad vždycky "root", ale proto se, já začátečník, ptám.)
: Výchozím uživatelem při použití doas je root, pokud chceme něco jiného (a máme
: to povolené), musíme použít parametr -u. Můžeme pak příkaz spustit pod jiným
: uživatelem:
: # doas -u www vim index.html
I sudo umí už dávno -u i -g. Zajímavé je spíš to, jestli doas nastavuje (nebo lze
nakonfigurovat) aspoň něco jako SHELL=/bin/false, protože jinak se dá při editaci
skočit do shellu a dělat cokoliv privilegovaně, že. Na editaci souborů je sudo
lepší pustit jako sudoedit a pak se editace realizuje na pracovní kopii a až po
skončení práce editoru se updatuje původní soubor. Proti sudo má asi doas
zásadní užitečnost v možnosti 'deny'. Ať už sudo nebo doas nebo cokoliv,
povolovány by měly být jen zcela konkrétní akce, aby byly řádně logovány. Třeba
'sudo -i' (resp. 'sudo sh') je prasárna, i když to je velmi pohodlné.
V OpenBSD je možné použít také volbu persist, která dovoluje již jednou autentizovaného uživatele nějakou dobu neobtěžovat zadáváním hesla (jako to umí sudo). Bohužel tato volba v Linuxu či FreeBSD zatím nefunguje.
Očividně existuje více implementací; na Alpine Linuxu se používá implementace z https://github.com/Duncaen/OpenDoas, která persist
umí, pokud se povolí při kompilaci.
./configure --with-persist make make install
Nicméně k tomu autor přidává varování: This feature is new and potentially dangerous, in the original doas, a kernel API is used to set and clear timeouts. This API is openbsd specific and no similar API is available on other operating systems.
As a workaround, the persist feature is implemented using timestamp files similar to sudo.
Osobne nepovazuji stastne prebirat jednodussi reseni z jine a minoritnejsi platformy do Linuxu automaticky s tim, ze "PROTO BUDE BEZPECNEJSI".
Nebude (PROTO), to spise naopak.
Podstatne vice utoku, analyz a regresnich testu se delalo na linux a sudo (a stejne to nestacilo), je mnohem pouzivanejsi, a to, ze ma vice znamych problemu, je dusledek toho sirsiho pouzivani, a to, ze ma rozsahlejsi akod a vice funkci take (uzivani = feature for req = opravy = bobtnani kodu).
Naopak doas na linuxu muze trpet problemy, ktere na OpenBSD ani nejsou, tim padem sance, ze je nekdo na linuxu detekuje, se proti OpenBSD jeste radove snizuje.
Port doas na linux je pak svym zpusobem sazka do loterie, protoze tim se stane (na linuxu) jeste minoritnejsim a mene pouzivanym (a tim i testovanym, atakovanym, opravovanym).
Typicky v minulosti treba https://nvd.nist.gov/vuln/detail/CVE-2019-15901
Ve finale, pokud podstatna cast linux uzivatel prejde, se muze hypoteticky stat, ze na rozdil od pomerne uzavreneho a striktne rizeneho vyvoje v ramci OpenBSD bude port v "demokratictejsim" linuxu na prani uzivatel vylepsovan proti vuli puvodniho autora, forkne se od puvodniho kodu doas, a bude mit vlastni nove chyby a featury, a za par let tu mame zase sudo, jen jinak pojmenovane.
Mezitim nam nedejboze RH s Lenartem nadeli funkcionalitu sudo via nejake systemd like tooly (smajlik neudelam, abych to neprivolal)
Upřímně řečeno, význam SUDO mi dlouhodobě uniká.
Na desktopu mám určeného správce systému, který zná heslo root-a a tím pádem sudo nepotřebuje. Ostatní potenciální uživatelé prostě mají smůlu, požádají administrátora (jedná se o jednotky osob a jednotky případů), vlastně ani nemají potřebu toto řešit jinak, než že požádají svého admina.
A na serverech jsme sudo dříve masivně používali a připadali si cool. Jenže pak jsem zjistil, že stejně většina uživatelů-správců jako první příkaz po příhlášení použili (ekvivalent) sudo su - a zbytek odmakali přímo jako root. Takže uživatelské účty pro správce neměly význam. Sudo tedy zůstalo jen tam, kde někdo měl potřebu pouštět něco, co nešlo udělat úpravou práv (pokud nemohl být puštěn na plného root-a) a ostatní správci mohli přímo na root-a. A přístup jsme řídili pomocí SSH klíčů.
Použití sudo obvykle u jednoho příkazu nekončí, takže je nakonec lepší otevřít si rootovský terminál rovnou.
Takže jako mnoho ostatních, názor, že sudo a podobné zvyšují bezpečnost je dle mého názoru nesmysl...
Myslím že zase tak špatná myšlenka by to nebyla, kdyby se to dotáhlo do konce (velmi dobře si dokážu představit via sudo -> command udělat domain transition v selinuxu).
su(do) s heslem nebo čímkoli si taky dovedu představit zase jako prostředek, jak systém rozliší jestli ten privilegovaný příkaz opravdu pouští uživatel a ne pod ním běžící exploitnutý browser, ale to je tak vše.
Plně souhlasím s tím co píšete - ssh s klíčem - stačí zapnout Verbose v sshd_config a pro účely auditu se loguje hash použitého klíče = konkrétní admin. A pokud admin na serveru děla něco jiného než administraci (na kterou toho roota potřebuje), je already něco nedobře. (a dedikovaný účet jako oracle, pod kterým si může dělat dbadmin co chce se používá taky už pěkně dlouhá léta.)
Ten bug popisovaný v odkazovaném článku je už docela starý.
Máme tady docela čerstvý kousek: CVE-2021-3156.
Ano, proto jsou v článku odkazované tři bugy, včetně toho posledního. Také jsme o něm měli samostatnou zprávičku a právě na základě diskuse pod ní pak vznikl článek o Doas.
No nevím, bez ohledu na jednoduchost nebo složitost řešení a princip se i dočasná eskalace práv dá vždycky zneužít.
Ono nic nezabrání uživateli, aby si stáhnul /etc na SD kartu, doma pod rootem na svým stroji poupravil a když zvládne mount, napíše něco jako
mount /dev/mmcblk0p1 /etc/
A nemusí řešit, jestli je za tím sudo, su, doas, indiánský tanec při úplňku, nebo se rovnou přihlásí jako root.
Utilita sudo (superuser do) je tu s námi přes čtyřicet let a řeší klasický unixový problém: jak umožnit uživateli provést akci, ke které potřebuje práva superuživatele root. Na rozdíl od starší utility su nevyžaduje heslo roota, ale uživatel si vystačí se svou vlastní autorizací.
je tedy nevím, ale na všech isntalacích openSuse to mám jinak:
sudo s heslem - jednorázové provedení superuživatelské operace
su s heslem - trvalé přepnutí na superkuživatele
To je dost naivní představa. Málokterý server je opravdu zabezpečen tak, aby se z lokálního uživatele nedalo dostat na roota. Ostatně váš scénář by byl takový, že by si útočník do vašeho profilu nainstaloval zadní vrátka, počkal by, až to heslo napíšete a odchytil by ho, a pak by pokračoval se znalostí toho hesla.
To je kvůli těmto dvěma řádkům v defaultním /etc/sudoers:
## In the default (unconfigured) configuration, sudo asks for the root password. ## This allows use of an ordinary user account for administration of a freshly ## installed system. When configuring sudo, delete the two ## following lines: Defaults targetpw # ask for the password of the target user i.e. root ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
Pokud chcete sudo
používat "normálním" způsobem, je potřeba je smazat nebo zakomentovat.