十、如何将现有用户添加到现有组 ID(不是组名)?

十、如何将现有用户添加到现有组 ID(不是组名)?

我想将现有用户添加foo到现有组docker。问题是我的机器有两个同名的组docker,一个 id 为 131,另一个为 999。我想添加foo到 docker 999 组中。以下命令仅添加foo到 131docker组中:

sudo usermod -aG docker foo

我怎样才能添加到dockerID 为 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问题

  1. 问题如上所述(X)“如何将现有用户添加到现有组 ID(而非组名)?”

  2. 实际问题(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/groupY. 如果和/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 系统下管理,因此两者可能互相干扰)。

相关内容