文章目录
-
- 1.用户标志符UID与GID
-
- 1.1详解用户配置文件/etc/passwd
- 1.2 详解账号密码文件/etc/shadow
- 1.3详解用户组配置文件/etc/group
- 1.4 有效用户组与初始用户组
-
- 1.5 详解用户组密码文件/etc/gshadow
- 2.用户的增删改
-
- 2.1 useradd新增用户
- 2.2 useradd的参考文件(基本账号设置值)
- 2.3 其他相关账号设置值
- 2.4 passwd为新增用户设置密码
- 2.5 用户数据修改usermod
- 2.6 删除用户userdel
- 3.普通用户常用的账号数据更改与查询命令
-
- 3.1finger
- 3.2 chfn
- 3.3 chsh
- 3.4 id
- 4.用户组的增删改
-
- 4.1用户组的增加groupadd
- 4.2用户组相关信息的修改groupmod
- 4.3删除用户组groupdel
- 4.4用户组管理员功能
本篇主要深入介绍用户与用户组,具体包括用户与用户组标志符,用户管理(账号管理)。
1.用户标志符UID与GID
我们登录Linux系统时通常运用用户名,但是Linux系统只识别一组号码,因此该号码与用户名之间存在对应关系,记录在/etc/passwd文件中,称呼这组号码为UID即用户在系统中的唯一验证符号,同样的用户组也有用户组名与用户组ID的对应关系也存放在/etc/group文件中,称为GID。
登录系统时系统会去查找这两个文件,只有找到相应的ID之后才会进入到记录密码的文件/etc/shadow中去核对密码是否正确,进而确认是否可以进入系统。
1.1详解用户配置文件/etc/passwd
/etc/passwd文件的具体内容如下图所示:
其中每一行都代表一个账户信息,以下将详细介绍各个字段的含义:
- 第一个账号代表用户名称,与UID对应;
- 密码,但是/etc/passwd文件是所有用户都可以读取的,为了安全,密码存放在/etc/shadow中,所以这里显示x;
- UID这个就是用户标识符,Linux对UID的使用有以下限制:0用于系统管理员(root);1-499保留给系统用户使用,是惯例,用于系统上启用的服务希望用较小的权限去执行而不是直接使用root权限,所以就得提供这些服务的所有者账号,这些账号通常不可登录;1-99:各版本自行创建的系统账号,100-499若用户有系统账号的需求时,可以使用的账号UID。
- GID这个是用户组标识符,用户组相关信息也有类似的文件存放在/etc/group文件中;
- 用户信息说明列,没什么重要用途,用于说明账号的意义;
- 主文件夹,默认的用户主文件夹在/home/IDname中;
- shell,当用户登录后就会取得一个Shell来与系统的内核通信以进行用户的操作任务,默认你shell会使用bash就是在这里指定的。
1.2 详解账号密码文件/etc/shadow
/etc/shadow用于存放密码相关的信息,包括用户密码,文件具体结构如下图所示:
- 账号密码:与密码对应;
- 密码,经过编码加密之后的密码,只有root用户才可以读写;
- 最近更改密码的日期,注意该日期是以格林尼治日期为起始点1,每过一天就累加1计算所得;
- 密码不可被变更的天数,改密码最近一次被更改之后需要经过几天才可以被更改,如果是0的话,表示密码随时可以改动;
- 密码需要重新更改的天数,经常更改密码是哥好习惯,该字段的含义是最近一次修改密码之后必须多少天之内再次更改密码,必须在该天数范围内重置密码,否则该账号的密码会变为过期特性。
- 密码需要更改期限的警告天数,当账号的密码有效期限快要到的时候,系统将依据该字段给用户发出警告,提醒他密码再过多少天将要过期,尽快修改密码;
- 密码过期后的宽限时间,密码过期后,在宽限时间内登录系统,系统会强制要求你必须要修改密码才可以登录使用系统,但是如果在该宽限时间内没有登录系统,没有修改密码,name密码将会失效,账号再也无法使用该密码登录了;
- 账号失效日期,是指该账号在此字段规定的日期之后再也无法使用了;
- 最后一个字段是保留字段;
1.3详解用户组配置文件/etc/group
该文件结构相对简单,包含四个字段:
- 用户组名称;
- 用户组密码,一般不设置,提供给用户组管理原使用,同样的该密码存放在用户组密码文件中:/etc/gshadow;
- GID,用户组ID,与etc/passwd文件中的第四哥字段相对应;
- 用户组支持的账号名称,一个账号可以加入多个多个用户组,那某个账号想要加入此用户组时,将该字段填入该账号就可以了;
1.4 有效用户组与初始用户组
我们知道一个用户可以属于多个用户组,在读取写入执行文件时,只要是用户组支持的,用户都可以拥有,在我们初次登录系统时,初始的用户组是在/etc/passwd文件中指定的。但是当我们新建一个文件时,文件的用户组属性是哪一个呢?这得看当下的有效用户组。
groups:用户支持的所有用户组查询
第一个输出的即为有效用户组,那么用户新建的文件的用户组属性值就是该用户组。
有效用户组的切换
/对于用户所支持的用户组,可以在其间切换有效用户组:
newgrp 想要切换到的用户组名
注意切换的用户组是以另外一个shell来提供这个功能,新的shell给予用户切换后的有效用户组;如果想回到原来的shell,可以使用exit指令。
1.5 详解用户组密码文件/etc/gshadow
在/etc/group文件中我们有讲到用户组密码一般不设置,仅提供给用户组管理员使用,查看该文件的内容我们发现该文件的结构基本与/etc/group文件相同:
- 用户组名;
- 密码列,开头为!表示五合法密码,所以无用户组管理员;
- 用户组管理员账号;
- 该用户组所属账号
该文件的主要功能是穿件用户组管理员,所谓用户组管理员就是用户想要加入某些用户组时,可以不通过root用户,通过用户组管理员将用户加入到其管理的用户组中,可以免去root的忙碌。
2.用户的增删改
2.1 useradd新增用户
useradd [-u UID] [-g 初始用户组] [-G 次要用户组] [-mM] [-c说明栏] [-d 主文件夹绝对路径]
[-s shell指定shell,未指定则设为/bin/bash] 用户账号名
其他相关参数:
- -e:后接日期,格式为YYYY-MM-DD,此选项写入shadow文档的第八项,表示账号的失效日期;
- -f:后接shadow的第七字段,指定密码是否会失效,0为立刻失效,-1表示永远不失效(密码只会过期而强制于登录时重新设置而已)
- -r:创建一个系统账号;该账号对UID有限制0-500;
- -m:强制创建用户主文件夹;
- -M:强制不创建用户主文件夹;
通常我们不会使用这么复杂的方式添加新账户,而是使用以下简短的方式:
useradd 账号:创建新用户
系统会帮助我们修改相应的文件,添加一些信息:
- 在/etc/passwd文件中创建一行数据,我们知道该文件是记录账号的UID,GID,账号密码,主问价夹等信息的;
- 在/etc/shadow里面将账号密码的相关参数填入,但是尚未有密码;
- 在/etc/group里面加入一个与账号名称一模一样的组名;
- 在/home目录下添加一个与账号同名的子目录作为用户主文件夹,且权限为700;
使用useradd -r 指令添加系统用户时不会创建用户的主文件夹,且用户与用户组的UID和GID都小于500;
2.2 useradd的参考文件(基本账号设置值)
如图所示,这是小主新建自己的用户后的主文件夹:
不论是用户默认使用的shell,还是用户主文件夹下的文件都是有参考来源的,这就涉及到useradd参考文件。可以使用以下指令显示出来:
useradd -D
- GROUP=100:新建账号的初始用户组使用GID为100者,GID为100 指的是users这个用户组;但是值得注意的是针对用户组有两种不同的机制:私有用户组机制,该机制下,新建用户时会创建一个与用户名相同用户组;另一种机制是指公共用户组机制,这种机制就是以GROUP=100这个设置值作为新建账号的初始用户组。使用私有用户组机制会更具有安全性,因为用户都有自己的用户组,主文件夹权限也会设置为700,代表的版本有RHEL,FEDORA,CentOS。小主的云主机使用的是CentOS系统,所以上图的设置不会生效。
- 第二行就不做过多解释,指的是用户的主文件夹存放目录;
- 第三行inactive是指密码过期后多久会失效,也就是密码过期后多久时间内还可以使用旧密码登录,0代表密码过期立马失效,-1表示密码永远不会失效,数字则表示相应天数后才会失效;
- EXPIRE是指账号失效的日期;
- SHELL:默认使用的shell程序文件名;
- SKEL:用户主文件夹参考基准目录,上图中小主的主文件夹下的文件就是从这个目录中去拷贝的;
- 最后一行是指是否创建用户的mailbox邮箱;
这些数据其实都是由/etc/default/useradd调用出来的
2.3 其他相关账号设置值
shadow文件的参考数据从哪里来呢?/etc/login.defs文件提供了相关的参考内容,关于密码更改天数PASS_MAX_DAYS;关于多久不可以重新修改密码天数PASS_MIN_DAYS ;
关于密码的最短字符长度PASS_MIN_LEN;关于过期前会警告的天数PASS_WARN_AGE ;还有关于用户与用户组ID设定的参考数据在此不做详细说明;
通过以上几节我们可以看到,在使用useradd创建用户时会参考:/etc/default/useradd;/etc/login.defs;/etc/skel/*;
2.4 passwd为新增用户设置密码
使用useradd命令新建用户后,该账号是被锁定的,只有设置完密码之后才能才能使用新账号,给新账号设置密码使用命令:
passwd 账号名;设置用户密码;
passwd指令后不接账号名时表示设置当前用户的密码,注意root用户可以设置所有用户的密码,一般用户得看用户是否具有权限。一般账号在更改密码时需要先输入自己的旧密码,然后再输入新密码。但是使用root用户重置其他用户的密码时不需要输入旧密码就可以重置。
passwd命令还有一些参数:
- -l:时lock的意思,会将/etc/shadow第二列最前面加上!使密码失效;
- -u:与-l相对,是Unlock的意思;
- -S:列出密码相关信息;
- -n:后面接天数,shadow的第四个字段,多久不可修改密码天数;
- -x:后面接天数,shadow的第五哥字段,多久内必须要改动密码;
- -w:后面接天数,shadow的第六个字段,密码过期前的警告天数;
- -i:后面接日期,shadow的第七哥字段,密码失效日期;
- –stdin:可以通过来自前一个管道的数据,作为密码输入,echo “abcd123” | passwd --stdin 用户名,直接将abcd123作为用户的密码;
2.5 用户数据修改usermod
新增用户,设置了相关的参数,可能后期会想要进行修改,除了去修改对应的文档,还可以使用usermod指令去修改一些参数:
usermod [-cdegGlsuLU] username
- -c:后接账号说明,/etc/passwd的第五列,可以加入一些账号的说明;
- -d:后面接账号的主文件夹,/etc/passwd文件的第六列;
- -e:后面接日期,/etc/shadow的第八个字段数据;
- -f:后面接天数,为shadow的第七个字段;
- -g:后面接初始用户组;
- -G:后面接次要用户组;
- -a:与-G组合使用增加次要用户组的支持而非设置;
- -l:后面接账号名称,即是修改账号名称,/etc/passwd的第一列
- -s:后面接shell的实际文件;
- -u:后面接UID数字,即/etc/passwd第三列的数据;
- -L:暂时将用户的密码冻结,让其无法登录;
- -U:将/etc/shadow密码列的!去掉,也就是将账号密码冻结解除;
2.6 删除用户userdel
这个指令就比较简单,顾名思义就是删除用户的相关数据:用户账号/密码相关参数:/etc/passwd,/etc/shadow;用户组相关参数:/etc/group,/etc/gshadow;用户个人文件数据:/home/username,/var/spool/mail/username…
userdel [-r] username :连同用户的主文件夹也一起删除;
注意,这样删除用户相关文件可能不全面,可以使用find / -user username 查找出整个系统内属于用户的文件,再进行删除。
3.普通用户常用的账号数据更改与查询命令
useradd,usermod,userdel都是系统管理员能够使用的命令,那么一般用户有什么办法查看与更改用户相关数据?可以使用以下这些指令:
3.1finger
手指,指纹,该指令可以查看很多用户相关信息,大部分是/etc/passwd文件中的账户信息;
finger -s username :仅列出用户的账号,全名,终端机代号与登录时间;
finger -m username:列出与后面的账号相同者,而不是利用部分对比;
在小组的云主机中查找该命令并没有找到,无法执行该指令,需要下载安装:
安装完该指令后,可以查看账户信息:
文件中的参数相对好理解:login是指登录的用户名,name是指用户说明,Directory是指用户主文件夹目录;最近登录时间;no mail 是调查/var/spool/mail信箱数据后的结果;no plan是调查~用户名/.plan文件,并将结果取出来说明;注意后两项的显示与用户自己的权限有关,A用户作为B用户的其他人,不一定能够查看到B用户的相关文档,与B用户相关文档的具体权限有关!
3.2 chfn
相当于是change finger;finger是查看用户的一些信息,那么该指令就是修改用户的一些信息,相当于是修改个人属性(想要呈现的全名,办公号码等相关信息),一般都使用不到:
3.3 chsh
change shell,更改指定的shell:
-l:列出目前系统上面可用的shell,实际就是/etc/shells的内容;
-s:设置修改自己的shell;
在讲到bash的时候我们将具体来讲讲shell。
3.4 id
该命令可以查看某人或者自己相关的UID和GID等信息;可以用来判定是否存在某个账号:
id username
4.用户组的增删改
用户组的信息与/etc/group,/etc/gshadow两个文件有关,用户组的增删该其实就是针对这两个文件的增删改。
4.1用户组的增加groupadd
groupadd [-g gid] [-r ]用户名
- -g:后面接某个特定的GID,用来直接给用户组配置GID;
- -r:新建系统用户组,与/etc/login.defs内的GID_MIN有关
4.2用户组相关信息的修改groupmod
groupmod [-g gid] [-n group_name] 用户组名
参数:
-g:修改既有的GID数字
-n:修改既有的组名;
4.3删除用户组groupdel
groupdel groupname
只有某个用户组不是用户的初始用户组时才能被删除,也就是说要删除某个用户组,必须确认/etc/passwd内的账号没有任何人使用用户组作为初始用户组。
4.4用户组管理员功能
通过用户组管理员可以实现往某个用户组中添加删除用户,而不用麻烦忙碌的root用户。
系统管理云=员使用该指令的操作:
gpasswd groupname:给用户组一个密码;
gpasswd [-A user1] groupname:将用户组的管理权限交给user1;
glasswd -M user2,user3... groupname:将用户user2,user3添加到用户组中;
gpasswd [-rR]将用户组的密码删除或者让其密码栏失效;
用户组管理员使用该指令的操作:
gpasswd -a username groupname:添加用户到某个用户组;
gpasswd -d: username groupname:删除用户组的某个用户;