Eu fiz essa pergunta no StackOverflow, mas, considerando o comentário Parece que se encaixa aqui melhor.
This is almost certainly a system configuration issue—you didn't set up the jail right—rather than a Python one. You can test that very easily by just seeing what happens when you run, say, head -c16 /dev/urandom or dd if=/dev/urandom bs=16 count=1 from inside the jail. If you get the same error, go ask on SuperUser or ServerFault or another general Unix or OpenBSD forum. – abarnert
Veja o que eu fiz:
Eu quero rodar alguns scripts cgi (escritos em Python) no meu servidor OpenBSD. Como o servidor web no OpenBSD é executado em uma prisão, eu recriou toda a estrutura de pastas (/ bin / dev / usr / usr / local / lib etc. etc.), mas ainda estou recebendo '500 Internal Error Server' quando eu ' m tentando importar alguns módulos do Python que requerem acesso ao dispositivo / dev / urandom.
Eu criei os arquivos especiais do dispositivo usando o mknod.
ls -la /dev/*random
ls -la /dev/{null,zero}
Eu recebi a seguinte saída
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
e
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
Então eu executei os seguintes comandos na pasta / var / www / dev (OpenBSD web-server é executado em 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
No entanto, o Python ainda relata que o
OSError: [Errno 6] Device not configured '/dev/urandom'
O mesmo código funciona bem em um ambiente não-chroot.
import os
import cgitb
cgitb.enable()
Dado o conselho no StackOverflow eu corro
chroot -u www /var/www dd if=/dev/urandom bs=16 count=1
e obteve o mesmo resultado
dd: /dev/urandom: Device not configured
i.e. é definitivamente um erro de configuração. Alguém pode lançar alguma luz onde eu possa estar cometendo um erro? Qualquer ajuda seria verdadeiramente apreciada!