Erro 'dispositivo não configurado' do OpenBSD no ambiente chroot-ed

2

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!

    
por TDrabas 16.09.2013 / 06:51

2 respostas

2

Encontrei o culpado.

Seguindo o conselho da seção de comentários do site , é suficiente para mknod (como fiz anteriormente) e remova nodev de /etc/fstab onde o sistema monta /var . Isso remove o sinalizador permitido "sem dispositivos" em /var .

Para fazer meu script executar, eu finalmente tive que copiar todos os objetos compartilhados que o módulo cgitb do Python (bem, na verdade, _hashlib.so ) depende - ou seja, libcrypto.so .

Para saber qual é o seu _hashlib.so depende da execução ldd _hashlib.so - o meu está localizado em /usr/local/lib/python2.7/lib-dynload/_hashlib.so . Nota - você encontrará esta biblioteca se tiver o OpenSSL instalado em seu sistema. Se você não o fizer, _hashlib.so carrega, e. _md5.so etc. que só pode ser encontrado se você

  1. Não tem o OpenSSL
  2. Python configurado e construído com --with-pydebug flag (verifique esta resposta para saber mais detalhes)

Espero que isso ajude!

    
por 17.09.2013 / 09:36
-1

Eu tive um problema semelhante ao executar o Django no FreeBSD e no OPENBSD. Meu problema era que o processo do gunicorn estava rodando como root enquanto os scripts estavam em outros usuários home / dir.

tl; dr - > verifique se o processo está sendo executado com o usuário certo

    
por 10.04.2015 / 15:16