Debian 有一个关于 Docker 的条目,其中警告:
在我看来,这暗示 sudo 本身就是危险的(尽管比 Docker (组成员身份)要少)。
sudo 有什么危险(也许是普遍的,而且除了配置错误之外)?
特别是虽然, 如何德班这里的意思是 sudo 很危险吗?
答案1
docker 和 sudo 都可以提供完全的 root 访问权限。两者最坏情况风险基本相同。
如果黑客获得完全根访问权限,那么恢复通常涉及重建服务器。他们可以做任何事情并在您的服务器上隐藏任何内容。
因此 sudo 的风险较小,因为 root 访问权限可以通过配置进行限制。 Sudo 可以配置控制它将为用户执行哪些命令。 (通常)还要求 sudo 用户输入密码,如果黑客获得了该用户帐户的访问权限,这可能会阻止一些恶意攻击;黑客可能有访问权限,但没有密码。
对于docker来说,没有这样的配置能力,使其“更危险”。如果您知道正确的“docker run”命令,您可以以 root 身份在 docker 主机上获取命令行。例子:
docker run -it --rm --privileged --pid=host alpine:latest nsenter -t 1 /bin/sh
答案2
Unix 权限的设置是为了使通常具有特权的用户对系统造成的永久损害最小。
sudo 命令将受信任用户的权限提升为 root,该用户可以对系统执行任何操作,包括对操作系统进行更改以导致其出现故障。这使得 sudo 和一般的 root 访问变得危险。
经常拥有 sudo 访问权限的天真的用户只需在每个命令前加上 sudo 前缀,即使是不需要 root 访问权限的命令,以及应该以用户权限而不是 root 权限运行的命令。用户也经常不小心,以 root 身份运行一个拼写错误的命令可能会产生极其严重的后果。即使相关命令是正确的并且无意损坏操作系统,它也可能会因为以 root 身份运行而对用户帐户造成损坏,这使得 sudo 特别危险。再加上用户缺乏经验,并且他们很可能会使用 sudo 运行在 google 中找到的任何命令,而不查找它的作用,这可能会使 sudo 变得灾难性的危险。
允许 sudo 访问所赋予的默认权限是完全 root 访问权限。但是,可以对 sudo 进行微调以提供更有限的访问权限,或者提升到特定的非 root 用户或组,或者限制 root(或非 root)对特定命令的访问。但是,这需要特殊配置,并且通常不是请求“sudo”访问时的含义。
答案3
许多管理员不想在 sudoers 中枚举不同的用户组应该能够这样做......
他们将每个管理员添加到 sudo 组,并在 sudoers 中启用默认的“%sudo ALL=ALL...”项目。
sudo 的更好用法
相反,请考虑角色,因此如果您有一组管理员负责系统一部分中的 postgres 集群:
将这些用户添加到系统中的一个组中,该组能够作为 postgres 超级用户(debian 中的 postgres)运行 postgres 管理命令。因此:他们只能修改 postgres 本身,例如在 postgres/users 中创建新的数据库/角色例如,postgres 但不修改 postgres 如何将系统用户映射到 postgres 用户。
Docker 和 sudo
docker 守护进程被标记为 suid root,因此请考虑 docker 的角色。对于docker的每个应用程序,将其变成一个角色,并强制用户使用sudo启动docker。
Sudo 配置为每个角色在 sudoers.d 中有自己的定义
我不使用 docker,所以有人可以提供他们如何使用 docker 的示例吗?首先删除其他用户在 docker 命令上的 exec 位,即:
chmod o-x /usr/bin/docker
您以这种方式调用 docker 吗?你有多个 docker 镜像吗?如果是这样,则在 sudoers.d 中为每个角色指定一个角色并为其定义一个定义。