jen bych dodal, že chyba se týká i všech RHEL/CentOS od 6. Aktualizační maratón již máme za sebou, jsem si říkal, co to je tentokrát.
Stejně tak existuje v Archu a nejspíš všude možně. Z audit logů jsme zatím žádné zneužití nenašli, teď to ale asi budou všichni zkoušet
27. 1. 2021, 00:02 editováno autorem komentáře
Především koncept, že jsem-root-nebo-nic je nedostačující. Služby a přístup ke službám se dělí (dají dělit) na mnohem smysluplnější menší celky oprávnění (rolí).
Elevace práv - ve smyslu: požaduji druhotné ověření pro určitou operaci - to je naprosto v pořádku. Co není v pořádku je, že na každou kravinu (např. restart služby, zrotování logů) vůbec potřebuji získat superoprávnění (poskytne sudo) a následně toto superoprávnění ohejbáky (složitou konfigurací, náchylnou k chybě) omezuji.
Sudo v podstatě dělá to samé, jako su, ale přidává právě ty konfigurační ohejbáky na to, abych se snažil omezit to, co bych vůbec neměl ani získávat. A jako jakékoliv složité ústrojí, je i sudo náchylné na chyby, jako je například tato.
90 % toho, co děláme přes sudo, by vůbec nemělo nepotřebovat oprávnění roota.
27. 1. 2021, 10:14 editováno autorem komentáře
Ono to pak dal vede k bezpecnostnim "konceptum", ktere se zjednodusi na:
"mas root-a" => je to desne nebezpecny
"nemas root-a" => vsechno je absolutne bezpecny.
Takze napr. DB Administrator nakonec nemuze ani zjistit kolik je voleho mista v diskgrupe. Zvlaste ve velkych korporatech ja takovy princip hodne oblibeny.
Nakonec ve firme vznikne privilegovana skupina lidi, ktera muze pracovat, a "ostatni", kteri musi ty prvni prosit pokazde, kdyz je potreba diagnostikovat nejaky problem.
Tak treba na Solarisu a i na Linuxu se systemd vubec roota na restartovani service nepotrebujes. Na Solarisu to resej authorizace, kde pro kazdou akci na dany sluzbe muzes mit jiny prava. Na Linuxu PolicyKit
https://wiki.debian.org/PolicyKit
Cili pokud vsechno delas pres sudo, delas to spatne ;).
jakou máš alternativu na multiuživatelský systém, když chceš umožnit uživatelů provádět konkrétní akce s vyšším oprávněním a ověřením heslem/2FA?
OpenBSD na to šlo od lesa, odstranilo sudo a přidalo doAs, která umí pouze změnit identitu uživatele (su bez nutnosti znát heslo na root účet). Multiuživatelský systém nevyřešilo, ale aspoň zajistilo bezpečnost toho základu.
Ano, koncepce zabezpečení linuxu je obludná (linux myšlenky unixů již poněkud rozšířil). Je obrovsky těžké udržet oddělené aplikace, aby si navzájem nemohli škodit. Pokud se na takový systém dostanou uživatelé, je to ještě horší, sudo jen záplatuje špatný návrh a není to pěkné.
Ne, je to jednodušší a bezpečnější náhrada sudo (tedy alespoň dle deklarace).
https://en.wikipedia.org/wiki/Doas
Podle mne je to nemožné. Podle mne sudo je jedna velká bezpečnostní díra bez ohledu na to, zda zrovna je nebo není veřejně známa nějaká chyba v kódu. Chyba je totiž už v samotné koncepci sudo. Navíc se sudo používá pro něco, pro co původně vůbec nebylo určeno.
Přitom tam, kde se sudo nejvíc rozšířilo – pro práci na pracovních stanicích – vůbec není potřeba. Pro trvalé přepnutí na roota dávno existuje su. Stejně jako pro „následující příkaz proveď s právy roota“.
Ale ona nečitelná a nebezpečná není jenom implementace, ale i specifikace. I kdybyste teď napsal nové sudo třeba v Rustu jako náhradu 1:1, pořád bude používat stejný konfigurační soubor, který sám o sobě je nečitelný a nebezpečný. Pořád by to bylo založené na cestách v souborovém systému.
takže bezpečná náhrada by musela přijít s novým způsobem konfigurace, s novým způsobem určování bezpečných binárek. Pak už by tam zbyl „jenom“ ten problém, že se spoléhá, že spuštěná binárka dělá přesně to, co má, neobsahuje žádné zneužitelné chyby ani vlastnosti, které jsou sice záměr, ale v kontextu spuštění pod rootem je lze zneužít pro získání vyšších oprávnění.
To mne zajímá, jak na stanici fungujete bez přístupu k rootovským oprávněním?
Pokud máte na mysli něco jako PolicyKit, tak bych si typnul, že je řádově složitější než sudo a pravěpodobnost chyby je tam také velká. Navíc to není univerzální už. přístup.
Koncepce sudo je výborná, jen je ve většině distribucí špatně nakonfigurované (příliš otevřené ...)
su je věc která nikdy neměla vzniknout ... bez jakéhokoliv omezení, auditu a s požadavkem na znalost root hesla ...
Já třeba neznám jediné root heslo pro své stanice a servery. Jsou vygenerované v obálce v trezoru (servery). Nedokážu si představit, že všichni admini znají root heslo, jeho pravidelnou změnu ...
Ono toho moc není a sudo je asi nejlépe použitelný, je dá nějakou práci připravit správně konfiguraci, není snadné její správnost ověřit. Těch projektů jsem potkal více, ale stejně pořád mám sudo. Líbil jsem mi pfexec na Solarisu.
V enterprise systémech poměrně vévodí placený CyberArk. Koncepce zabezpečení v Linuxu je ale v tomhle ohledu nevhodná.
Já třeba neznám jediné root heslo pro své stanice a servery. Jsou vygenerované v obálce v trezoru (servery). Nedokážu si představit, že všichni admini znají root heslo, jeho pravidelnou změnu ...
Pletete dvě funkce sudo programu. Jednou z nich je druhotné ověření - a to je v sudo vymyšlené dobře, proti tomu nic; takový způsob má svůj smysl.
To, co je předmětem kritiky je to, že linux (jeho služby) požadují na každé uprdnutí vyrovnat práva s rootem a jejich získáním obdržíte neomezenou kontrolu nad vším. Sudo tuto špatnou koncepci legitimizovalo (což je zřejmé i podle zdejší diskuse).
Lidé si dávají rovnítko mezi druhý faktor ověření a bezpečnost. Mezi těmito pojmy není ekvivalence; druhotné ověření je jen faktor bezpečnosti. V rámci dobré bezpečnostní koncepce má 2FA svoje důležité místo. V rámci špatné koncepce to 2FA příliš nezachrání, jen kosmeticky zlepšuje katastrofu.
To mne zajímá, jak na stanici fungujete bez přístupu k rootovským oprávněním?
Na tom je vidět, jak jsou z toho uživatelé zmatení. „Bez přístupu k rootovským oprávněním“ je nesmysl. Root je uživatel jako každý jiný, má login ( root) a heslo. Takže k němu samozřejmě přístup mám, jako ke každému jinému uživateli.
Koncepce sudo je výborná, jen je ve většině distribucí špatně nakonfigurované (příliš otevřené ...)
Ono ale nejde nakonfigurovat správně.
su je věc která nikdy neměla vzniknout ... bez jakéhokoliv omezení, auditu a s požadavkem na znalost root hesla ...
To, že je to bez omezení, je záměr. Chyba je naopak sudo, které se tváří, že ta nějaké omezení jsou, ale nikdo je vlastně nedokáže zaručit. Požadavek na znalost root hesla je správný – s root oprávněními má pracovat jenom ten, kdo zná heslo na roota. Navíc su je samozřejmě možné nakonfigurovat tak, že ho důvěryhodní uživatelé mohou spouštět i bez zadávání hesla. Protože su dělá přesně to, o co se většina snaží se sudo – tedy když s počítačem nepracuji, ale spravuji ho, nepotřebuju ke všemu rootovské oprávnění. Takže je zbytečné a trochu nebezpečné, abych byl po celou dobu přihlášen jako root. Třeba manuálovou stránku si klidně přečtu i pod běžným uživatelem. A pomocí su si zvýším oprávnění jenom v tom okamžiku, kdy provádím operaci, která rootovská oprávnění vyžaduje
Já třeba neznám jediné root heslo pro své stanice a servery.
Já také ne. Přihlašuju se klíčem, a pokud se chci na roota přepnout ze svého běžného uživatele, mám tam su bez hesla.
Nedokážu si představit, že všichni admini znají root heslo
Já si zase nedokážu představit, že někdo umožní uživateli spouštět aplikace pod rootem a myslí si, že dotyčný potřebuje znát rootovské heslo, aby mohl pod rootem něco dělat.ne, to je jen iluze. Zabezpečit linuxový stroj tak, aby se běžný lokální uživatel nedostal kvůli nějaké chybě na roota, není úplně snadné. Zabezpečit ho tak, aby někdo, kdo má oprávnění spouštět něco pod rootem, nezískal plnohodnotného roota, je prakticky nemožné. Pokud nezavedete další úrovně zabezpečení jako SElinux apod.
jeho pravidelnou změnu ...
Pravidelná změna hesla bezpečnost spíš snižuje, rozhodně ji nezvyšuje. Ale ke spoléhání se na sudo se takovéhle „opatření“ vlastně hodí. Ještě bych přihodil fail2ban, přesun SSH na jiný port, zákaz přihlášení roota přes SSH. Samé takové „osvědčené“ metody, jak vykazovat činnost a přitom bezpečnost spíš zhoršovat.
"root je uživatel jako každý jiný"
No není, ale to je vedlejší.
Když používáte root jako účet, musí každý, kdo má věc spravovat, znát heslo roota. Chcete mít nějakou zastupitelnost. Takže buď všichni oprávnění znají heslo roota, nebo to heslo vůbec nemusí existovat a všichni oprávnění používají své heslo - a jen měníte, kdo je na tom kterém stroji oprávněný, třeba jen dočasně. Při používání účtu root byste to heslo musel pořád měnit.
Takže z provozního a nakonec i bezpečnostního hlediska je to mnohem lepší.
Jestli se vám nelíbí konkrétně sudo, dá se asi zkusit doas. Minimálně tam bude míň chyb pro script kiddies.
Koncept ale špatný není, tedy, aspoň reálně nic moc lepšího není.
... , aspoň reálně nic moc lepšího není.
To je pravda. Bohužel, sudo a jeho nastartovaná popularita nás vzdálily od toho začít problém řešit. Starší generace adminů, která si nejprve musela stačit se "su", ví, že "sudo" není řešení, ale jen obezlička. Mladší adminové - a je to vidět i zde - už to nevnímají a přijali to jako standard, nevidouce rizika, která v pozadí zůstávají. Proto sudo nemám rád.
ehm.. pocatek sudo se datuje k roku 1980 ;-)
Jenže se prakticky nepoužívalo. Zpopularizovalo ho až Ubuntu, které se tak snažilo zařídit, aby uživatel běžně nepracoval s právy roota, ale nemusel přemýšlet nad tím, kdy je potřebuje. Teprve pak vyrostla generace uživatelů, která – když jim příkaz vypíše chybu – automaticky zopakují ten samý příkaz a před to napíšou sudo (nebo píšou sudo rovnou všude). Tenkrát jsme začali zjišťovat, proč se v různých návodech na internetu začíná objevovat příkaz sudo, co vůbec dělá, a proč to není řešeno standardně odlišením promptu – $ pro uživatele a # pro roota. Pak se zjistilo, že ta nová distribuce pro zelenáče standardně neumožňuje přihlášení na roota a radí používat sudo.
Filip Jirsák 19:55
ja si pamatuju kdyz sudo Ubuntu zacalo pouzivat ;-)
> když jim příkaz vypíše chybu – automaticky zopakují ten samý příkaz a před to napíšou sudo (nebo píšou sudo rovnou všude)
coz neni "horsi", nez kdyz vsude rovnou pisou "su -" ;-)
> standardně neumožňuje přihlášení na roota a radí používat sudo.<
coz je logicke, unlocknout (hesloveho) roota jde/slo snadno:
sudo passwd
Starší generace adminů, která si nejprve musela stačit se "su", ví, že "sudo" není řešení, ale jen obezlička.
Tak znova: sudo/doas je zřetelné zlepšení proti su.
Obezlička? A co tedy je lepšího? Nic?
Ono sudo má ještě další výhody: třeba když acme.sh nechcete pouštět pod rootem, tak ale musíte post-hook s nějakým oprávněním pustit (typicky "service httpd restart"). Tady zase pomůže sudo - můžete povolit, že uživatel acme smí spustit právě jen tohle.
Mladší adminové - a je to vidět i zde - už to nevnímají a přijali to jako standard, nevidouce rizika, která v pozadí zůstávají.
Proč myslíte, že nevidí rizika? A standard to je. Lepší nemáte - nebo ano? Sem s ním! Takže sudo můžete nemít rád, ale to je asi tak všechno, co s tím můžete dělat.
Tak znova: sudo/doas je zřetelné zlepšení proti su.
Nepomůže, když to budete opakovat – spíš byste měl napsat alespoň jednu výhodu.
Dnes se sudo v drtivé většině případů používá jako náhrada za su nebo su -c. Tam je asi hlavní výhoda v tom, že je ten příkaz delší?
Tady zase pomůže sudo - můžete povolit, že uživatel acme smí spustit právě jen tohle.
Jenže to, že že může spustit právě tohle, neznamená, že prostřednictvím toho nebude moci spustit cokoli dalšího.
Proč myslíte, že nevidí rizika? A standard to je. Lepší nemáte - nebo ano? Sem s ním!
Mám su. Které reálně poskytuje stejnou bezpečnost, ale nesnaží se to vyvolat dojem, že je to bezpečnější.
A standard to je. Lepší nemáte - nebo ano? Sem s ním! Takže sudo můžete nemít rád, ale to je asi tak všechno, co s tím můžete dělat.
Standard to není, mnohé distribuce ho v základní instalaci ani nezahrnují (asi z něj nejsou tak unešení).
Víc než vyjádřit se ani nežádám. A vyjádřil jsem se, že je to zvěrstvo, které zakrývá koncepční zastaralost oprávnění v unixech a zpomaluje nás od cesty k opravdovému zlepšení.
27. 1. 2021, 20:03 editováno autorem komentáře
"root je uživatel jako každý jiný"
No není, ale to je vedlejší.
root je uživatel jako každý jiný, který má nějaké vlastnosti navíc. Podstatné pro můj komentář je to, že mu žádný z vlastností jiných uživatelů nechybí.
Když používáte root jako účet, musí každý, kdo má věc spravovat, znát heslo roota. Chcete mít nějakou zastupitelnost. Takže buď všichni oprávnění znají heslo roota, nebo to heslo vůbec nemusí existovat a všichni oprávnění používají své heslo - a jen měníte, kdo je na tom kterém stroji oprávněný, třeba jen dočasně. Při používání účtu root byste to heslo musel pořád měnit.
Nepochopil jsem, co tímhle chcete říct. Pokud se používá sudo -i jako náhrada su (tedy spuštění shellu pod rootem), je to podle mne zvrácené. Nicméně jak plyne z toho, že je to jen náhrada su, lze se v takovém případě bez sudo samozřejmě obejít – prostě použiju originál, su.
třeba jen dočasně
Pokud někomu svěřím roota a věřím mu, že je to jen dočasné, můžu mu věřit i v jiných věcech, ne? Třeba že si to heslo nepoznamenal. Když už se tedy bavíme o hesle – já pořád nevím, k čemu je heslo roota dobré – přes ssh se hlásím klíčem a su heslo pro oprávněné uživatele nevyžaduje.
Takže z provozního a nakonec i bezpečnostního hlediska je to mnohem lepší.
Co je lepší než co?
Koncept ale špatný není, tedy, aspoň reálně nic moc lepšího není.
Koncept špatný není, má jedinou drobnou nevýhodu – vůbec nefunguje. Ten koncept se totiž tváří, že někomu dáte malinký kousek oprávnění, ke kterým by jinak potřeboval roota. Ve skutečnosti mu dáváte celého roota a jenom věříte, že toho nezneužije (ani omylem) nebo to nebude umět. Pro mne to není bezpečnost ale předstírání bezpečnosti.
doas je možná lépe naprogramovaný než sudo, má trochu příčetnější konfigurák, ale tím to, že je bezpečnější, končí. Pořád tam je minimálně ta obří bezpečnostní díra, že spouštím program, který byl navržen, že poběží pod rootem (takže nemá moc smysl bránit v něčem uživateli – je to root a ten může cokoli) má najednou pečlivě střežit oprávnění roota a nedovolit uživateli vůbec nic jiného, než co mu správce udělující „oprávnění“ přes sudo chtěl povolit. (Jak se to má ta aplikace vůbec dozvědět, co správce chtěl povolit?)
Je to jako zařídit velín atomové elektrárny tak, že dovnitř se dostanou jen povolané osoby a kdo už je uvnitř, může s reaktorem dělat naprosto cokoli. A pak zavést za provozu exkurze s tím, že skupina bude mít maximálně dvacet lidí a ty dokáže průvodce ohlídat, aby nemačkali nic důležitého. No, tak na papíře to bude fungovat, když tam budete mít samé disciplinované skupiny, které nebudou dělat chyby, bude to fungovat i reálně – ale že by ten průvodce zaručoval bezpečnost, to bych netvrdil.
BobTheBuilder: Aha, takže výhoda sudo oproti su je v tom, že se chová úplně stejně – může ale nemusí vyžadovat heslo.
Jinak je to jako nosit u pasu odjištěnou pistoli.
Ano, v tom je právě ten rozdíl. su je jako nosit u pasu odjištěnou pistoli. sudo je jako nosit u pasu odjištěnou pistoli a dělat, jako že žádnou pistoli nemáte. Já dávám přednost tomu, že když někdo má odjištěnou pistoli, tak se podle toho chová.
Ne, sudo je jako pistole, kterou odjistíte a ona se po chvíli nepoužívání zase zajistí. To je zřetelně lepší.
su bez hesla se mi zdá poněkud zvláštní přístup k bezpečnosti.
Zvýšení práv by se mělo ověřit (heslem), ale zadávat heslo pořád znova je otrava, su s timeoutem je rozumný přístup. Ostatně, přehnaná bezpečnost vede k tomu, že ji lidi obcházejí - viz UAC ve Windows Vista, to bylo tak otravné, že to lidi vypínali. Ve Win10 s tím problém není.
Zvýšení práv by se mělo ověřit (heslem)
Záleží případ od případu. Na desktopu to IMO potřeba není, tam je důležitější ten dialog (á la UAC). Na serveru, pokud uživatel existuje stejně jen kvůli tomu, aby byl jen administrátorem (neprovádí žádnou uživatelskou práci), pak su bez hesla víceméně stačí; ztrácí se tím jedna bariéra, která může pomoci při úniku ssh klíče - ale to už je na posouzení administrátora.
viz UAC ve Windows Vista, to bylo tak otravné, že to lidi vypínali. Ve Win10 s tím problém není.
Rozdíl je v tom, že ve Windows od dob Vista částečně snížili citlivost, ale velkou měrou přepracovali služby tak, aby zvýšená práva tak často nevyžadovaly. Došlo k posunu oběma směry a k vývoji. Nadužívání sudo naproti tomu vývoj nijak nestimulovalo, spíš ho ještě přibrzdilo
Ne, sudo je jako pistole, kterou odjistíte a ona se po chvíli nepoužívání zase zajistí. To je zřetelně lepší.
Problém je v tom, že vy uvažujete o jediném nebezpečí – že někdo půjde kolem a něco vám napíše do terminálu. Před tímhle nebezpečím chrání zamykání obrazovky. Skutečné nebezpečí je ale v kódu, který spouštíte. Před tím vás ale nezachrání, jestli heslo nezadáváte vůbec, zadáváte ho jednou nebo opakovaně.
Zvýšení práv by se mělo ověřit (heslem)
Proč? Zvyšuje to snad bezpečnost? Nebo je to takový pěkný rituál, který každého otravuje, takže to určitě musí přispívat bezpečnosti? Třeba jako pravidelná změna hesla?
Ostatně, přehnaná bezpečnost
To je právě ten problém v zaměňování otravnosti s bezpečností. Ne vše, co je otravné, je zároveň bezpečné.
třeba jen dočasně
Pokud někomu svěřím roota a věřím mu, že je to jen dočasné, můžu mu věřit i v jiných věcech, ne? Třeba že si to heslo nepoznamenal. Když už se tedy bavíme o hesle – já pořád nevím, k čemu je heslo roota dobré – přes ssh se hlásím klíčem a su heslo pro oprávněné uživatele nevyžaduje.
Az se budete prihlasovat na konzoli serveru pres ilo, tak vam ssh klic bude na dve veci...