隔离在同一帐户中运行容器的用户

隔离在同一帐户中运行容器的用户

多个用户正在运行容器镜像相同的超级计算机上的用户帐户(“服务帐户“)。每个容器都会安装一个包含敏感数据的文件夹。一个服务帐户用户将无法访问另一个服务帐户用户的数据。我知道“为每个用户使用不同的用户帐户”将是一种解决方案,但这解决方案在这里不适用,每个人都需要使用相同的服务帐户。

使用临时 tmpfs 挂载文件系统的 Bwrap 将是一个解决方案,但不幸的是,已安装的容器运行时(Singularity 和 Sarus)阻止我使用 bwrap。例如,Sarus 检查一组特定文件是否由 root 拥有,但 bwrap 会创建一个新的用户命名空间,以便这些文件不属于任何人(不确定 Singularity 的非特权安装是否是一种解决办法)。

我的想法是将容器执行的文件系统操作“重定向”到将敏感文件存储在 tmpfs 中的 bwrap'ed 进程。例如,如果容器想要将文件写入所述文件夹,该文件会立即转发到 bwrap'ed 进程,该进程将其转发到 tmpfs。或者,当容器尝试从该目录读取文件时,bwrap'ed 进程会从 tmpfs 转发该文件并将其直接交给容器。可以/应该有某种形式的访问控制,例如在每个文件系统操作之前添加一个秘密,并且仅在使用正确的秘密时才分发文件。

我的第一个想法是编写某种服务器来侦听安装在该目录中的套接字,不确定这是否可行。

接下来我发现很容易重定向命令输出到另一个进程,例如

ls > /proc/5555/fd/1

我感觉这可能会带来一个非常简单的解决方案。

解决方案可能如下所示:

  • 容器从/写入安装到 bwrap'ed 进程中的文件夹

  • “写入”到该文件夹​​的每个文件都以密码开头,并直接由 bwrapped 进程(例如 shell 脚本)接管,该进程将其重定向到 tmpfs,从而对其他用户隐藏它

  • 相反,当容器想要从这个假目录读取文件时,它也会预先考虑一个密码,并且 bwrap'ed 进程直接将文件从 tmpfs 转发到容器。

我感觉这可以通过一些简单的命令(如重定向)来实现,但我无法理解它。

我不明白文件夹(或一般的安装点)如何以上述方式充当进程的自动重定向器。

也许我的解决方案想法也完全具有误导性,并且有更好的方法来解决这个问题,我对每条线索都很高兴。我还考虑过嵌套容器并在外部容器上有一个可写层,但这对于像 Singularity 这样的 HPC 容器运行时来说也不容易实现。

每个解决方案都必须在没有 sudo 权限的用户空间中运行。

编辑:这是我尝试过的:

> bwrap --dev-bind / / --tmpfs ~/testfolder/sandbox/ bash
> sarus run debian cat /etc/os-release
[73526.403627484] [daint101-28645] [main] [ERROR] Error trace (most nested error last):
#0   checkThatPathIsRootOwned at "SecurityChecks.cpp":78 Path "/apps/daint/system/opt/sarus/1.3.2/etc/sarus.json" must be owned by root in order to prevent other users from tampering its contents. Found uid=65534, gid=65534.

或具有奇点

> bwrap --dev-bind / / --tmpfs ~/testfolder/sandbox/ bash
> singularity exec ubuntu_latest.sif cat /etc/os-release
INFO:    Convert SIF file to sandbox...
FATAL:   while extracting ubuntu_latest.sif: root filesystem extraction failed: extract command failed: ERROR  : No setuid installation found, for unprivileged installation use: ./mconfig --without-suid
: exit status 1

相关内容