Linux用户管理命令(groupadd、groupmod、groupdel、gpasswd、newgrp)详解

添加用户组的命令是 groupadd,命令格式如下:

[root@localhost ~]# groupadd [选项] 组名

选项:
  • -g GID:指定组 ID

添加用户组的命令比较简单,举个例子:

[root@localhost ~]# groupadd group1
#添加group1组
[root@localhost ~]# grep "group1" /etc/group
group1:x:502:

修改用户组:groupmod

groupmod 命令用于修改用户组的相关信息,命令格式如下:

[root@localhost ~]# groupmod [选现] 组名

选项:
  • -g GID:修改组 ID;
  • -n 新组名:修改组名;

例子:

[root@localhost ~]# groupmod -n testgrp group1
#把组名group1修改为testgrp
[root@localhost ~]# grep "testgrp" /etc/group
testgrp:x:502:
#注意GID还是502,但是组名已经改变

不过大家还是要注意,用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的。

刪除用户组:groupdel

groupdel 命令用于删除用户组,命令格式如下:

[root@localhost ~]#groupdel 组名
例子:
[root@localhost ~]#groupdel testgrp
#删除testgrp

不过大家要注意,要删除的组不能是其他用户的初始组,也就是说这个组中没有初始用户才可以删除。如果组中有附加用户,则删除组时不受影响。

把用户添加进组或从组中删除:gpasswd

其实 gpasswd 命令是用来设定组密码并指定组管理员的,不过我们在前面已经说了,组密码和组管理员功能很少使用,而且完全可以被 sudo 命令取代,所以 gpasswd 命令现在主要用于把用户添加进组或从组中删除。

gpasswd 命令格式如下:

[root@localhost ~]# gpasswd 选项 组名

选项:
  • -a 用户名:把用户加入组;
  • -d 用户名:把用户从组中删除;

举个例子:

[root@localhost ~]# groupadd grouptest
#添加组grouptest
[root@localhost ~]# gpasswd -a lamp grouptest
Adding user lamp to group grouptest
#把用户lamp加入grouptest组
[root@localhost ~]# grep "lamp" /etc/group
lamp:x:501:
grouptest:x:505:lamp
#査看一下,lamp用户已经作为附加用户加入grouptest组
[root@localhost ~]# gpasswd -d lamp grouptest
Removing user lamp from group grouptest
#把用户lamp从组中删除
[root@localhost ~]# grep "grouptest" /etc/group grouptest:x:505:
#组中没有lamp用户了

大家注意,也可以使用 usermod 命令把用户加入某个组,不过 usermod 命令的操作对象是用户,命令是 "usermod -G grouptest lamp",把用户名作为参数放在最后;而 gpasswd 命令的操作对象是组,命令是"gpasswd -a lamp grouptest",把组名作为参数放在最后。

推荐大家使用 gpasswd 命令,因为这个命令不仅可以把用户加入用户组,也可以把用户从用户组中删除。

改变有效组:newgrp

我们说过,每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)。既然用户可以属于这么多用户组,那么用户在创建文件后,默认生效的组身份是哪个呢?

当然是初始用户组的组身份生效了,因为初始组是用户一旦登陆就获得的组身份。也就是说,用户在创建文件后,文件的属组是用户的初始组,因为用户的有效组默认是初始组。既然用户属于多个用户组,那么能不能改变用户的有效组呢?使用命令 newgrp 就可以切换用户的有效组。命令格式如下:

[root@localhost ~]# newgrp 组名

举个例子,我们已经有了普通用户 lamp,默认会建立 lamp 用户组,lamp 组是 lamp 用户的初始组。我们再把 lamp 用户加入 group1 组,那么 group1 组就是 lamp 用户的附加组。当 lamp 用户创建文件 test1 时,test1 文件的属组是 lamp 组,因为 lamp 组是 lamp 用户的有效组。通过 newgrp 命令就可以把 lamp 用户的有效组变成 group1 组,当 lamp 用户创建文件 test2 时,就会发现 test2 文件的属组就是 group1 组。命令如下:

[root@localhost ~]# groupadd group1
#添加组group1
[root@localhost ~]# gpasswd -a lamp group1
Adding user lamp to group group1 #把lamp用户加入group1组
[root@localhost ~]# grep "lamp" /etc/group
lamp:x:501:
group1:x:503:lamp
#lamp用户既属于lamp组,也属于group1组
[root@localhost ~]# su - lamp
#切换成lamp身份,超级用户切换成普通用户不用密码
[lamp@localhost ~]$ touch test1
#创建文件test1
[lamp@localhost ~]$ll test1
-rw-rw-r-- 1 lamp lamp 01月14 05:43 test1
#test1文件的默认属组是lamp组
[lamp@localhost ~]$ newgrp group1
#切换lamp用户的有效组为group1组
[lamp@localhost ~]$ touch test2
#创建文件test2
[lamp@localhost ~]$ ll test2
-rw-r--r-- 1 lamp group1 01月 14 05:44 test2
#test文件的默认属组是group1组

通过这个例子明白有效组的作用了吗?其实就是当用户属于多个组时,在创建文件时哪个组身份生效。使用 newgrp 命令可以在多个组身份之间切换。