Fehler in OpenBSD 'Gerät nicht konfiguriert' in chroot-ed-Umgebung

1237
TDrabas

Ich habe diese Frage zu StackOverflow gestellt, aber angesichts des Kommentars scheint es hier besser zu passen .

Dies ist höchstwahrscheinlich ein Problem der Systemkonfiguration - Sie haben das Gefängnis nicht richtig eingerichtet - und nicht ein Python-Problem. Sie können das sehr einfach testen, indem Sie einfach sehen, was passiert, wenn Sie beispielsweise -c16 / dev / urandom oder dd ausführen, wenn = / dev / urandom bs = 16 count = 1 aus dem Gefängnis kommt. Wenn Sie dieselbe Fehlermeldung erhalten, wenden Sie sich an SuperUser oder ServerFault oder ein anderes allgemeines Unix- oder OpenBSD-Forum. - abarnert

Folgendes habe ich getan:

Ich möchte einige CGI-Skripte (in Python geschrieben) auf meinem OpenBSD-Server ausführen. Da der Webserver unter OpenBSD in einem Gefängnis läuft, habe ich die gesamte Ordnerstruktur neu erstellt (/ bin / dev / usr / usr / local / lib usw.). Ich bekomme jedoch immer noch '500 Server Internal Error', wenn ich ' Beim Versuch, einige Python-Module zu importieren, die Zugriff auf das / dev / urandom-Gerät benötigen.

Ich habe die Gerätedateien mit mknod erstellt.

ls -la /dev/*random ls -la /dev/ 

Ich habe folgende Ausgabe erhalten

crw-r--r-- 1 root wheel 45, 3 Sep 13 11:09 /dev/arandom crw-r--r-- 1 root wheel 45, 0 Jul 15 19:02 /dev/random crw-r--r-- 1 root wheel 45, 1 Jul 15 19:02 /dev/srandom crw-r--r-- 1 root wheel 45, 2 Jul 15 19:02 /dev/urandom 

und

crw-rw-rw- 1 root wheel 2, 2 Sep 16 01:30 /dev/null crw-rw-rw- 1 root wheel 2, 12 Jul 15 19:02 /dev/zero 

Also habe ich die folgenden Befehle im Ordner / var / www / dev ausgeführt (der OpenBSD-Webserver wird in chroot -u www / var / www ausgeführt)

mknod -m 666 null c 2 2 mknod -m 666 zero c 2 12 mknod -m 644 random 45 0 mknod -m 644 srandom 45 1 mknod -m 644 urandom 45 2 mknod -m 644 arandom 45 3 

Python meldet jedoch immer noch, dass die

OSError: [Errno 6] Device not configured '/dev/urandom' 

Derselbe Code funktioniert gut in einer Umgebung ohne Chroot-Ed.

import os import cgitb cgitb.enable() 

Ich habe die Ratschläge zu StackOverflow ausgeführt

chroot -u www /var/www dd if=/dev/urandom bs=16 count=1 

und bekam das gleiche Ergebnis

dd: /dev/urandom: Device not configured 

dh es ist definitiv ein Konfigurationsfehler. Kann jemand etwas Licht werfen, wo ich einen Fehler machen kann? Jede Hilfe wäre wirklich dankbar!

2
Haben Sie / dev mit `mount -o bind` in Ihrer Chroot-Umgebung installiert? [Diese Antwort] (http://superuser.com/a/165118/156446) enthält eine kurze Übersicht darüber, warum dies für `dev` erforderlich ist jam vor 10 Jahren 1
Ich habe es versucht, aber OpenBSD hat nicht die Option "bind" ... Gibt es ein Äquivalent? Ich lese herum und anscheinend könnte man das mit "mount_null" tun, aber das wurde entfernt ... Kann ich stattdessen "mount -o sync / dev" verwenden? TDrabas vor 10 Jahren 0
Ich habe den Täter gefunden (teilweise ...). Das Gerät muss nicht montiert werden. Wie ich bereits erwähnt habe, konnte ich in OpenBSD kein `mount -o bind`-Äquivalent finden. Dem Ratschlag von Kommentaren von [dieser Website] (http://synacks.blogspot.com.au/2009/01/django-on-openbsd.html) folgend, reicht es aus, mknod (wie ich es schon früher getan habe) und ` nodev` aus `/ etc / fstab`, wo das System` \ var` einfügt. Obwohl mein Skript immer noch nicht funktioniert, meldet es sich nicht mehr. ** Gerät nicht konfiguriert ** TDrabas vor 10 Jahren 1
Zum Abschluss: Die _hashlib.so (von `import cgitb` aufgerufen) hängt von einer gemeinsam genutzten Bibliothek libcrypto.so ab. Das war das Problem, weil mein Skript nicht lief ... Vielen Dank für Ihre Hilfe! TDrabas vor 10 Jahren 1
Ich bin froh, dass Sie es sortiert haben, es tut mir leid, wenn ich Sie zu einem linuxspezifischen Kaninchenbau geführt habe :) Sie können das als Antwort posten, es wird Sie nach einem Tag akzeptieren lassen, glaube ich. jam vor 10 Jahren 0
Danke für Ihre Hilfe! Ich bin froh, dass es endlich funktioniert. TDrabas vor 10 Jahren 0

2 Antworten auf die Frage

2
TDrabas

Ich habe den Täter gefunden.

Nach den Ratschlägen aus dem Kommentarbereich dieser Site reicht es aus, mknod (wie ich es schon früher getan habe) und nodevvon /etc/fstabdort aus zu entfernen, wo sich das System befindet /var. Dadurch wird das zulässige Flag "keine Geräte" entfernt /var.

Um mein Skript laufen zu lassen, musste ich schließlich alle gemeinsam genutzten Objekte kopieren, von denen Pythons cgitbModul ( na ja, tatsächlich _hashlib.so) abhängt - nämlich libcrypto.so.

Um herauszufinden, worauf Sie _hashlib.soangewiesen sind, ldd _hashlib.sobefindet sich meine in /usr/local/lib/python2.7/lib-dynload/_hashlib.so. Hinweis - Sie finden diese Bibliothek, wenn Sie OpenSSL auf Ihrem System installiert haben. Wenn Sie dies nicht tun, _hashlib.solädt z _md5.so. B. usw., die nur gefunden werden können, wenn Sie dies tun

  1. Kein OpenSSL haben
  2. Konfigurierter und eingebauter Python mit --with-pydebugFlag ( weitere Informationen finden Sie in dieser Antwort )

Hoffe das hilft!

-1
Carlos Henrique Cano

Ich hatte ein ähnliches Problem beim Ausführen von Django in FreeBSD und OPENBSD. Mein Problem war, dass der Gunicorn-Prozess als Root ausgeführt wurde, während sich die Skripts in anderen Benutzernamen / Verzeichnis befanden.

tl; dr -> Überprüfen Sie, ob der Prozess mit dem richtigen Benutzer ausgeführt wird