例如,我的文件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,并且登录将无法启动会话。