Article View: pl.comp.os.linux.programowanie
Article #72178prawa roota udzielone procesowi na chwilę (C)
From: 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
Technical Details
Message-ID:
<injs8u$kls$1@solani.org>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news.stw-bonn.de!news.netcologne.de!newsfeed-fusi2.netcologne.de!newsfeed.straub-nv.de!weretis.net!feeder4.news.weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.nask.pl!news.nask.org.pl!news.uni-stuttgart.de!news.stw-bonn.de!news.netcologne.de!newsfeed-fusi2.netcologne.de!newsfeed.straub-nv.de!weretis.net!feeder4.news.weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: "Stachu 'Dozzie' K." <dozzie@go.eat.some.screws.spammer.invalid> Newsgroups: pl.comp.os.linux.programowanie Subject: prawa roota udzielone procesowi na chwilę (C) Date: Thu, 7 Apr 2011 08:22:54 +0000 (UTC) Organization: solani.org Lines: 33 Message-ID: <injs8u$kls$1@solani.org> Mime-Version: 1.0 X-Trace: solani.org 1302164574 21180 eJwNwokRwCAMA7CVaMjDOg6x9x+BnhQ7v7zlGemh38BC4D0jcrhWcTfqEO2tMnHaiIFXQvMAVDsTbA== (7 Apr 2011 08:22:54 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Thu, 7 Apr 2011 08:22:54 +0000 (UTC) User-Agent: slrn/pre0.9.9-111 (Linux) X-User-ID: eJwFwYEBwCAIA7CXQGwZ52iR/09YgqBTuQluDMbtrmc1i3pQe1fP1w6mTCdM7051+rEKJvEDKhwRXw== Cancel-Lock: sha1:tlCbN4CKgFVSOTJwMjlL8VBn1wA= X-NNTP-Posting-Host: eJwFwQkBwDAIA0BLML5GDmnBv4TdhaXmLc9Ij40VeBQeSI2DqUnrmhHY4WL5LazV3gq9cfkDF04Reg== Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit