容器外观察容器内的进程

可以通过用户名观察

容器内运行程序的用户的UID, 会与容器外主机UID的用户对应,在主机top查看进程时,就可以看到容器内现在都有谁在运行程序。

问题:如果主机/etc/passwd中,没有对应的UID用户会怎么显示? 经过实验后,top命令会显示容器内用户的ID.

一开始,产生了极其错误的想法:先在主机上创建一个使用容器的普通用户,假设为zhangsan. UID为1000。 由于登录容器的用户是root, 把容器内/etc/passwd中的root的UID修改为1000.

这样当容器内运行程序时,主机的top会显示User为张三。

但是修改了root的UID,root就变成了普通用户,因为当UID=0时,用户是超级用户。

这样容器内就只有普通用户,没有了超级用户,之前用root创建的文件都不能访问。

由于没有了超级用户,/etc/passwd也无法会修改了。

解决:

关闭容器;开启容器;在连接容器。在连接容器时,运行相应命令,在重新创建一个超级用户。

docker exec -it 87b877346f41 /bin/bash -c 'useradd -u 0   -o  -g root  -G root -d /yuri yuri'

命令解析:

-u 0:指将uid指定为0(零)与root相同,登录后的提示符为#而非$。
-o:指因为重复了uid(与root帐号的uid重复)必须指定这个参数。
-g root:初始化组的组名,当用户属于多个组时,(在-G参数中指定),登录时所在组。缺省该项时,系统新建一个与用户名同名的组,并且初始化时设为该组名。而不论-G指定为哪些组。
-G root:指定用户名所属的组列表,一个用户可以属于多个组,组名间用逗号分隔,组名必须已经存在。
-d /yuri:指定用户的属主目录
yuri 新建的用户名为yuri

这样yuri就变成了超级用户。用yuri把/etc/passwd修改root成超级用户。

问题解决后,改变思想:在容器内重新一个普通用户,其UID与主机对应用户UID相同。在赋予普通用户root权限。这样用普通用户的身份去登录容器。

进程PID有没有关联?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值