🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72178

prawa roota udzielone procesowi na chwilę (C)

#72178
From: 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
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-mail

Show 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