在 运行 容器内安装 Lustre 不工作(已添加所有功能)

Mounting Lustre Inside Running Container Not Working (Have Added All Capabilities)

我们正尝试在 运行 容器内安装 lustre 文件系统,并已通过 运行 处于特权模式的容器成功完成此操作。

然而,对于那些 运行 在非特权模式下的容器,安装光彩失败,即使 linux 提供的所有功能 - tens of capabilities - 都包含在内!

然后

  1. “priviledged: True”和“cap_add: all capabilites”有什么区别?
  2. 为什么在容器中添加了所有能力后,lustre仍然挂载失败?

安装错误

非特权模式容器:

version: "3"
services:
aiart:
cap_add:
  - AUDIT_CONTROL
  - AUDIT_READ
  - AUDIT_WRITE
  - BLOCK_SUSPEND
  - CHOWN
  - DAC_OVERRIDE
  - DAC_READ_SEARCH
  - FOWNER
  - FSETID
  - IPC_LOCK
  - IPC_OWNER
  - KILL
  - LEASE
  - LINUX_IMMUTABLE
  - MAC_ADMIN
  - MAC_OVERRIDE
  - MKNOD
  - NET_ADMIN
  - NET_BIND_SERVICE
  - NET_BROADCAST
  - NET_RAW
  - SETGID
  - SETFCAP
  - SETPCAP
  - SETUID
  - SYS_ADMIN
  - SYS_BOOT
  - SYS_CHROOT
  - SYS_MODULE
  - SYS_NICE
  - SYS_PACCT
  - SYS_PTRACE
  - SYS_RAWIO
  - SYS_RESOURCE
  - SYS_TIME
  - SYS_TTY_CONFIG
  - SYSLOG
  - WAKE_ALARM

image: test_lustre:1.1
#privileged: true
ports:
  - "12345:12345"
volumes:
  - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

你试过了吗apparmor:unconfined?

version: "3"
services:
  aiart:
    cap_add:
    - SYS_ADMIN
    image: test_lustre:1.1
    security_opt:
    - apparmor:unconfined
    ports:
    - "12345:12345"
    volumes:
      - /home/wallace/test-lustre/docker/lustre-client:/lustre/lustre-client

如果可行,请尝试编写适合您需要的自定义 apparmor 配置文件,因为我猜 unconfined 会不太安全:https://docs.docker.com/engine/security/apparmor/

--privilegedall-capabilities 的不同之处在于,--privileged 参数移除了 cgroup 控制器强制执行的所有限制,并在为所有设备提供访问权限的同时禁用了安全魔法。特权容器真正成为主机操作系统的一部分,甚至可以访问可能未应用的 AppArmor 和 SELinux 配置,例如 SELinux 标签。

当使用 --privileged 标志时,它不会对底层容器强制执行任何额外的安全性,并且内核文件系统不会以只读方式挂载到容器中。 SECCOMP 过滤也被禁用。不过,你不能获得比当前命名空间允许的更多的权力,例如,如果你是 运行 无根守护进程。

能力是调整 root 权限的方式,但在执行容器时仍然会应用一些安全附魔。

一个很棒的博客 post 由 Red Hat 提供 here.

正如其他答案中所指出的,在这种情况下,AppArmor 可能是问题所在,并且通过在 运行 容器中使用 --security-opt apparmor:unconfined 标志,挂载是可能的。但是,那只能暂时使用。