Есть ли способ запустить программу в 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 или что-то еще.