RE: Linuxová hardcore otázka na víkend :-)
Tomáš Koželuh
mr.death na ipq.cz
Sobota Březen 25 13:07:27 CET 2017
Nemohla by to být opravdu chyba ve verzi 4.4? Případně absence nějakého
patche? Já běžím na verzi 4.3_p48.
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Pavel
Troller
> Sent: Saturday, March 25, 2017 6:38 AM
> To: hw-list na list.hw.cz
> Subject: Linuxová hardcore otázka na víkend :-)
>
> Zdravím,
> dovolím si malou otázku z prostředí Linuxu, třeba někdo bude vědět.
> Týká se shellu bash. Včera jsem upgradoval na jednom systému na verzi
4.4.
> Tato je nově zkompilována pod glibc-2.25. Dříve jsem používal 4.1,
> kompilovanou pod glibc-2.20.
> Od té doby nechodí KDE3.5 (instalace z roku 2009). Tento mi vyhovuje,
jsem
> na něj zvyklý a nechci ho upgradovat. Musí zůstat běžet :-).
> Zjistil jsem, že důvodem je, že proces kdeinit nedostane řadu
proměnných,
> mezi jinými ani $PATH, které potřebuje, aby sám sebe a zbytek KDE našel.
> Při hledání příčiny jsem zjistil, že výpis stromu procesů pod starým
> a novým bashem vypadá jinak.
>
> Nový bash (nefunkční):
> root 28971 0.0 0.0 3736 2320 ? Ss Mar24 0:00
/opt/kde3.5/bin/kdm -
> nodaemon
> root 28973 1.6 3.8 220068 150616 tty10 Ss+ Mar24 9:09 \_
> /opt64/X11/bin/X :0 vt10 -auth /opt64/X11/lib/X11/xdm/authdir/A:0-3KmYhO
> root 8230 0.0 0.0 3828 2620 ? S 05:59 0:00 \_ -:0
> patrol 8361 0.0 0.0 169112 3376 ? Ss 06:01 0:00 \_
/bin/sh
> /opt/kde3.5/bin/startkde
> patrol 8464 0.0 0.0 2164 544 ? S 06:01 0:00
\_ kwrapper
> ksmserver
> root 8451 0.0 0.0 2028 60 ? S 06:01 0:00
start_kdeinit --new-
> startup +kcminit_startup
> patrol 8452 0.0 0.3 26136 13056 ? Ss 06:01 0:00 kdeinit
Running...
> (procesu 8452 chybí spousta environmentu, 8451 ho ještě má)
>
> Starý bash (funkční):
> root 28971 0.0 0.0 3736 2320 ? Ss Mar24 0:00
/opt/kde3.5/bin/kdm -
> nodaemon
> root 28973 1.6 3.8 220068 150616 tty10 Ss+ Mar24 9:07 \_
> /opt64/X11/bin/X :0 vt10 -auth /opt64/X11/lib/X11/xdm/authdir/A:0-3KmYhO
> root 4758 0.0 0.0 3828 2620 ? S 05:49 0:00 \_ -:0
> patrol 4784 0.0 0.0 169304 3392 ? Ss 05:49 0:00 \_
> /opt/kde3.5/bash/bash /opt/kde3.5/bin/startkde
> patrol 4876 0.0 0.4 23068 16428 ? S 05:49 0:00
\_ ksmserver
> patrol 4878 0.0 0.3 25528 12980 ? Ss 05:49 0:00 kdeinit
Running...
> (proces 4878 má kompletní environment)
>
> Nerozumím hlavně tomu, proč pod novým bashem je vidět proces
start_kdeinit,
> který při spuštění starým bashem vidět není a zřejmě tam opravdu není,
neboť
> PID s nižším číslem než kdeinit je opravdu přeskočen - byl tam a již
zemřel.
> Spouštěcí bash script (startkde) se přitom vůbec nemění, až na "magický
> řádek", kde jsem přepsal původní #!/bin/sh (kde je teď nový bash) na
> #!/opt/kde3.5/bash/bash, kde je pro funkcionalitu KDE udržován starý bash.
>
> Ten start_kdeinit už není script, ale poctivý ELF. Přesto vidím, že on
> ještě má environment kompletní (ten shell mu ho při volání tedy předá),
> ale jím spuštěný kdeinit (opět ELF) už ho nemá. Divné, že ? Jak to, že ten
> shell způsobí odlišné chování toho bináru?
>
> Samozřejmě i ten starý bash se teď dynamicky linkuje ke glibc-2.25 a
funguje,
> z čehož soudím, že změna není v glibc, ale v bashi samotném.
>
> Vzpomínám na SHELLSHOCK a řadu dalších vulnerabilit souvisícím s
> environmentem
> a přemýšlím, zda toto není nějaká bezpečnostní featura, která v tomto
případě
> spíše škodí než pomáhá, a zda by se nedala pro tento účel nějak
zablokovat.
> Přeci jen mít tam starý bash jen kvůli startu KDE se mi nelíbí :-).
Zdrojáky
> od té 3.5 dosud mám, v případě potřeby mohu klidně rekompilovat ten
> start_kdeinit (kde se to podle mne rozbije), ale nevím, co v něm změnit...
> Mimochodem když si pak KDE volá další věci v shellu, používá se už ten
nový
> bash a ten perfektně chodí.
>
> Zdraví Pavel
Další informace o konferenci Hw-list