Назад | Перейти на главную страницу

Как запустить программу внутри chroot с доступным для вызывающего абонента stdin / stdout?

Есть ли способ запустить программу в chroot, сохранив доступ к stdin / stdout?

Моей первой попыткой был сценарий оболочки:

/usr/local/bin/real-app:
--------
#!/bin/bash

chroot /var/lib/app-root /usr/bin/app $*

Затем сделал символическую ссылку там, где его ожидают увидеть:

ln -s /usr/local/bin/real-app /usr/local/bin/app

Но тут две проблемы. Во-первых, для запуска программы требуется root. Я могу с этим справиться. Но во-вторых, похоже, что больше нет связи с STDIN / STDOUT, как родительский процесс ожидает управлять этим приложением.

Есть ли способ заставить это работать? Нужно ли мне модифицировать приложение, чтобы оно само выполняло системный вызов chroot?

chroot не должен влиять на stdin, stdout или любые другие файловые дескрипторы, открытые во время выполнения. Я не знаю, что делает ваша команда оболочки chroot, но если она не закрывает их, тогда все должно работать нормально.

То есть при условии, что программа не делает чего-то действительно глупого, например, полагается на открытие / dev / stdout или что-то еще.