![十、如何将现有用户添加到现有组 ID(不是组名)?](https://linux22.com/image/938408/%E5%8D%81%E3%80%81%E5%A6%82%E4%BD%95%E5%B0%86%E7%8E%B0%E6%9C%89%E7%94%A8%E6%88%B7%E6%B7%BB%E5%8A%A0%E5%88%B0%E7%8E%B0%E6%9C%89%E7%BB%84%20ID%EF%BC%88%E4%B8%8D%E6%98%AF%E7%BB%84%E5%90%8D%EF%BC%89%EF%BC%9F.png)
我想将现有用户添加foo
到现有组docker
。问题是我的机器有两个同名的组docker
,一个 id 为 131,另一个为 999。我想添加foo
到 docker 999 组中。以下命令仅添加foo
到 131docker
组中:
sudo usermod -aG docker foo
我怎样才能添加到docker
ID 为 999 的组?
更新:进一步查看后,我意识到只有该docker
131
组列在/etc/group
:
$ cat /etc/group | grep docker
docker:x:131:Steve,Mark,Emmy,user1,foo
我不知道 999 docker 来自哪里,但是以下用户无需 sudo 就可以运行 docker:
$ id user1
uid=260800(user1) gid=5000(student) groups=5001(sudoaccess),999(docker),27(sudo),124(sambashare),13010(eestaff),131(docker)
但foo
用户不能:
$ id foo
uid=305800(foo) gid=5000(student) groups=27(sudo),131(docker)
答案1
因此,这变成了一个XY问题
问题如上所述(X)“如何将现有用户添加到现有组 ID(而非组名)?”
实际问题(Y)
/etc/group
“如果和/etc/gshadow
文件对某个组的数字 GID 存在分歧,我该怎么办?”
十、如何将现有用户添加到现有组 ID(不是组名)?
它在手册页中没有明确说明,但会接受数字 GID 作为(主要组)和(次要组)usermod
选项的参数,至少在 Ubuntu 18.04 上测试过。-g
-G
例如给定
$ groups testuser
testuser : testuser staff
$ getent group ftp
ftp:x:134:
然后
$ sudo usermod -aG 134 testuser
$ groups testuser
testuser : testuser staff ftp
/etc/group
Y. 如果和/etc/gshadow
文件对某个组的数字 GID 存在分歧,我该怎么办?
该软件包中提供了一个命令行工具passwd
:
NAME grpck - verify integrity of group files SYNOPSIS grpck [options] [group [ shadow ]] DESCRIPTION The grpck command verifies the integrity of the groups information. It checks that all entries in /etc/group and /etc/gshadow have the proper format and contain valid data. The user is prompted to delete entries that are improperly formatted or which have other uncorrectable errors. Checks are made to verify that each entry has: · the correct number of fields · a unique and valid group name · a valid group identifier (/etc/group only) · a valid list of members and administrators · a corresponding entry in the /etc/gshadow file (respectively /etc/group for the gshadow checks)
要检查不一致之处,首先以只读模式运行:
sudo grpck -r
(即使在这里也需要提升权限,因为/etc/gshadow
只有 root 可以读取)。然后,一旦您确定了问题,请再次以交互方式运行以更正问题:
sudo grpck
pwck
对于确保/etc/passwd
和之间的一致性也有类似的实用作用/etc/shadow
。
答案2
总结要回答标题问题,请关注@steeldriver 的帖子,又名。usermod
也适用于组 ID。下面的解决方案专门针对 OP 正文中描述的问题。
/etc/group
显然,通过编辑并将docker组id更改131
为,问题已经解决999
。注销并再次登录后,我只剩下一组docker -999
组。
$ id foo
uid=305800(foo) gid=5000(student) groups=27(sudo),999(docker)
我非常希望更改/etc/group
不会导致任何奇怪的行为。问题的根源仍然未知(服务器登录也在 LDAP 系统下管理,因此两者可能互相干扰)。