一、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