运行 docker“引擎”是否需要sudo
在开发过程中不断地运行?你就是这么做的吗?你sudo -i
在操作docker的时候吗?或者你在 sudo 上设置计时器吗?有没有一种安全的方法可以更方便地操作它,例如启用密钥/通行证管理器?
背景
按照 Docker 网站的提示安装“桌面”(甚至“引擎”URL 端点也链接到桌面,尽管也是引擎),我遇到了一些情况,让我考虑仅在我的 Linux 上使用该引擎:
答案1
1. 不像在主机上以 root 身份使用 docker
Docker 桌面(仅)更安全,因为它运行在虚拟机。这意味着具有 docker-desktop 访问权限的受损用户只能对 docker 容器和您的 docker 引擎造成损害,而不是对整个主机系统造成损害。
因此,在主机系统上以 root 身份运行的 docker 守护进程将始终存在此安全漏洞。这就是它的本质。
至少这一点,在没有 VirtualMachine 容器的主机上作为根守护进程运行,这总是会让您进入根终端:
docker run -it --rm --privileged --pid=host ubuntu:latest nsenter -at 1
2. 虚拟机中的 Docker 引擎(无桌面)
尽管您需要了解使绑定安装工作的语义,但没有什么可以阻止您自己在虚拟机中运行 docker。
3.非root Docker
您的另一个选择是以非 root 用户身份运行 docker。这应该意味着 docker 本身对您系统的访问权限要少得多,但它会给您在 docker 内运行的内容增加限制。看这里:https://docs.docker.com/engine/security/rootless/
- 仅支持以下存储驱动程序:
- overlay2(仅当运行内核 5.11 或更高版本,或 Ubuntu 风格的内核时)
- fusion-overlayfs(仅当运行内核 4.18 或更高版本,并且安装了 fusion-overlayfs 时)
- btrfs(仅当使用内核 4.18 或更高版本运行,或者使用 user_subvol_rm_allowed 挂载选项挂载 ~/.local/share/docker 时) -vfs
- 仅当与 cgroup v2 和 systemd 一起运行时才支持 Cgroup。请参阅限制资源。
- 不支持以下功能:
- 应用装甲
- 检查站
- 覆盖网络
- 暴露 SCTP 端口
- 要使用 ping 命令,请参阅路由 ping 数据包。
- 要公开特权 TCP/UDP 端口 (< 1024),请参阅公开特权端口。
- docker Inspect 中显示的 IPAddress 是在 RootlessKit 的网络命名空间内命名的。这意味着如果不输入网络名称空间,则无法从主机访问 > - IP 地址。
- 主机网络(docker run --net=host)也在 RootlessKit 内部命名。
- 不支持 docker“data-root”挂载 NFS。此限制并非特定于无根模式。
4. 创建一个专用的、受密码保护的 docker 用户
创建一个您可以访问的专用用户
sudo -iu docker-admin-user