Как я могу запустить исполняемый файл, чтобы он думал, что корневой каталог находится по произвольному пути, а не по фактическому корневому каталогу. Я думал, что это будет возможно с песочницей-exec, но я не нашел никаких путей до сих пор.
1 ответ
В Unix-подобных операционных системах общим термином для запуска процесса с выделенным корневым каталогом является chroot
(сокращение от "изменить корневой каталог").
Канонический способ сделать это что-то вроде:
$ mkdir /tmp/chroot-dir
$ cp /bin/sh /tmp/chroot-dir/
$ chroot /tmp/chroot-dir /sh
Предполагая, что вы выполнили команду execute на /tmp, это изменит корневой каталог, так что /tmp/chroot-dir
станет новым /
для этого процесса, а затем выполните /sh
в контексте этого. Вполне возможно, что chroot
потребует от вас быть пользователем root; в этом случае замените sudo chroot
на chroot
. Когда вы выйдете из порожденной оболочки, все вернется в норму.
Поскольку /bin /sh, вероятно, нужны некоторые библиотеки, конкретный пример, скорее всего, потерпит неудачу, но он укажет вам правильное направление для того, что еще нужно. В Linux запуск ldd /bin/sh
сообщит вам, какие дополнительные библиотеки требуются; OS X, вероятно, имеет что-то похожее, если не то же самое. Нетривиальному программному обеспечению также часто требуются файлы конфигурации, узлы устройств и другие шансы, доступные в его представлении файловой системы.
Ориентированное на потребителя программное обеспечение, как правило, не очень хорошо подходит для того, чтобы его можно было хромировать без значительных усилий, но серверное программное обеспечение часто может быть получено с помощью сравнительно небольших усилий, а некоторые даже поставляются с документацией именно того, что нужно.