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)
Author: Stachu 'Dozzie' K.
Date: Thu, 07 Apr 2011 08:22
Date: Thu, 07 Apr 2011 08:22
33 lines
2885 bytes
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