属于多个用户组的用户ssh登陆仅显示主用户组问题

ssh远程登陆后只显示用户主用户组

在远程host主机上运行docker容器,容器中应用程序都是用admin用户运行,并且通过Docker volume方式将容器中数据共享存储到host主机的volume中。

在host主机创建admin用户账号,uidgid和容器中admin用户相同,目的是在host主机上能够直接通过/var/lib/docker/volumes来访问各个容器中的共享数据,方便备份、开发和数据同步。

由于Docker的目录安全要求,/var/lib/docker子目录只对root用户可读写。通过以下命令适当放宽给root用户组:

chmod 751 /var/lib/docker
chmod 750 /var/lib/docker/volumes

然后将host主机上admin用户添加到root分组

usermod -a -G root admin

此时host主机上root用户切换到admin用户身份可以验证admin用户已经属于root用户组:

[root@devstack ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[root@devstack ~]# su - admin

[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin),0(root),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

但是,远程ssh以admin用户身份登陆,却发现admin用户的id是不同的,这显示主用户组groups=505(admin)

$ ssh admin@192.168.1.12

[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

Linux系统uid和gid范围

在现代的Red Hat Linux系统,创建用户账号时候,会限制uidgid1000及以上。而以前的Red Hat Linux系统,则uidgid500开始。由于历史原因,所以容器中admin用户的uidgid都采用了505

操作系统限制uidgid范围是在/etc/login.defs中定义的

#
# Min/max values for automatic uid selection in useradd
#
UID_MIN          1000
UID_MAX         60000

#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN          1000
GID_MAX         60000

将上述UID_MINGID_MIN更改成500之后,就可以重新创建uidgid505admin账号

groupadd -g 505 admin
useradd -u 505 -g 505 -G root,wheel -d /home/admin -m admin

然后再使用ssh远程登陆admin账号,则恢复正常的goups

$ ssh admin@30.17.44.12

[admin@devstack ~]$ id
uid=505(admin) gid=505(admin) groups=505(admin),0(root),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

参考

Last updated