Portál AbcLinuxu, 5. května 2025 09:24
Aktuální verze jádra: 3.2-rc5. Citáty týdne: Ingo Molnar, Greg Kroah-Hartmann. Bernat: Ladění linuxové route cache pro IPv4. Řešení útoku přes symbolické odkazy.
Aktuální vývojová verze jádra je 3.2-rc5 vydaná 9. prosince. Trvalo to něco přes týden a bohužel musím oznámit, že -rc5 je větší (alespoň co do počtu commitů – většina commitů je dost malá, takže je možné, že *diff* bude nakonec menší, ale nekontroloval jsem to) než -rc2 i -rc4. Tolik k 'uklidňování'. Od -rc4 bylo začleněno 355 změn, což je zajisté více než u -rc2 (280) a -rc4 (207), ale méně než u -rc3 (412). Dohromady bylo od -rc1 1254 změn, což je při něco přes 10 % z celku relativně málo.
Stabilní aktualizace: 9. prosince vyšly stabilní verze 2.6.32.50, 3.0.13 a 3.1.5. Všechny tři obsahují obvyklý dlouhý seznam důležitých oprav.
Začal jsem používat Gnome 3.2 na svém hlavním desktopu před 4 týdny a ačkoliv jsem do toho šel s předsudky a očekával jsem, že to bude nelehké, všechno je zatím překvapivě fajn.
Ve skutečnosti je to nejlepší (myšleno nejpoužitelnější, nejintuitivnější) linuxový desktop, co jsem pro vývoj jádra a procesy spojené s jeho údržbou kdy používal. Nepřekáží mi, snaží se být tam, kde jej potřebuji a bere ergonomii používání a konzistenci UI tak vážně jako Apple a Google. Chvála.
-- Ingo Molnar
Tvá další sada patchů by měla raději mít správně napsané položky v soupisu změn, které popisují to, co patche vlastně dělají, měla by být řádně očíslovaná (žádný hovadiny jako 30/30 po řadě 00/29), neměla by rozbít kompilaci (opravdu chci příliš?), měla by se aplikovat bez okolků a na závěr by tomu vypomohla domácí vánočka tvého výběru, hlavně aby byla čerstvá a nebyly v ní sušené kousky ovoce (namočené v likéru by nevadily.)
Vincent Bernat zaslal dlouhý popis toho, jak funguje cachování rout v IPv4 a jak to poladit pro co nejlepší výsledky. Jakmile byla do cache rout přidána položka, existuje několik způsobů, jak ji odstranit. Většina položek je odstraněna garbage collectorem, který prochází route cache a odstraňuje neplatné nebo staré položky. Bude spuštěn, když se route cache zaplní nebo v pravidelných intervalech, jakmile je dosaženo určité hranice. (Děkujeme Paulu Wisovi).
Problémy se symbolickými odkazy jsou tu s námi už po desítky let, za tu dobu byly dobře pochopeny a vývojáři dostali jednoznačný návod, jak se jim vyhnout. Přesto jsou tu stále s námi a nové zranitelnosti se pravidelně objevují. Je znám způsob, jak se většině problémů vyhnout pomocí úpravy jádra – což je něco, co se už po mnoho let dělá v grsecurity a openwall – ale nikdy se to nedostalo do hlavní řady. Zatímco jaderní hackeři pochopitelně nejsou moc nadšení z vytváření jaderných obezliček pro rozbité programy v uživatelském prostoru, tento konkrétní problém je natolik závažný, že asi dává smysl to udělat. Vypadá to, že se v tomto směru začíná něco dít.
Základní problém je chyba mezi momentem kontroly a použití (time-to-check-to-time-of-use; TOCTTOU). Rozbité aplikace ověří přítomnost nebo vlastnosti dočasného souboru před jeho otevřením. Útočník může využít chyby změněním souboru (často vytvořením symbolického odkazu) mezi kontrolou a open(). Pokud má program s chybou vyšší oprávnění (např. setuid) a útočník nahradí soubor odkazem na systémový soubor, může se objevit vážný problém.
Tato chyba se obecně děje ve sdílených, všem zapisovatelných adresářích s nastaveným sticky bitem (jako /tmp). Sticky bit je nastaven, aby bylo uživatelům zabráněno mazat soubory jiných uživatelů. Takže oprava omezuje schopnost následovat odkazy ve sticky adresářích. Především je symbolický odkaz následován jen v případě, kdy je vlastněn tím, kdo následuje, nebo pokud adresář a odkaz mají stejného vlastníka. Toto řeší většinu problémů se symbolickými odkazy na systémové soubory, aniž by se porouchaly nějaké známé aplikace.
Na patche omezující následování symbolických odkazů jsme se dívali v červnu 2010. Od té doby se objevil dvojí přístup vedený Keesem Cookem ve snaze dostat kód do hlavní řady. Prvním je Yama LSM, jehož cílem je sesbírat rozšíření modelu nezávazného řízení přístupu na Linuxu [Linux discretionary access control; DAC]. To ale naráží na obvyklý problém se specializovanými LSM: nemožnost kupit LSM na sebe.
Cook a jiní by ale jistě raději viděli změny v symbolických odkazech v hlavním kódu VFS než přes LSM, ale někteří se snaží věc udržet mimo tento hlavní kód. O Yama a jeho ochraně symbolických odkazů proběhla diskuze u kulatého stolu LSM na Linux Security Summitu, kde se zrodil plán protlačovat Yama jako LSM vylepšující DAC. Možná to nemá zavřené dveře, nicméně Cook zaslal patch, který umisťuje omezení symbolických odkazů do fs/namei.c
Posledně jmenovaný patch vyvolal nějaké zajímavé komentáře, ze kterých by se dalo soudit, že Ingo Molnar a Linus Torvalds v zamezení problému alespoň vidí smysl. Žádný z vývojářů VFS se do diskuze při tomto průchodu nepřipojil, ale Cook upozorňuje, že patch zohledňuje zpětnou vazbu od Al Vira, což by se mohlo brát jako znamení, že není úplně proti. Molnar byl obzvláště nerad, že tato díra stále existuje:
Uff – a již vyřešená návrhová vada VFS, které se dá předejít a dá se opravit, je nadále zneužívána.
Molnar měl také nějaké otázky ohledně implementace, včetně toho, zda by konfigurační volba jádra PROTECTED_STICKY_SYMLINKS měla být standardně zapnuta, ale celkově ho velmi zajímalo, že se patch konečně někam posouvá. Torvalds měl poněkud jiný pohled, Uff. Takhle implementace se mi fakt nelíbí., ale navrhl jiné mechanismy, které by se mohly pokusit vyřešit problém použitím bitů oprávnění na symbolickém odkazu. Jeho argumentem je to, že Cookův přístup není moc slušný, protože je ukrytý, čímž se z toho stává:
nějaké dohackované náhodné chování, které závisí na neviditelné konfigurační volbě, o které lidé ani neví.
Jak ale Cook poukazuje, Torvaldsův přístup má svou vlastní sortu podivného náhodného chování. Nelze popřít, že Torvalds svůj návrh úplně nepromyslel, ale je to známka zájmu o vyřešení problému. Z Cookova pohledu změny, které navrhuje, pouze mění chování sticky adresářů s ohledem na symbolické odkazy, přičemž Torvaldsův návrh by měl širší dopad na vytváření symbolických odkazů. Obojí by mohlo fungovat, ale Cookovo řešení má skutečně výhodu v tom, že navržené změny jsou už roky v provozu v grsecurity a Openwall a odnedávna také v Ubuntu.
Vzhledem k tomu, že několik významných jaderných hackerů je pro vyřešení problému – Ted Ts'o tomu byl v roce 2010 také pozitivně nakloněn – to vypadá, že na přístup přes kód VFS se usměje štěstí. Pokud Viro a ostatní vývojáři VFS nebudou úplně proti, mohli bychom to vidět ve verzi 3.4 (nebo tak nějak).
Pokud na to dojde, je tu ještě jeden související patch, který by se snad také dostal k začlenění do hlavní řady: omezení pevných odkazů (hardlinků). Toto, stejně jako změna symbolických odkazů, aktuálně žije v Yama, i když by se dalo obhajovat, že by to také šlo udělat ve VFS. Tento patch by zakázal vytváření pevných odkazů na soubory nepřístupné (nelze je číst, ani zapisovat) uživateli, který odkaz vytváří. Také to zakazuje pevné odkazy na soubory setuid a setgid. To by ucpalo další díry ve zranitelnosti kolem symbolických odkazů a vyřešilo by to i další zranitelnosti.
Pokud by se omezení symbolických i pevných odkazů dostala do VFS, v Yama by zůstalo jen omezení ptrace(). Tato omezení umožňují administrátorům zakázat procesu dělat ptrace() na cokoliv jiného než vlastní potomky (leda by proces měl zapnuto CAP_SYS_PTRACE). Aktuálně může jakýkoliv proces dělat ptrace na libovolném jiném procesu se stejným UID, takže kompromitování jednoho běžícího programu může vést k získání přístupových údajů a jiných citlivých informací z dalšího běžícího programu. Pak se mohou najít i další vylepšení DAC, které by Cook a jiní rádi viděli v Yama.
Tak či tak je problém natolik závažný, že by alespoň administrátoři a distributoři měli mít způsob, jak těmto běžným zranitelnostem zamezit. Ať už je oprava ve VFS nebo LSM, nabídnutí volby umožňující vypnout celou skupinu zranitelností – které mohou často vést ke kompromitování systému – vypadá, že stojí za to. Doufejme, že v tomto směru konečně začínají hýbat ledy.
Pokud ma chybny program vyssi opravneniJe ale také nejednoznačné, protože se to dá pochopit, že vyšší oprávnění dostal jiný program, než měl
Nekdy se vyskytne uplne divne spojeni typu "vánočka tvého výběru".Tady už jsem asi zdegeneroval, protože mi to přijde normální.
Nekdy se take stane, ze prekladatel nerozumi kontextu a proto to prelozi jinak: (namočená v likéru by taky nevadila.)Tady jsem dost váhal, ale protože vánočky nejím (nechutnají mi), netušil jsem, která část se do likéru namáčí. Ale žena upozorňuje, že někde se vánočka namáčí při konzumaci do mléka s likérem
Problem je v tom, ze to "s chybou" se da povazovat za dva ruzne vetne cleny. Brali jsme to v devate tride (nekdy ke konci minuleho tisiciletiPokud ma chybny program vyssi opravneniJe ale také nejednoznačné, protože se to dá pochopit, že vyšší oprávnění dostal jiný program, než měl
Ono staci prehazet slovosled tak, aby melo "s chybou" vetsi vzdalenost od "ma" nez od "program", protoze v pripade vice moznosti se to vaze k tomu blizsimu.No není tak úplně pravda. Člověk při porozumění textu nebere při nejednoznačnosti v úvahu pouze vzdálenost slov ve větě, zvlášť v češtině ne. Ale fakt je, že přívlastek by se měl nacházet u větného členu, který rozšiřuje, takže třeba odtržením a přesunutím na konec. Když to nebude přívlastek, tak ti v tomhle případě z hlediska syntaxe pouze příslovečné určení a předmět, ale v případě předmětu máš očividný významový nesmysl, v případě příslovečného určení máš divnou formulaci.
V češtině ta věta tenhle význam mít nemůže. To byste musel vynechat tu předložku „s“.Pokud má program s chybou vyšší oprávněníDuvod je ten, ze pouzita formulace se da pochopit i tak, ze program ma vyssi opravneni kvuli chybe.
V češtině ta věta tenhle význam mít nemůže. To byste musel vynechat tu předložku „s“.Člověk by čekal, že větu v hlavě pečlivě rozeberete než někoho začnete poučovat. Ta věta přesně takový význam mít může (stačí si na konec věty doplnit potenciálně vynechané „než bez ní“). Tyhle hádky o češtině jsou otravné když se diskutující ani nezamyslí nad tím, jestli ten druhý nemůže mít pravdu.
Je jasné, že případná chyba je vlastností programu, zatímco úroveň oprávnění určuje systém, takže ona chyba nemůže změnit úroveň oprávnění.to je jasné možná tak z kontextu, navíc znalci, ale rozhodně ne náhodnému čtenáři jen z té diskutované věty co třebas ... "pokud má Jeníček s Mařenkou více naloupaného perníčku" - z toho tedy jasně plyne, že případná Mařenka je vlastností Jeníčka, zatímco množství perníčku v košíčku určuje Ježibaba? - OMG ...
která v kontextu článkuVe svem komentari jsem psal, ze v tomto dile to jde z kontextu snadno domyslet, ale obcas se to objevi i na miste, kde to z kontextu nedomyslite. Prectete si par dilu zpet, urcite na to narazite (pokud se tedy budete snazit vse pochopit, nekdy je treba do jadra videt alespon na urovni Understanding the Linux kernel, aby si to clovek dokazal pospojovat).
Tim "s" vyjadrujete vazbu mezi programem a chybou, bez ni by se mohlo jednat o chybu nekoho jineho, treba systemoveho administratora. Hodi se to napriklad na situaci, kdy nejaky server nezahodi po pripojeni uzivatele rootovska prava.Duvod je ten, ze pouzita formulace se da pochopit i tak, ze program ma vyssi opravneni kvuli chybe.V češtině ta věta tenhle význam mít nemůže. To byste musel vynechat tu předložku „s“.
Tim "s" vyjadrujete vazbu mezi programem a chybou,potud správně ...
bez ni by se mohlo jednat o chybu nekoho jineho, treba systemoveho administratora.... ale tohle už neplatí viz výše, "Jeníček s Mařenkou" mají také vazbu, ale to neznamená, že Mařenka je Jeníčkova - prostě se při loupání perníčku sešli a společně naloupali víc, než by zvládl Jeníček bez Mařenky ... stejně tak se mohla chyba třeba systémového administrátora projevit v onom programu - "pokud má program v součinnosti s chybou ..."
prostě se při loupání perníčku sešli a společně naloupali vícSám ses nachytal.
co prosím? - měl jsem napsat naloupala, ta děcka?prostě se při loupání perníčku sešli a společně naloupali vícSám ses nachytal.
protoze do likeru (u nas spis tuzemaku a tomu bych liker nerikalco to meleš ty vořechu, samozřejmě že si do rumu namáčím hotovou vánočku!) se namaci susene ovoce pred tim, nez se da to testa. Rozhodne ne uz hotove vanocky.
Je rozdíl když to děláš ty, a když se to dělává (jako že to je zvykem)nuž, to už tady nedávno bylo ... že něco neznáš/nechápeš ty také není normou
Tak překládej
try: f = open("/tmp/tocttou") except OSError: #Něco v případě, že otevření souboru selže
O_EXCL Ensure that this call creates the file: if this flag is specified in conjunction with O_CREAT, and pathname already exists, then open() will fail. When these two flags are specified, symbolic links are not followed: if pathname is a symbolic link, then open() fails regardless of where the symbolic link points to.V shellu by měl bohatě stačit
mktemp
.
V shellu by měl bohatě stačit mktemp
.
V Céčku lze i mkstemp
nebo tmpfile
. Teda tak jsem to aspoň vykoumal, když jsem to nedávno řešil, ale do Céčka nedělám.
if os.path.isfile(some-file): os.unlink(some-file)je mezi podmínkou
isfile
a voláním unlink
prodleva, kde se může něco zvnějšku změnit. Zatímco v
try: os.unlink(some-file) except OSError: passje ta operace kontrola + smazání atomická (což zajišťuje nějaké správné systémové volání).
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.