Я задал этот вопрос на 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
то есть это определенно ошибка конфигурации. Кто-нибудь может пролить свет на то, где я могу ошибаться? Любая помощь будет по достоинству оценена!