web-dev-qa-db-ja.com

chrootされた環境でのOpenBSDの「デバイスが構成されていません」エラー

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

つまり、それは間違いなく設定エラーです。誰かが私が間違いを犯しているかもしれないところに光を当てることができますか?どんな助けでも本当にありがたいです!

2
TDrabas

犯人を見つけました。

このサイト のコメントセクションからのアドバイスに従って、(以前に行ったように)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などあなたが

  1. OpenSSLを持っていない
  2. 構成および構築Python --with-pydebugフラグ付き(詳細については この回答 を確認してください)

お役に立てれば!

2
TDrabas

小切手 /etc/fstab。マウントポイントにnodevがあり、chrootされたコマンドが正しく実行されませんでした。

0
Richard