openssl внутри chroot

Я получаю следующую ошибку, когда пытаюсь установить ssl-соединение из тюрьмы chroot:

twisted.internet.error.ConnectionLost: Connection to the other side was lost in a non-clean fashion.

Я использую openssl 0.9.6 с pyopenssl для создания ssl-соединения, и я использую скрученную библиотеку python для python 2.4 в Linux (centos 5.5).

После некоторого устранения неполадок я обнаружил, что openssl дает сбой, потому что он пытается прочитать файл /dev/random, а он терпит неудачу, потому что внутри chroot нет /dev/random. Я подтвердил, что если я создам файл /dev/random внутри chroot, соединение установится.

  • Я думал о монтировании файловой системы devfs, которая содержит файл /dev/random внутри моего chroot, но у моего приложения и его системных администраторов есть плохая привычка удалять корень chroot без предварительного размонтирования всего.
  • Я думал о чтении из файла /dev/random перед выполнением chroot, но моя текущая настройка заключается в вызове chroot еще до того, как мой двоичный файл будет запущен, и изменение места, где происходит chroot, было бы слишком большим изменением в приложении. что я не уверен, когда и как это могло быть сделано.
  • Я подумал о запуске программы за пределами моей chroot-тюрьмы, которая просто читает из /dev/random и записывает в именованный файловый канал с именем /jail/dev/random, который доступен из chroot-тюрьмы, но мне не нравится запустить отдельный процесс только для того, чтобы иметь доступ к источнику случайности. Также кажется слишком сложным просто инициализировать openssl.

Как правильно инициализировать openssl, если у меня нет доступа к /dev/random из моей программы?


person Alex Q    schedule 21.12.2011    source источник
comment
Интересно, как большинство приложений будут работать в chroot-тюрьме без devfs. Бьюсь об заклад, там будет файл с именем /dev/null с кучей хлама...   -  person Stefan Paul Noack    schedule 21.12.2011


Ответы (3)


Возможно, лучший способ — смонтировать файлы устройства следующим образом:

# touch chroot/dev/random
# mount --bind /dev/random chroot/dev/random

и то же самое для urandom.

person Bernard Hurley    schedule 27.12.2014

Вы можете подделать random для openssl, например. командная строка openssl:

[root@quilt /]# openssl s_client -h
usage: s_client args
...
 -rand file:file:...
...

В любом случае openssl нуждается в источнике случайности, он не может быть безопасным без случайного одноразового номера, например. из википедии:

Чтобы сгенерировать сеансовые ключи, используемые для безопасного соединения, клиент шифрует случайное число открытым ключом сервера и отправляет результат на сервер. Только сервер должен иметь возможность расшифровать его с помощью своего закрытого ключа.

Без источника случайности SSL/TLS можно легко взломать.

Если вы беспокоитесь, что chroot/dev/ можно удалить, почему бы не создать только chroot/dev/random или chroot/dev/urandom вместо того, чтобы монтировать весь dev?

[root@quilt /]# mknod /dev/random c 1 8
[root@quilt /]# mknod /dev/urandom c 1 9

О, кстати, вы также хотите скопировать систему /etc/resolv.conf и, возможно, другие хосты, службы, эфиры и т. д.

person Dima Tisnek    schedule 20.03.2012

Не забывайте о SELinux после создания urandom и random

кот /var/журнал/сообщения | grep "SELinux препятствует"

SELinux is preventing /usr/sbin/php-fpm from read access on the chr_file urandom.

If you believe that php-fpm should be allowed read access on the urandom chr_file by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do allow this access for now by executing:

ausearch -c 'php-fpm' --raw

audit2allow -M my-phpfpm

semodule -i my-phpfpm.pp

person user956584    schedule 17.09.2019