M20 – 1- 第三周博客(2):Linux用户、组

一、Linux用户组详解

Linux系统中的每个用户都有一个用户组,系统能对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如Linux下的用户属于和他同名的用户组,这个用户组在创建用户时同时创建。用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就对/etc/group文件的更新。

用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的;

1、用户组的添加、删除、管理

很多人都问,为什么Linux系统中已经存在用户了,为什么还需要组呢,其实这个不难理解,也是跟我们的生活息息相关的,假设1000个军人如果没有编组没有编号,是否会乱成一团呢,如果把把这一千人编组和编号,是否觉得就好方便管理了呢,而Linux系统用户组也是以这种方式进行管理和分配资源的。

Linux系统中,当创建一个普通用户时,同时也会创建一个以普通用户名称命名的用户组,是否真的是这样呢,接下来是操作演示:

[root@centos7 ~]# id tomcat
id: tomcat: no such user
[root@centos7 ~]# useradd tomcat
[root@centos7 ~]# id tomcat
uid=1001(tomcat) gid=1001(tomcat) groups=1001(tomcat)
[root@centos7 ~]#

从上面的操作可以看出,创建普通用户tomcat时,同时也创建出了tomcat用户组,而这个组是该用户的基本组,而且是仅有一个基本组,但是可以有多个附加组,如果仅仅只是创建组,而不创建用户只需要用groupadd命令创建组即可:

groupadd 命令

简介:
groupadd - create a new group
格式:
groupadd [options] group
选项:
-g GID:指明GID号;[GID_MIN, GID_MAX]
-r:创建系统组,(CentOS 6: ID<500,CentOS 7: ID<1000)
实例1:
[root@centos7 ~]# man groupadd
[root@centos7 ~]# groupadd -g 1020 nginx
[root@centos7 ~]# getent group nginx
nginx:x:1020:
实例2:
[root@centos7 ~]# groupadd -r zabbix   #创建系统用户
[root@centos7 ~]# getent group zabbix  
zabbix:x:986:                          #centos7系统中,系统用户小于1000

普通用户组是用于供人类使用,而系统用户组是供系统中的程序运行的,接下来讲的是附加组,为什么有了用户组还多了个附加组呢,附加组的作用是干什么的呢,假设一位王老师教两个班级数学,王老师给这两个班级批改作业,必须对这个两个班级有权限才能修改,但是用户只能有一个基本组,那不是王老师只能更改一个班级的作业么,但是由于linux系统的存在附加组的性质,因此将两个班级的基本组作为王老师的附加组,是不是王老师就有了更改两个班级的作业权限呢,因此附加组的作用在于用户可以使用附加组的权限,如何添加用户的附加组呢,下面讲的是gpasswd命令:

gpasswd 命令

简介:
gpasswd - administer /etc/group and /etc/gshadow
格式:
gpasswd [option] group
选项:
-a user:将user添加至指定组中
-d user:从指定组中移除用户user
-A user1,user2,...:设置有管理权限的用户列表
实例1:
[root@centos7 ~]# id mageedu
uid=1000(mageedu) gid=1000(mageedu) groups=1000(mageedu),10(wheel)
[root@centos7 ~]# getent group tom
tom:x:1021:
[root@centos7 ~]# gpasswd -a mageedu tom   #设置mageeedu用户添加附加组tom
Adding user mageedu to group tom
[root@centos7 ~]# id  mageedu
uid=1000(mageedu) gid=1000(mageedu) groups=1000(mageedu),10(wheel),1021(tom)
实例2:
[root@centos7 ~]# id  mageedu
uid=1000(mageedu) gid=1000(mageedu) groups=1000(mageedu),10(wheel),1021(tom)
[root@centos7 ~]# gpasswd -d mageedu tom
Removing user mageedu from group tom  #将mageedu用户从tom组中移除
[root@centos7 ~]# id mageedu
uid=1000(mageedu) gid=1000(mageedu) groups=1000(mageedu),10(wheel)

在有些场景中,有些用户添加组会写错名称,那如何更改组的名称呢,下面用的是groupmod命令详解:

groupmod 命令

简介:
groupmod - modify a group definition on the system
格式:
groupmod [options] GROUP
选项:
-n group_name:新名字
-g GID:新的GID
实例1:
[root@centos7 ~]# getent group nginx
nginx:x:1020:
[root@centos7 ~]# groupmod -n tom nginx  #更改普通组nginx名称为tom
[root@centos7 ~]# getent group tom
tom:x:1020:
实例2:
[root@centos7 ~]# groupmod -g 1021 tom   #更改普通组的tom的GID为1021
[root@centos7 ~]# getent group tom
tom:x:1021:

如果王老师不想加入到两个班级的组中,又想更改两个班级的作业,改怎么做呢,这时候只需要用newgrp命令,但是必须知道两个班级的组密码:

newgrp 命令

简介:
newgrp - log in to a new group
格式:
newgrp [-] [group]
实例1:
[wang@centos7 ~]$ newgrp user1  #切换到一班的组,即可对一班的资源进行操作
Password: 
[wang@centos7 ~]$

如果王老师用户已经加入两个班级的组中,我们该如何查看呢,接下来将的是查看该组的成员,

groupmems 命令

简介:
groupmems - administer members of a user's primary group
格式:
groupmems -a user_name | -d user_name | [-g group_name] | -l | -p
选项:
-g, --group:groupname更改为指定组(只有root)
-a, --add username:指定用户加入组
-d, --delete username:从组中删除用户
-p, --purge:从组中清除所有成员
-l, --list:显示组成员列表
实例1:
[root@centos7 ~]# groupmems -g wang -l  #将wang用户加入到user1组中
user1  user2 
[root@centos7 ~]# gpasswd -a wang user1 #将wang用户加入到user2组中
Adding user wang to group user1
[root@centos7 ~]# gpasswd -a wang user2
Adding user wang to group user2
[root@centos7 ~]# groupmems -g user1 -l #查看user1组中的成员
wang 
[root@centos7 ~]# groupmems -g user2 -l #查看user2组中的成员
wang
实例2:
如何将新来tom老师加入到两个班级的组中呢?
[root@centos7 ~]# useradd tom
[root@centos7 ~]# groupmems -a tom -g user1
[root@centos7 ~]# groupmems -a tom -g user2
[root@centos7 ~]# groupmems -g user1 -l
wang  tom 
[root@centos7 ~]# groupmems -g user2 -l
wang  tom
实例3:
如果wang老师离职了,需要将wang用户将两个组中删除
[root@localhost ~]# groupmems -a wang -g user1
[root@localhost ~]# groupmems -g user1 -l
tom  wang 
[root@localhost ~]# groupmems -d wang -g user1
[root@localhost ~]# groupmems -g user1 -l
tom 
[root@localhost ~]# groupmems -d wang -g user2
[root@localhost ~]# groupmems -g user2 -l
tom

Linux系统中还自带了一个命令是查看用户组中的用户列表,下面讲的是groups命令:

groups 命令

简介:
groups - print the groups a user is in
格式:
groups [OPTION]... [USERNAME]...
实例1
[root@localhost ~]# groups wang
wang : wang
[root@localhost ~]# groups tom
tom : tom user1 user2

2、用户组的管理

如果已经停用的用户组不需要了,可以用groupdel命令删除。

groupdel 命令

简介:
groupdel - delete a group
格式:
groupdel [options] GROUP
实例1:
[root@localhost ~]# getent group wang  
wang:x:1004:
[root@localhost ~]# groupdel wang   #删除用户组wang
groupdel: cannot remove the primary group of user 'wang'    #因为wang组中有wang用户,因此提示仅删除了wang组,wang用户未有删除
[root@localhost ~]# userdel -r wang  #使用userdel命令删除wang用户

Linux组:Groupname/GID

管理员组:root, 0
普通组:
    系统组:1-499, 1-999
    普通组:500+, 1000+
    
Linux组的类别:
    用户的主要组(主组):
        用户必须属于一个且只有一个主组
        组名同用户名,且仅包含一个用户:私有组
    用户的附加组(辅助组):
        一个用户可以属于零个或多个辅助组

3、用户组的配置文件详解

Linux用户组的主要配置文件:

/etc/group:组及其属性信息

/etc/gshadow:组密码及其相关属性

/etc/group:
   group_name:password:GID:user_list
   组名:组密码:群组的ID:以当前组为附加组的用户列表(分隔符为逗号)
/etc/gshadow
group_name:encrypted_password:administrators:members
群组名称:群组密码:组管理员列表:以当前组为附加组的用户列表(分隔符为逗号)

如果要编辑用户组的配置文件,建议使用vigr和grpck命令,这两个命令可以检测编辑的文件是否有语法错误。

原创文章,作者:Aleen,如若转载,请注明出处:http://www.178linux.com/28138