Disassembler

Artificial intelligence is no match for natural stupidity.
21březen2012

Spouštění VLC pod rootem


Udělal jsem si radost a koupil si malý pracovní laptop. Ta 17“, kterou jsem měl doteď, tak nějak nebyla to pravé ořechové, když bylo potřeba ji půl hodiny třímat v náruči při nastavování nějakých Wi-Fi nebo podobných nesmyslů. Ještě před tím, než jsem vůbec začal vybírat, který laptop by se mi na to moje běhání líbil, bylo už víceméně rozhodnuto o tom, jaký operační systém na něj přijde. 80 až 100 GB dostane BackTrack 5 R2 a zbytek dostanou sedmičky. Když už jsem tam toho tučňáka nacpal, říkal jsem si, že 100 GB je dost na to, aby ten systém byl jen na hraní, a jal jsem se do něj instalovat nejrůznější další aplikace, kvůli kterým bych jinak musel rebootovat do Windows. A narazil jsem na VLC, které se vehementně bránilo být spuštěno pod rootem.

Vynucená bezpečnost


Jasně, spouštění aplikací pod rootem je fůůůj a kdesi cosi, vím o tom. Ale zrovna u BackTracku je mi to srdečně jedno. Ta distribuce ve výchozím stavu počítá s tím, že se pod rootem bude spouštět všechno a asi pro to byl dobrý důvod, jinak by se tak tvůrci distribuce nerozhodli. Jasně, můžu si systém nastavit tak, aby mi fungoval jak má i pod jiným uživatelem, vždyť je to linux.. ale já nepotřebuju strávit další dvě hodiny přepisováním kýblu věcí, který ani nevím kde hledat, abych ve finále, když budu potřebovat nějakou jinou aplikaci, zjistil, že stejně nefunguje. Spustím-li VLC pod rootem, drze mi oznámí

root@U36SD:~# vlc
VLC is not supposed to be run as root. Sorry.
If you need to use real-time priorities and/or privileged TCP ports
you can use vlc-wrapper (make sure it is Set-UID root and
cannot be run by non-trusted users first).

Rozumím tomu, co se píše, ale nerozumím proč. Já vím, že bych jej pod rootem spouštět neměl, ale já chci! Něměla by tahle úžasná hláška být raději warning? Nechápu smysl takového opatření. Přece když jsem jednou root, tak si VLC můžu upravit, překompilovat nebo provést cokoliv jiného abych jej nakonec stejně spustil. Dokonce existují hned tři způsoby jak toho docílit.

Způsob první - půjčování autority


První způsob je asi nejsložitější, nejzdlouhavější a nejméně použitelný, takže jej popíšu jen ve zkratce. První co by člověka asi napadlo, by bylo jednoduše vytvořit uživatele, pod kterým se VLC bude spouštět. Ale ouha, takový pokus na BackTracku skončí chybovou hláškou také, protože uživatel se nepřipojí k X serveru.

root@U36SD:~# su - user -c vlc
VLC media player 1.0.6 Goldeneye
[0x7faf28000988] inhibit interface error: Failed to connect to the D-Bus session daemon: /bin/dbus-launch terminated abnormally with the following error: No protocol specified
Autolaunch error: X11 initialization failed.
Workaround spočívá v tom, že vytvořenému dedikovanému uživateli budete půjčovat rootovský .Xauthority token. Navíc ještě musí dotyčný uživatel mít práva k socketu /tmp/.X11-unix/X0.
adduser vlcuser
cp /root/.Xauthority /home/vlcuser/.Xauthority
chown vlcuser:vlcuser /home/vlcuser/.Xauthority
su - user -c vlc

Výhoda tohoto přístupu je v tom, že oproti rekompilaci nerozbije balíčky a závislosti. Obrovská nevýhoda pak v tom, že je nutné mít dalšího uživatele navíc a .Xauthority token kopírovat při každém přihlášení. To se samozřejmě dá řešit skriptem, ale už to začíná být drbání se pravou rukou za levým uchem.

Způsob druhý - rekompilace


apt-get source vlc
tar xvf vlc*.tar.xz
cd vlc*
./configure --enable-run-as-root
make
make install

Není co dodat. Snad jen, že VLC skutečně bez problému pod rootem běží, takže ona restrikce, která se parametrem --enable-run-as-root obejde, zde není z nějakých technických důvodů, ale jedná se o obyčejné kurvítko. Nevýhoda tohoto přístupu je rozbití balíčků a závislostí, takže si nové verze budete muset kontrolovat a rekompilovat sami.

Zbůsob třetí - totální prasečina


Mnou preferovaný a z jakéhokoliv hlediska naprosto nevhodný způsob. Nedá se mu však upřít určitá elegance.

sed -i 's/geteuid/getppid/' /usr/bin/vlc

Jo, to jako vážně. Prostě VLC místo UID přihlášeného uživatele vnutíte PID nadřazeného procesu. A to zaručeně nula nikdy nebude. Crude, but effective. A bez rozbití závislostí.

Dodatek


Stejně jsem si tím BackTrackem naběhl na vidle. I BT 5 R2 je totiž založen na stařičkém Ubuntu 10.04 LTS a vzhledem k tomu, že Asus U36SD má grafické přepínátko nVidia Optimus, nedokázal se rozhodnout, jaký hardware vlastně vidí a jaký bude používat. K tomu přihoďte obvyklé problémy s audiem a power managementem a máte zábavu na celé odpoledne. To jsem opravdu stejně tak dobře mohl dolepit ty pentestovací nástroje do nějakého funkčnějšího Ubuntu. A ta Atherosácká Wi-Fi, co se v něm schovává by ani nepotřebovala patch ovladačů.

A teď ještě koukám, že ten laptop už zase stojí 17 tisíc. To jsem měl teda sakra štěstí, když mi ho prodali za čtrnáct. Heč!