linux - 授予 unix 进程对目录的独占 RW 访问权限

标签 linux ubuntu process sandbox selinux

<分区>

有没有办法将一个 linux 进程沙箱化到某个目录,并给这个进程独占的 rw 访问权限到这个目录?例如,创建一个临时工作目录,然后启动 e.g. python 或其他脚本工具,它只能在这个目录中写入,而不会限制它的太多功能。而且只有这个进程可以访问这个目录的读取(当然除了 super 用户)。

我需要这个来沙盒一个基本上允许用户运行任意代码的网络服务。我们目前在软件本身中进行授权,但最终所有进程都以同一个 linux 用户身份运行。我们需要一种方法,用户不能对系统造成任何伤害,但确实有一个临时的私有(private)工作目录来写入和读取文件,该目录不受 Web 服务的其他用户的影响。

最佳答案

文件权限基于所有者/组而不是进程,因此由同一用户运行的多个程序将能够访问拥有的目录。但是,如果您在运行之前为每个进程创建一个临时目录,然后 chroot()这样一来,任何进程都无法离开其 chroot jail 来访问其他目录。

基本概念是,就进程而言,临时目录成为目录树的顶部。该过程不知道,也不能更改为高于它的任何内容。否则,它可以在其沙箱中读取/写入、创建/删除其核心内容。

例如:

/rundir
/rundir/temp1  <-- process 1 chroot jailed here, can't go above
/rundir/temp2  <-- process 2 chroot jailed here, can't go above

另见“man 8 chroot”。

关于linux - 授予 unix 进程对目录的独占 RW 访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019784/

相关文章:

ubuntu - 无法使用 GCP VM 上的启动脚本启动 python 应用程序

.net - 我应该处置重定向的StandardOutput/StandardError吗?

c# - 在单独的进程中运行代码

linux - 即使使用 VDSO,clock_gettime 也可能非常慢

c - C 中的键盘处理程序

linux - 如何比较两个压缩包的内容

linux - 为什么要在linux中使用service命令?

bash - 如何遍历字典列表并根据 Bash 中的键对输出进行排序?

node.js - 无法在 Node.js Docker 容器中发送 Sentry 事件

android - 以 root 身份运行的二进制文件的 exec() 权限被拒绝