Ошибка OpenBSD "устройство не настроено" в среде chroot

Я задал этот вопрос на StackOverflow, но, учитывая комментарии там, кажется, что он подходит здесь лучше.

Это почти наверняка проблема конфигурации системы - вы неправильно настроили джейл - а не Python. Вы можете легко это проверить, просто посмотрев, что произойдет, когда вы запустите, скажем, head -c16 /dev/urandom или dd if=/dev/urandom bs=16 count=1 изнутри тюрьмы. Если вы получите ту же ошибку, обратитесь в SuperUser или ServerFault или на другой общий форум по Unix или OpenBSD. - abarnert

Вот что я сделал:

Я хочу запустить несколько сценариев cgi (написанных на Python) на моем сервере OpenBSD. Поскольку веб-сервер в OpenBSD работает в тюрьме, я воссоздала всю структуру папок (/bin /dev /usr /usr/local/lib и т. Д. И т. Д.), Но я все еще получаю "500 Server Internal Error", когда я " Я пытаюсь импортировать некоторые модули Python, которым требуется доступ к устройству / dev / urandom.

Я создал специальные файлы устройства, используя 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 (веб-сервер OpenBSD работает в 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

то есть это определенно ошибка конфигурации. Кто-нибудь может пролить свет на то, где я могу ошибаться? Любая помощь будет по достоинству оценена!

3 ответа

Я нашел виновника.

Следуя совету из раздела комментариев этого сайта, достаточно mknod (как я делал ранее) и удалить nodev от /etc/fstab где система монтируется /var, Это удаляет разрешенный флаг "no-devices" в /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 флаг (проверьте этот ответ для более подробной информации)

Надеюсь это поможет!

проверять/etc/fstab. я имелnodevв точке монтирования, и это помешало моей команде chroot работать должным образом.

У меня была похожая проблема с запуском Django во FreeBSD и OPENBSD. Моя проблема заключалась в том, что процесс gunicorn выполнялся с правами суперпользователя, в то время как сценарии находились в других пользователях home / dir.

tl; dr -> проверить, запущен ли процесс с нужным пользователем

Другие вопросы по тегам