为什么 docker exec 命令可以使用 nologin 用户启动 shell?

为什么 docker exec 命令可以使用 nologin 用户启动 shell?

例如,我的文件foo中有一个 nologin 用户:/etc/passwd

foo:x:1010:1010::/home/foo:/usr/sbin/nologin

运行这个 docker 容器后,我执行命令:

docker exec -it --user foo <container name> bash

它实际上可以登录为foo,我理解错了吗?因为从 nologin 手册页来看,它说:

nologin displays a message that an account is not available and exits
non-zero.  It is intended as a replacement shell field to deny login
access to an account.

这里 docker exec 和用户 foo 是如何工作的?

答案1

docker exec刚刚在现有命名空间中启动一个进程。您没有登录容器,只是调用特定用户拥有的命令。如果您只是告诉 Docker 运行,它不会启动登录过程bash

要在 docker 中获得完全正常工作的登录过程,您需要运行某种登录服务,例如 ssh、mgetty、gdm 或只是普通的login foo。在大多数情况下,它将通过 PAM 堆栈运行,pam_unix 将读取 pwent,并且登录将无法启动会话。

相关内容