3

我们正在尝试将 luster 文件系统挂载到正在运行的容器中,并且已经通过以特权模式运行的容器成功地完成了这项工作。

然而,对于那些在非特权模式下运行的容器,即使包含了 linux 提供的所有功能(数十种功能),安装 luster 也失败了!

然后

  1. “privileged: True”和“cap_add: all capabilites”有什么区别?
  2. 为什么在容器中添加了所有功能后,安装 luster 仍然失败?

安装错误 在此处输入图像描述

非特权模式容器:

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
4

2 回答 2

1

你试过 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/

于 2021-02-22T23:33:45.810 回答
1

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

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

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

Red Hat 的一篇很棒的博客文章可以在这里找到。

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

于 2021-02-23T21:06:16.707 回答