9

是否可以在 Linux 中启动一个进程,并限制它对某些文件/目录的访问?例如:

$ start-process --enable-dir=./sandbox --exec="some-script.sh"

some-script.sh将无法在./sandbox.

4

2 回答 2

5

您可以使用chroot设置进程树的根目录。但是,这意味着该进程的所有依赖项都必须在其新根中可用。

有许多软件包可以帮助您根据需要设置 chroot-environments。谷歌是你的朋友;)


关于构建 chroot 环境的一些建议

为某些程序或守护进程构建 chroot 时,您必须为要chroot的程序提供完整的环境。这意味着您必须在目录中提供最小系统。这可能包含:

  • 一个shell 和一些shell 实用程序,或者busybox 的变体。(如果您不打算部署一个静态可执行文件,这也包含下一步)。
  • Libc 和其他依赖的共享库。
    • 您需要使用ldd或检查共享库依赖项objdump。出现的每个库都必须位于您的私有根目录中。对于您需要的每个可执行文件和库,此步骤可能会重复多次。请注意,一些在运行时显式链接的库 usingdlopen需要单独检查
  • 取决于您计划对最小树 进行chroot的内容。/dev
    • 如果您打算 chroot 一个守护进程,这可能需要一些最小的文件,/dev例如randomzero. 您可以使用mknod命令创建它们。请参阅mknod 文档,以及有关设备应具有哪些主要/次要编号的 linux 文档。
  • 也取决于你计划chroot是一个最小的/etc. 其中需要的文件有:
    • 一个最小的密码和影子(不是你的系统密码/影子)。
    • 一个最小mtab的包含/.
    • 一个最小的group(同样,不是您的系统组文件)。

你必须从某个地方开始,所以最好从你的程序的先决条件开始。有关详细信息,请参阅您的文档

于 2010-12-23T11:31:15.543 回答
1

通常您希望chroot进程,使其只能访问一个目录及其子目录,并且只执行一些定义的命令。

请参阅如何 chroot

于 2010-12-23T11:31:22.740 回答