🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
1 messages
1 total messages Started by Stachu 'Dozzie' K. Thu, 07 Apr 2011 08:22
prawa roota udzielone procesowi na chwilę (C)
#72178
Author: Stachu 'Dozzie' K.
Date: Thu, 07 Apr 2011 08:22
33 lines
2885 bytes
Potrzebuję wykonać trochę kodu przed funkcją main() wybranego programu,
dla ustalenia uwagi niech to będzie /usr/bin/rsync (ale równie dobrze
może być /usr/bin/scp, bo jego też potrzebuję). Niby nic specjalnego:
można uruchomić program który coś zrobi, a potem uruchomi rsynca.
Niestety ten kod ma zrobić chroot(), więc a) musi się wykonać na prawach
roota, b) musi zostać wykonany już po załadowaniu binarki /usr/bin/rsync
do pamięci. Z możliwości chrootowych rsynca skorzystać nie mogę, bo
uruchamiany może być inny program (scp).

Aktualnie chroota robię w taki sposób, że mam suidowaną binarkę, która
uruchamia rsynca i za pomocą LD_PRELOAD wymusza załadowanie (mojej)
biblioteki libchroot.so, która w konstruktorze
(__attribute((constructor))) robi co trzeba.

Problem jaki z tym mam, to interpreter ELF-ów. W przybliżeniu,
ld-linux.so ignoruje zmienną LD_PRELOAD, jeśli wykryje że binarka jest
suidowana, a ustala to porównując EUID i RUID procesu. Póki nie zrobię
setuid() w moim programie, to próby załadowania libchroot.so
LD_PRELOADem się nie powodzą.

Jedyne wyjście jakie znalazłem, to setuid(0) i przekazanie w zmiennej
środowiskowej UID-a, na który wróci funkcja-konstruktor libchroot.so.

Da się to bardziej elegancko zrobić? O POSIX 1003.1e capabilities
myślałem, ale wolałbym na razie obyć się bez nich.

A może jakoś inaczej da się wtłoczyć dowolnie wybrany proces w chroota
i nie trzeba kombinować z wstrzykiwaniem kodu wymagającego praw roota,
tylko ja nic o tym nie wiem?

-- 
Secunia non olet.
Stanislaw Klekot
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads