我想知道使用 usermod 或 groupmod 将用户添加到另一个现有组是否有区别。示例:我们有一个名为艺术家的补充组,并且想要将罗密欧添加到该组中。
usermod -G artists romeo
groupmod -U romeo artists
我使用的是红帽9。
答案1
从man
页面groupmod
:
The groupmod command modifies the definition of the specified GROUP
by modifying the appropriate entry in the group database.
没有-U
选项(shadow-utils 4.6 of 04/18/2022)。的目的groupmod
是修改群组的特征,而不是修改其成员的特征。
从man
页面usermod
:
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]
A list of supplementary groups which the user is also a member of ...
If the user is currently a member of a group which is not listed, the user
will be removed from the group. This behaviour can be changed via the -a
option, which appends the user to the current supplementary group list.
因此,例如,如果您的用户romeo
已经是 group 的成员paintworkers
,则之后:
usermod -G artists romeo
他只会是补充组的成员artists
,而不是 的成员paintworkers
。但是如果您使用:
usermod -aG artists romeo
他将成为这两个群体的成员。
更新:
如上所述,这对于shadow-utils
2022 年 4 月 18 日的 4.6 来说是正确的。然而OP指出,shadow-utils
2021年2月12日的4.9现在确实记录了-U
:
-U, --users
A list of usernames to add as members of the group.
因此大概usermod -aG
或groupmod -U
形式应该同样适用于更高版本的shadow-utils
.
答案2
...透过树木看到森林
你所指的一切最终都会发生在/etc/group
/etc/组格式
<groupname>:x:gid:user1,user2,user_n
x = 密码字段,几乎从未使用过,会引用 /etc/gshadow 就像 /etc/passwd 引用 /etc/shadow 一样。
gid = group id,唯一的组id。约定是 < 100 个系统内容不使用,< 1000 个用于管理内容,> 1000 个其他内容。 不过不要引用我的话
对于任何组名,只需将所有用户帐户添加到该组中,并用逗号分隔。我不认为我曾经使用过usermod
或groupmod
考虑过用户帐户所在的补充组,我只是/etc/group
直接编辑似乎更简单,更快,更容易准确地看到所有正在发生的事情。
也许唯一的一点是有一个主要群体/etc/passwd
对于任何给定的用户帐户,由每个帐户的第 4 列中的 gid 指定。但是任何用户帐户所属的所有补充组都指定了/etc/group
谁是哪个组的成员。然而你使用usermod
或groupmod
最终只是简单地改变这些东西。
usermod -G
将在 /etc/group 中指定组名的列表末尾添加给定的用户帐户名。如果您将一个用户添加到一个新组,则手动编辑 /etc/group 会更容易,否则对于 5 个以上的组同时执行此命令可能比在 /etc/group 中手动执行要快一点。
groupmod -U
我认为这不是一个有效的选择(在 RHEL 7 中)
groupmod --help
Usage: groupmod [options] GROUP
Options:
-g, --gid GID change the group ID to GID
-h, --help display this help message and exit
-n, --new-name NEW_GROUP change the name to NEW_GROUP
-o, --non-unique allow to use a duplicate (non-unique) GID
-p, --password PASSWORD change the password to this (encrypted)
PASSWORD
-R, --root CHROOT_DIR directory to chroot into
-P, --prefix PREFIX_DIR prefix directory where are located the /etc/* files