bash 里 I have no name!
通常情况下, 我们启动 Docker 都是以 root 为当前用户启动 container 的. 但是我们也可以设置以特定的用户来运行 container 里面的主进程.
加上
--user
参数# 这里指定一个不存在的 user id 1000 来执行. docker run --name noNameTest --user 1000:1000 neo4j:latest
在 Dockerfile 里面设置用户
USER <user>[:<group>] # 用户名:组名 USER UID[:GID] # 用户ID:组ID
但是如果你登录进入该 contianer 却看到你的用户名是: I have no name!, 那说明你的 Shell (Bash 或其它) 再向你抱怨, 它无法找到你当前的用户名. 如下面:
I have no name!@my_container:$
I have no name!@my_container:$ id
uid=1000 gid=1000 groups=1000
I have no name!@my_container:$ whoami
whoami: cannot find name for user ID 1000
这是因为 Shell 通常去 /etc/passwd
去找这个用户ID, 却找不到.
在 Kubernetes 里面这样以非 root 用户去运行, 可以最小化权限, 防止特权升级, 提高安全性和隔离性.当容器以不存在的用户 ID 和组 ID 运行时,通常这些用户没有在容器内配置 sudo 或 su 的权限,也没有相应的配置文件(如 /etc/sudoers)来允许权限提升.
在 Dockerfile 中使用 USER 指令指定非 root 用户。
在 Kubernetes Pod 的安全上下文(SecurityContext)中指定 runAsUser 和 runAsGroup 来配置非 root 用户运行。