Eskejpovani pro su

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Pátek Říjen 19 09:29:35 CEST 2012


On Wed, 17 Oct 2012, Ladislav Vaiz wrote:

>>  [...] každý stroj stahuje zvlášť po jednom sdíleném pomalém spojení?
> Ano. Jde to udělat rozumněji, když tam mohou být různě staré debiany a 
> ubunt- sakryš jak zní množné číslo? :-)

A co stahují? Jen ten Váš program nebo rovnou aktualizují celé distro?
V prvním případě pravděpodobně není potřeba mít na každou verzi 
distribuce úplně jiný program. V druhém případě... no, to bych se na Vašem 
místě asi zamyslel, zda je tam úplně nezbytné udržovat takovou 
kybernetickou diverzitu.

>> > >   Samotné předání parametru by zase až tak složité být nemělo, mělo by
>> > >   stačit něco jako:   su -c 'dpkg -i "$0"' root "$1"
>> [...]
> Potřebuju ho dostat jako argument dpkg -i, nebyl mi jasný ten poslední 
> parametr příkazu su.

Pokud je to stále nejasné: příkaz su -c COMMAND ARG0 ARG1 ARG2...
způsobí, že se pod cílovým uživatelem (v daném případě root) spustí
SHELL -c COMMAND ARG0 ARG1 ARG2..., kde SHELL je login shell cílového
uživatele. V COMMAND se lze tedy na ARGn odkazovat pomocí $n.

V sudo se to trochu liší, tam je obvyklý modus operandi ten, že se přímo 
spustí požadovaný program. Ale v principu lze udělat také sudo sh -c ...
a získat stejný výsledek.

> Trochu jsem se nad tím zamyslel a hezkou útočnou proměnnou může být 
> třeba $PATH nebo $LD_*, pokud se su/sudo zavolá nešikovně.

A to je pohříchu obvykle jen začátek velmi dlouhého seznamu.

> Proti čemu se vlastně bráníme?

To musíte vědět hlavně Vy sám, když jste s tím začal. :)

Výchozí problém byla, jak předat nějaký údaj dovnitř su, aniž by mohl být 
nežádoucím způsobem interpretován. V tom případě je potenciální nepřítel 
každý, kdo měl (nebo mohl mít) ten údaj v rukou. Pokud jsou to všechno
výhradně důvěryhodné subjekty, tak řešíme ne-problém.

-- 
Pavel Kankovsky aka Peak                          / Jeremiah 9:21        \
"For death is come up into our MS Windows(tm)..." \ 21st century edition /


Další informace o konferenci Linux