如何从组中删除用户?


342

我应该使用哪个命令从Debian中的组中删除用户?

将用户添加到组时,可以使用以下方法完成:

usermod -a -G group user

但是,我找不到用于从组中删除用户的类似命令(接受组和用户作为参数)。我能得到的最接近的是:

usermod -G all,existing,groups,except,for,group user

是否有像usermod OPTION group userOPTION 这样的命令提供使用户usermod(或类似程序)从组中删除的选项?


1
对于到此为止的Fedora用户,man usermod在-G选项注释中显示,希望保留所有当前组的列表是删除组的一种方式。Fedora没有-R选项;您必须使用Lekensteyn试图避免的方法。
斯蒂芬

Answers:


403

您可以使用gpasswd

# gpasswd -d user group

那么新的组配置将在下次登录时分配,至少在Debian上。如果用户已登录,则不会立即看到该命令的效果。


9
很好,谢谢!gpasswd -a user group将用户添加到组中似乎也更好,尤其是当输入错误并且-a选项被放弃时。
Lekensteyn

1
对我不起作用。我收到两条消息:a)从组中删除用户。b)gpasswd:用户不是组的成员。之后运行的“成员组”没有变化。
geoidesic 2014年

1
@geoidesic,您需要注销并再次登录才能看到效果
Wasif Hossain

1
有没有办法使更改生效而无需重新登录?
安迪·富斯尼亚克

2
@geoidesic我在Centos 7上遇到了这些错误。如果您试图从用户的默认组中删除该用户,那么我发现了这一点。尝试使用切换默认组,usermod -g user user然后尝试将其删除。
PanPipes

175

在Debian上,该adduser软件包包含一个deluser程序,如果您将这两个参数都作为参数传递,则该程序会将用户从组中删除:

deluser user group

如果你的发行没有adduser,你可以编辑/etc/group/etc/gshadow手动。

vigr
vigr -s

10
我不知道类似vigr和的程序vipw。如果联机帮助页距离太远,则非常有用:)
Lekensteyn 2012年

3
或者,在修改/etc/group运行后grpconv进行更新/etc/gshadow而不是对其进行编辑。
Cyrille 2014年

sudo deluser jenkins admin/ usr / sbin / deluser:您不能将用户从其主要组中删除。
乔纳森

@JonathanLeaders每个用户都必须至少属于一组。使用usermodvipw更改用户的主要组。这个问题是关于补充团体的。
吉尔斯

真好 还有一个更简单的adduser $user $group命令,而不是usermod -x -y -z -...
ygoe 2014年

65
usermod -G "" username

用户名中删除所有辅助/补充组,而使它们成为其主要组的成员。这在Solaris 5.9中有效


5
在CentOS 6.4中测试;作品。
汇总

1
在Ubuntu 12.04中也可以使用。
汇总

这似乎是将次要组强制到任何组列表的最佳方法,不包括所有未列出的组。
2016年

经过测试并在CentOS 7中工作。谢谢!
Tricky

14

这是“老派”做法。

大多数* nix系统将组信息维护为纯文本文件/etc/group,其中

  • 每行包含字段

    • 组名
    • 密码
    • GID,以及
    • user_list

    :字符分隔。

  • user_list字段是用户名列表,以逗号分隔。

现在,假设您要从名为thisuser 的组中删除名为的用户thatgroup。首先进行备份/etc/group,然后使用具有su特权的首选项编辑器 来编辑文件/etc/groupthisuserthatgroup行条目中删除引用,例如,

原始行是这样的:

thatgroup:x:1274:someuser,thisuser,anotheruser

编辑后应如下所示:

thatgroup:x:1274:someuser,anotheruser

与所有其他答案一样,这不会影响用户的当前会话(如果有)(即,如果用户当前已登录)。该更改将在用户下次登录时生效。


1
vigr已经提到过要/etc/group手动编辑。我的手册页说用户名用逗号分隔,而不用冒号分隔。无需重新启动,您只需要重新登录(或使用newgrp)。
Lekensteyn 2014年

为了帮助任何非Debian用户走到这条路寻找线索...根据OP的问题范围,这对于Debian可能就足够了,但是如果您将它用于* BSD OS,则需要修改纯文本文件如前所述,然后发出pwd_mkdb -p /etc/master.passwd以实际使用该列表。
danno

3

您可以对SUSE发行版使用以下命令(显然,不能使用其他命令)。

usermod -R  user_name

group您要从中删除用户的组和user_name您要从该组删除的用户在哪里。例如,

usermod -R root imnottheroot

1
哪个软件包提供了您的usermod二进制文件?我要求找出版本,因为我的shadow-utils-4.1.4.3不提供-R选项。
myroslav 2013年

3
我的影子4.1.5.1-5软件包(Arch Linux)确实提供了一个-R选项,但这意味着其他事情。我猜不是Linux。
Lekensteyn

3
我不确定这是否行得通。该手册页说-R:“ -R,-root CHROOT_DIR在CHROOT_DIR目录中应用更改,并使用CHROOT_DIR目录中的配置文件。”
MikeKusold 2014年

2
我唯一可以找到的相关内容是 oracle联机帮助页,但这仍然不是同一回事,因此应删除此答案。
kyrias 2014年

sudo usermod -R admin jenkinsusermod:无效的chroot路径“ admin”
2014年

1

考虑:

  • 用户名: abc2
  • 组名: newgroup11

  • 任务:abc2从组中删除用户newgroup11

[root@home1 ~]# groups abc2
abc2 : abc2
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# groups abc2
abc2 : abc2 newgroup11
[root@home1 ~]# usermod -G newgroup11 abc2
[root@home1 ~]# usermod -G abc2 abc2
[root@home1 ~]# groups abc2
abc2 : abc2

**如果我错了,请纠正我。**


1
这“有效”,但仅是因为您有一个辅助组。usermod -G newgroup11 abc2会让你进入第二组newgroup11。由于主要组是abc2,因此您将同时进入这两个组。usermod -g abc2 abc2导致newgroup11被从次要小组中删除,因为不再提及。因此,对于三个或更多不同的组,此方法将不起作用。请参阅其他涉及gpasswd的答案以获得更好的命令。
Lekensteyn 2015年

1

您可以通过执行usermod命令whithout -a选项将用户从组中删除。例如,执行“ usermod -G group1 username”会将用户添加到group1,并将其从其他任何用户组中删除。请记住,您可以通过列出组名称(以逗号分隔)将用户保留在各个组中。


1
此信息已被多次呈现。
斯科特,

0

要在没有删除选项的发行版(如Fedora)中继续使用usermod,其中user = bob和group = deletethisgroup,命令为:

usermod -G `cat /etc/group |  grep bob | grep -v deletethisgroup | cut -d ':' -f 1 | tr '\n' ',' | sed 's/,$//'` bob

管道(1)获取用户所属的所有组条目,(2)取出需要删除的条目,(3)返回第一列(组名),用逗号替换换行符,并删除尾部逗号。

当然,您可以将所有内容放在bash脚本中,该脚本将要删除的用户和组作为参数。awk可以用来缩短结尾,但我想坚持使用grep,cut,tr和sed。


根据该手册页gpasswd -d bob deletethisgroup也可用。有什么原因不使用它?
Lekensteyn

并非每个人都希望设置组密码。我只是使用特定发行版中问题所引用的命令来提供解决方案。在具有gpasswd -d的Fedora / RHEL / Centos中,如果删除的用户有权访问密码,则该用户仍可以加入该组。实际上,与禁止访问相比,它增加了组访问。
斯蒂芬

我知道该实用程序之所以被命名gpasswd是因为它与密切相关/etc/passwd,但是可以管理组。与passwd仅控制密码的普通命令不同,gpasswd它还可以用于管理组的成员身份。如果您是root或组管理员,则不需要组密码。
Lekensteyn

您阅读了gpasswd手册吗?对于Fedora / RHEL / CentOS,如果您阅读了该手册,则说明该命令“用于管理/ etc / group和/ etc / gshadow”。它实际上对/ etc / passwd没有影响。手册还指出:“组密码是固有的安全性问题,因为允许多个人知道密码。” 它实际上并不管理组的成员身份,而是使用密码向任何用户开放该组。如果您已经是组的成员,则不需要组密码。
斯蒂芬

在相似的命名和目的的意义上密切相关,我并不是暗示/ etc / passwd文件实际上是由gpasswd管理的。请注意,我的第一条评论中的“手册页”指向Fedora 13的gpasswd手册页。使用gpasswd $group您可以设置组密码,该密码会引起您提到的安全问题。但是,您也没有密码,无法gpasswd -d $user $group按照第一条评论和已接受的答案中所述删除用户。请注意,此命令不会提示输入组密码,也不会修改或不需要该密码。
Lekensteyn

0

假设username = studentgroupname = research,因此要将student用户从research组中删除,需要执行以下操作:

gpasswd -d student research

为什么要重复六年前的事情?它被标记为已接受答案!
Betlista

-1
pw groupmod "groupname|gid" -d "username|uid"

如果出于任何原因使用CSH的解决方案。


-1

要从组中删除用户,gpasswd是此IMO的最佳实用程序。

命令示例:

sudo gpasswd -d group user

*帮助信息*

Usage: gpasswd [option] GROUP

Options:
  -a, --add USER                add USER to GROUP
  -d, --delete USER             remove USER from GROUP
  -h, --help                    display this help message and exit
  -Q, --root CHROOT_DIR         directory to chroot into
  -r, --delete-password         remove the GROUP's password
  -R, --restrict                restrict access to GROUP to its members
  -M, --members USER,...        set the list of members of GROUP
  -A, --administrators ADMIN,...
                                set the list of administrators for GROUP
Except for the -A and -M options, the options cannot be combined.

1
组和用户参数被交换。另外,这恰好是所接受的答案,这篇文章真的没有帮助吗?
Lekensteyn '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.