Вы можете запустить ограниченную оболочку , вызвав bash как bash -r
. Я отсылаю вас к руководству по bash для подробного описания; Основная идея заключается в том, что скрипт не может вызывать команды, которые не находятся в $PATH
, не могут изменяться $PATH
, не могут перенаправлять в файл или из файла, и некоторые другие ограничения. Это довольно просто настроить, но если неизвестный скрипт слишком сложен для просмотра, он может использовать много вещей, которые запрещены в ограниченной оболочке.
Вы можете установить chroot тюрьму. Идея состоит в том, чтобы настроить дерево каталогов /some/root
и запустить сценарий в среде, которая считает, что /some/root
это целая файловая система ( chroot
сокращение от корня изменения). После того, как дерево каталогов настроено, запустите скрипт (скопированный в /some/root/myscript
) как chroot /some/root /bin/bash /myscript
. Например, вы должны создать каталог /some/root/bin
с командами, которые вы хотите разрешить, и программа chroot будет видеть этот каталог как /bin
. Вам нужно будет скопировать все, что нужно для выполнения программы внутри chroot: библиотеки, файлы данных bash
, сам скрипт и т. Д. Скрипт может быть /proc
подключен внутри chroot; Вы можете сделать это с помощью команды, как mount -t proc proc /proc
.
Если вам нужно сделать все дерево каталогов доступным для сценария, скажем /var/example
, у вас есть несколько вариантов. Вы можете сделать копию под /some/root
. Вы можете создавать жесткие ссылки (если они работают для вашего приложения и chroot находится в одной файловой системе). В Linux вы можете сделать mount --bind /var/example /some/root/var/example
«прививку» /var/example
внутри chroot. Обратите внимание, что символическая ссылка не может работать, поскольку цель ссылки определяется внутри chroot.
Обратите внимание, что chroot не обеспечивает абсолютную безопасность, особенно против процессов, выполняющихся от имени root. Например, корневой процесс может создать файл устройства внутри chroot и получить к нему доступ ко всему диску. Процесс chroot по-прежнему может устанавливать сетевые подключения (вы можете запретить это, не включив в него любую сетевую программу и убедившись, что ненадежная программа не может создать файл и сделать его исполняемым или перезаписать существующий исполняемый файл).