在 运行 容器内安装 Lustre 不工作(已添加所有功能)
Mounting Lustre Inside Running Container Not Working (Have Added All Capabilities)
我们正尝试在 运行 容器内安装 lustre 文件系统,并已通过 运行 处于特权模式的容器成功完成此操作。
然而,对于那些 运行 在非特权模式下的容器,安装光彩失败,即使 linux 提供的所有功能 - tens of capabilities - 都包含在内!
然后
- “priviledged: True”和“cap_add: all capabilites”有什么区别?
- 为什么在容器中添加了所有能力后,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/
--privileged
和 all-capabilities
的不同之处在于,--privileged
参数移除了 cgroup 控制器强制执行的所有限制,并在为所有设备提供访问权限的同时禁用了安全魔法。特权容器真正成为主机操作系统的一部分,甚至可以访问可能未应用的 AppArmor 和 SELinux 配置,例如 SELinux 标签。
当使用 --privileged
标志时,它不会对底层容器强制执行任何额外的安全性,并且内核文件系统不会以只读方式挂载到容器中。 SECCOMP 过滤也被禁用。不过,你不能获得比当前命名空间允许的更多的权力,例如,如果你是 运行 无根守护进程。
能力是调整 root 权限的方式,但在执行容器时仍然会应用一些安全附魔。
一个很棒的博客 post 由 Red Hat 提供 here.
正如其他答案中所指出的,在这种情况下,AppArmor 可能是问题所在,并且通过在 运行 容器中使用 --security-opt apparmor:unconfined
标志,挂载是可能的。但是,那只能暂时使用。
我们正尝试在 运行 容器内安装 lustre 文件系统,并已通过 运行 处于特权模式的容器成功完成此操作。
然而,对于那些 运行 在非特权模式下的容器,安装光彩失败,即使 linux 提供的所有功能 - tens of capabilities - 都包含在内!
然后
- “priviledged: True”和“cap_add: all capabilites”有什么区别?
- 为什么在容器中添加了所有能力后,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/
--privileged
和 all-capabilities
的不同之处在于,--privileged
参数移除了 cgroup 控制器强制执行的所有限制,并在为所有设备提供访问权限的同时禁用了安全魔法。特权容器真正成为主机操作系统的一部分,甚至可以访问可能未应用的 AppArmor 和 SELinux 配置,例如 SELinux 标签。
当使用 --privileged
标志时,它不会对底层容器强制执行任何额外的安全性,并且内核文件系统不会以只读方式挂载到容器中。 SECCOMP 过滤也被禁用。不过,你不能获得比当前命名空间允许的更多的权力,例如,如果你是 运行 无根守护进程。
能力是调整 root 权限的方式,但在执行容器时仍然会应用一些安全附魔。
一个很棒的博客 post 由 Red Hat 提供 here.
正如其他答案中所指出的,在这种情况下,AppArmor 可能是问题所在,并且通过在 运行 容器中使用 --security-opt apparmor:unconfined
标志,挂载是可能的。但是,那只能暂时使用。