StackOverflowでこの質問をしましたが、 コメント を考えると、ここの方が適しているようです。
これはほぼ間違いなく、Pythonの問題ではなく、刑務所を正しく設定しなかったシステム構成の問題です。実行時に何が起こるかを確認するだけで、非常に簡単にテストできます。 、head -c16/dev/urandomまたはddif =/dev/urandom bs = 16 count = 1刑務所内から。同じエラーが発生した場合は、SuperUserまたはServerFault、あるいは別の一般的なUnixまたはOpenBSDフォーラムで質問してください。– abarnert
OpenBSDサーバーでいくつかのcgiスクリプト(Pythonで記述)を実行したいと思います。 OpenBSDのWebサーバーは刑務所で実行されているので、フォルダー構造全体(/ bin/dev/usr/usr/local/libなど)を再作成しましたが、「500サーバー内部エラー」が発生します。 m/dev/urandomデバイスへのアクセスを必要とするいくつかのPythonモジュールをインポートしようとしています。
Mknodを使用してデバイスの特殊ファイルを作成しました。
ls -la /dev/*random
ls -la /dev/{null,zero}
次の出力が得られました
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
そして
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
そこで、/ var/www/devフォルダーで次のコマンドを実行しました(OpenBSDWebサーバーはchroot-u www/var/wwwで実行されます)
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は、
OSError: [Errno 6] Device not configured '/dev/urandom'
同じコードは、chrootされていない環境でも正常に機能します。
import os
import cgitb
cgitb.enable()
StackOverflowに関するアドバイスを与えられて私は実行します
chroot -u www /var/www dd if=/dev/urandom bs=16 count=1
同じ結果が得られました
dd: /dev/urandom: Device not configured
つまり、それは間違いなく設定エラーです。誰かが私が間違いを犯しているかもしれないところに光を当てることができますか?どんな助けでも本当にありがたいです!
犯人を見つけました。
このサイト のコメントセクションからのアドバイスに従って、(以前に行ったように)mknodし、システムが/etc/fstab
をマウントする/var
からnodev
を削除するだけで十分です。これにより、/var
の「デバイスなし」許可フラグが削除されます。
スクリプトを実行するには、Pythonのcgitb
モジュール(実際には_hashlib.so
)が依存するすべての共有オブジェクト(つまり、libcrypto.so
)を最終的にコピーする必要がありました。
_hashlib.so
が実行に依存するものを見つけるにはldd _hashlib.so
-私のものは/usr/local/lib/python2.7/lib-dynload/_hashlib.so
にあります。注-システムにOpenSSLがインストールされている場合は、このライブラリが見つかります。そうしないと、_hashlib.so
が読み込まれます。 _md5.so
などあなたが
--with-pydebug
フラグ付き(詳細については この回答 を確認してください)お役に立てれば!
小切手 /etc/fstab
。マウントポイントにnodev
があり、chrootされたコマンドが正しく実行されませんでした。