Linux 中具有相同角色的用户都会以组的形式来管理。如何将用户添加到组、从组中删除用户等,本篇介绍 Linux 中常用的用户组相关操作。所有命令以 root 身份运行。

查看 Linux 中的所有组和用户组

1
cat /etc/group

结果大致如下:

1
2
jinzhongxu:x:1002:
miniconda:x:1003:root,jinzhongxu

/etc/group 是 Linux 系统中组的配置文件,记录组的信息。除此之外,还有配置文件 /etc/gshadow 保存用户组口令。

每行含义:组名:口令:组标识:组内用户

从上面的结果可以看出,组 miniconda 中包含两个用户,分别是 root, jinzhongxu。同时,组 jinzhongxu 的组内用户为空,其实,同名用户一般不列出。查看用户所属组的方法如下:

1
id jinzhongxu

结果:

1
uid=1002(jinzhongxu) gid=1002(jinzhongxu) groups=1002(jinzhongxu),27(sudo),1003(miniconda)

1
groups jinzhongxu

结果:

1
jinzhongxu : jinzhongxu sudo miniconda

创建组和删除组

1
2
3
4
# 创建组
groupadd science
# 删除组
groupdel science

创建用户时分配组

这里创建新用户 jinzhongxu,-m 表示同时创建用户的登录主目录,即用户的家目录,一般为 /home/jinzhongxu-g science 表示并把该用户添加到 science 组。如果不指定用户组,则将默认创建与用户名同名的用户组。

1
useradd -m -g science jinzhongxu

删除用户

使用如下命令能够同时删除用户、用户所有文件,如果添加用户是同时添加了用户同名组,则也会删除该组:

1
userdel -r jinzhongxu

把用户添加到组

将用户 jinzhongxu 添加(追加 append)到组 science 中:

1
2
3
usermod -a -G science jinzhongxu
# 追加到两个组中
usermod -a -G science,nature jinzhongxu

切换用户组

把用户的第一个组切换到新组,第一个组可以通过上面查看用户组信息获取,第一个用户组就是。切换用户 jinzhongxu 的第一个组到 sudo 的方法如下:

1
usermod -g sudo jinzhongxu

只保留用户到一个或指定的用户组

如果一个用户被分配到很多个组,想要只保留一个或指定的组或者删除多余的组,可以使用如下的方法:

1
2
3
4
# 只保留用户 jinzhongxu 到组 science
usermod -G science jinzhongxu
# 保留用户 jinzhongxu 到组 science 和 nature
usermod -G science,nature jinzhongxu

只删除指定的组

如果想要把用户 jinzhongxu 从一个组 science 中删除,可以使用如下的方法:

1
gpasswd -d jinzhongxu science

注意:当用户只属于一个组的时候,是无法删除组的。因为所有用户必须属于一个组

修改配置文件 /etc/group 从组中删除用户

因为用户组中的用户信息记录在配置文件 /etc/group 中,因此,我们可以通过手动修改该文件删除某个组中的用户,方法就是使用文本编辑工具 vim,删除某一行用户组中后面的需要删除的用户名即可。但,需要重新启动方可生效。

群组管理员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 关于系统管理员(root)做的动作:
gpasswd groupname
gpasswd [-A user1,...] [-M user3,...] groupname
gpasswd [-rR] groupname
选项与参数:
:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些帐号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效
# 关于群组管理员(Group administrator)做的动作:
gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。

创建一个新群组,名称为 science 且群组交由 jinzhongxu 管理:

1
2
3
4
5
6
groupadd testgroup # 先创建群组
gpasswd testgroup # 给这个群组一个密码吧!

# 为用户组 science 添加用户 jinzhongxu 为管理员:

gpasswd -A jinzhongxu science

这样,用户 jinzhongxu 就有管理用户组 science 的权限了。可以执行从组 science 中添加和删除用户的操作。

1
2
3
4
5
# 把用户 xjz 添加到群组 science
gpasswd -a xjz science

# 把用户 xjz 从群组 science 中剔除
gpasswd -d xjz science
1
2
3
4
5
6
7
8
9
# 如果用户在多个群组中,那么默认群组就是有效群组,创建新文件等都是以有效群组设定权限
id jinzhongxu # 第一个组名
groups # 第一个组名

# 更改有效群组,会默认创建一个新 bash,在改 bash 中默认有效群组为 science
newgrp science

# 退出改 bash 则默认有效群组将会恢复默认
exit

更多

查看更多关于用户或用户组操作可以查看帮助信息

1
2
man usermod
man gpasswd

参考文献

  1. 如何从组中删除Linux用户?
  2. linux下删除某个组下的某个用户
  3. 在Linux中如何将用户从组中移除?
  4. linux 下把一个用户从某个组中删除,而不删除用户