При выполнении некоторой начальной настройки, поскольку корень является действительно самым легким путем. А именно, chroot в только для чтения связывают монтирование, путь наименьшего сопротивления.
Можно использовать bindfs вместо mount --bind
создать представление только для чтения, не будучи должен быть корнем. Однако действительно необходимо сделать что-то как корень для предотвращения доступа к другим файлам, таким как chroot.
Другой подход к LD_PRELOAD
библиотека, которая сцепляется в открытие файла и отказывается позволять писать. Это не требует никаких специальных полномочий. С точки зрения безопасности это может быть обойдено, но для Вашего варианта использования хорошо, где только необходимо содержать определенную функцию и не произвольный собственный код. Я не знаю о существующей библиотеке для этого, как бы то ни было. LD_PRELOAD
мог также использоваться для ограничения программы представлением только для чтения, созданным с mount --bind
или bindfs
; снова, я не знаю о существующей библиотеке.
На Debian и производных, можно настроить schroot среду. Schroot является корнем setuid и должен быть настроен как корень, но может быть выполнен любым авторизованным пользователем.
Метод, который не требует никакого сотрудничества от корня, должен выполнить процесс в виртуальной машине. Вы могли настроить KVM или VirtualBox или непривилегированный режим Linux. Это - немного тяжеловес, и будет означать потребление дополнительной памяти, но не должно влиять на скорость необработанного символьного вычисления значительно.
Как "заключить в тюрьму" процесс, не будучи корнем? мог бы обеспечить некоторое вдохновение.
https://www.freebsd.org/doc/en/books/handbook/updating-upgrading-freebsdupdate.html , Раздел 24.2.3.3:
portmaster -af
Забудьте о "быстро " хотя. Это может занять некоторое время в зависимости от вашей машины и установленных портов. :)
После этого вам придется запустить Установить FreeBSD-Update
в последний раз.