dis4711
Goto Top

python in chroot - was kann noch fehlen?

Ich bin gerade dabei auf einem Apache/1.3.29 python in einer chroot zu installieren. Da ich dabei anscheinend immer noch das Problem habe, dass Python eine seiner Libraries nicht findet wollte ich testen ob ich Python "einfach manuell" in einer chroot aufrufen kann - dazu habe ich mir folgende "Testschritte" überlegt:

(0) Vorarbeit: python in der chroot installieren

(1) chroot-starten (idealerweise auch gleich als der zukünftige httpd-user)

(2) python aufrufen (und glücklich sein - ab hier würde ich zumindest mal wissen, dass mein problem (vermutlich) httpd.conf bedingt ist - und nicht chroot-bedingt)


(ad 0) Zur Vorarbeit habe ich alle libraries zu python (siehe 'ldd /usr/local/bin/python') in meine chroot-umgebung ('/var/www') kopiert.

$ldd /usr/local/bin/python

lieferte folgende abhängigkeiten:

/usr/local/bin/python
/usr/local/lib/libpython2.5.so.1.0
/usr/lib/libutil.so.11.0
/usr/lib/libstdc++.so.45.0
/usr/lib/libm.so.3.0
/usr/lib/libpthread.so.11.0
/usr/lib/libc.so.48.0
/usr/libexec/ld.so

diese habe ich nach /var/www kopiert. Anschliessend habe ich (sicherheitshalber) alle zugehörigen Libraries mit chown root:www und chmod 775 versehen (mein httpd-user war 'www').

(ad 1 und 2) Den Aufruf hatte ich wie folgt vor...

$ chroot -g www -u www /var/www/ /usr/local/bin/python        
/usr/local/bin/python: can't load library 'libpython2.5.so.1.0'  

...dummerweise quittierte der chroot-Aufruf meinen Versuch mit obiger Fehlermeldung. Dh, anscheinend hat ld.so gleich die erste Library nicht gefunden.


Habe ich hier noch etwas übersehen? Ich dachte, dass das Übernehmen der Libraries in mein "zukünftiges root-verzeichnis" und Setzen der Berechtigungen ausreichen sollte?

Die Maschine auf der ich das gerade teste läuft auf OpenBSD 4.4 (stable i386).
Die wenn (sozusagen als "Positiv-Testfall" zu python) "als normaler Benutzer" und ohne chroot python aufrufe, dann habe ich keinerlei LD_Environmentvariablen (oder sonstige Pfade zu den Libraries) die sich auf ld.so auswirken könnten gesetzt.

...ich denke ich übersehe hier etwas ganz Grundlegendes und würde mich über einen Hinweis von Euch freuen - Danke!

Content-ID: 115048

Url: https://administrator.de/forum/python-in-chroot-was-kann-noch-fehlen-115048.html

Ausgedruckt am: 25.12.2024 um 16:12 Uhr

68702
68702 30.04.2009 um 12:46:01 Uhr
Goto Top
So weit ich weiss, sollte die libpython2.5.so.1.0 in /usr/local/lib/python liegen und nicht in /usr/local/bin/python oder in /var/www/ .
75823
75823 30.04.2009 um 14:41:53 Uhr
Goto Top
IMHO, du musst in deinem chroot Umgebung auch die Pfade behalten:

/var/www/usr/local/bin/python
/var/www/usr/local/lib/libpython2.5.so.1.0
usw.

Den Befehl bleibt wie vorher:
chroot -g www -u www /var/www/ /usr/local/bin/python
dis4711
dis4711 30.04.2009 um 15:41:56 Uhr
Goto Top
@fred - ich bin mir jetzt nicht ganz sicher - aber ich denke, dass Du hier die Fehlermeldung meines 'chroot-versuchs' missverstanden hast, denn libpython2.5.so.1.0 liegt bei mir weder im verzeichnis...

/usr/local/lib/python/ noch im verzeichnis...
/usr/local/bin/python/ sondern in...

/var/www/usr/local/lib/

siehe die folgenden beiden Kommandos:

$pwd
/var/www

$ for I in `ldd /var/www/usr/local/bin/python | grep "lib" | awk '{print $7;}'| cut -b2-100`; do ls -l $I; done
-rwxrwxr-x 1 root www 1261187 Apr 19 22:21 usr/local/lib/libpython2.5.so.1.0*
-rwxrwxr-x 1 root www 181301 Apr 19 22:21 usr/lib/libutil.so.11.0*
-rwxrwxr-x 1 root www 957255 Apr 19 22:22 usr/lib/libstdc++.so.45.0*
-rwxrwxr-x 1 root www 611137 Mar 29 09:12 usr/lib/libm.so.3.0*
-rwxrwxr-x 1 root www 1574948 Apr 19 22:22 usr/lib/libpthread.so.11.0*
-rwxrwxr-x 1 root www 4062336 Mar 29 09:12 usr/lib/libc.so.48.0*
-rwxrwxr-x 1 root www 42813 Mar 29 09:12 usr/libexec/ld.so*

das müsste aber - denke ich - passen, denn auch in (dem chroot zu grunde liegenden Basissystem) liegt die library in
/usr/local/lib/libpython2.5.so.1.0 (genaugenommen liegt dort ein symbolische Link).
dis4711
dis4711 30.04.2009 um 15:48:03 Uhr
Goto Top
@75823 - was genau meinst du mit "auch die Pfade behalten"? Wenn du damit meinst, dass ich die entsprechenden Libraries relativ zum "neuen root-Verzeichnis" auch anlegen muss, dann JA - das habe ich getan (siehe mein Posting ganz zu Beginn).

Ich vermute mal, dass ich das oben etwas unklar/ungeshickt formuliert habe. Vielleicht ist es mit einem Beispiel verständlicher... das File

$ pwd
/var/www/

$ find . -name "libpython*so*" 2>/dev/null
./usr/local/lib/libpython2.5.so.1.0

...man beachte den führenden '.' beim gefundenen Dateinamen.
75823
75823 30.04.2009 um 16:26:45 Uhr
Goto Top
ich habe das gleiche gemacht was du machen wolltest. Bei mir funktioniert. Hasst du eigentlich /usr/local/bin/python2.5 kopiert oder /usr/local/bin/python ? Das zweite ist nämlich ein Link.