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

将用户添加到组中时,可以使用以下命令:

usermod -a -G group user


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

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


是否有像usermod OPTION group user这样的带有OPTION的命令可以使usermod(或类似程序)从组中删除用户? br />

评论

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

#1 楼

您可以使用gpasswd

# gpasswd -d user group


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

评论


很好,谢谢! gpasswd-一个用于将用户添加到该组的用户组也看起来更好,尤其是当输入错误并且-a选项被删除时。

– Lekensteyn
2012年1月20日下午16:43

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

–地线学
2014年12月15日7:19



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

–瓦西夫·侯赛因(Wasif Hossain)
16年7月3日在11:09

有没有办法使更改生效而无需重新登录?

–安迪·富斯尼亚克(Andy Fusniak)
16年8月11日在15:49

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

– PanPipes
18年1月25日在10:55

#2 楼

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

deluser user group


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

vigr
vigr -s


评论


我不知道像vigr和vipw这样的程序。如果联机帮助页距离太远,则非常有用:)

– Lekensteyn
2012年1月20日下午16:47

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

–西里尔
14-10-20在12:57



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

–乔纳森
14-10-20在17:16

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

–吉尔斯'所以-不再是邪恶的'
14-10-21在16:44



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

– ygoe
2014年12月11日12:35

#3 楼

usermod -G "" username


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

评论


在CentOS 6.4中测试;作品。

–aggregate116​​6877
2014年4月3日在12:13

在Ubuntu 12.04中也可以使用。

–aggregate116​​6877
2014年4月3日在12:22

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

–圣人
16年8月12日在17:53

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

–整rick
18年8月8日在3:54

这是最好的答案。

–Weezy
2月28日17:37

#4 楼

这是“老派”方法...

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



每行包含以下字段:


group_name
密码
GID,以及
user_list

,以:字符分隔。

user_list字段是用逗号分隔的用户名列表。首先备份thisuser
,然后使用具有su特权的首选编辑器
编辑文件thatgroup
,并从/etc/group行条目中删除/etc/group参考,例如

原始行是这样的:

thisuser

编辑后应该这样保留:

thatgroup

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

评论


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

– Lekensteyn
2014年12月10日下午16:24

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

– danno
18年7月19日在17:43

#5 楼

您可以在SUSE发行版上使用以下命令
(而且显然没有其他用途)。

usermod -R group user_name


其中group是要删除的组
中的用户和user_name要从组中删除的用户。
例如,

usermod -R root imnottheroot


评论


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

– myroslav
13-10-17在10:42

我的影子4.1.5.1-5软件包(Arch Linux)确实具有-R选项,但这意味着其他。我猜这不是Linux。

– Lekensteyn
13-10-17在14:51

我不确定这是否有效。该手册页说-R为:“ -R,-root CHROOT_DIR在CHROOT_DIR目录中应用更改,并使用CHROOT_DIR目录中的配置文件。”

– Mike Kusold
2014年7月8日在23:34

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

–雷米
2014年10月5日在22:03

sudo usermod -R管理员jenkins usermod:无效的chroot路径'admin'

–乔纳森
14-10-20在17:18

#6 楼

考虑:


用户名: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


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

评论


这“有效”,但是仅因为您有一个辅助组。 usermod -G newgroup11 abc2将把您置于辅助组newgroup11中。由于主要组是abc2,因此您将同时进入这两个组。 usermod -g abc2 abc2导致newgroup11从辅助组中删除,因为不再提及它。因此,对于三个或更多不同的组,此方法将无效。请参阅其他涉及gpasswd的答案以获得更好的命令。

– Lekensteyn
15年1月17日在22:56

#7 楼

您可以通过不带-a选项的情况下执行usermod命令从组中删除用户。
例如,通过执行
`usermod -G group1 username` 

会将用户添加到group1,并将其从其他任何组中删除,其中它是。请记住,您可以通过列出组名称(用逗号分隔)来将用户保留在各个组中。

评论


该信息已经被多次呈现。

–斯科特
18年11月21日在18:11

#8 楼

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


由于某种原因使用CSH的解决方案。

#9 楼

要在没有删除选项的发行版(如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
16 Mar 27 '16 at 0:08

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

–斯蒂芬
16-3-27在4:11



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

– Lekensteyn
16 Mar 27 '16 at 15:46

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

–斯蒂芬
16-3-28在2:19

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

– Lekensteyn
16 Mar 28 '16 at 20:42

#10 楼

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

gpasswd -d student research


评论


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

–贝塔利斯塔
19年5月3日,0:13

#11 楼

要从组中删除用户,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.


评论


组和用户参数被交换。另外,这正是所接受的答案所建议的内容,此帖子真的没有帮助吗?

– Lekensteyn
18年1月19日在23:29