使用者标识符:UID(用户ID),GID(组id)
用户id信息存放在 etc/passwd
群组id信息 存放在 etc/group
口令表存放在 etc/shadow
当用户登陆时,其实并不是直接通过输入的账号来读取的,而是通过uid/gid/shadow相应的id
登陆过程如下:
1.先寻找 /etc/passwd
里面是否有你输入的账号,如果没有则跳出,如果有的话则将该账号对应的的UID与GID(在 /etc/group中)读出来,另外,该账号的家目录与shell配置也一并读出
2.再来则是核对口令表,这时 linux 会进入 /etc/shadow 里面找出对应的账号与
uid,然后核对一下你刚刚输入的口令与里面的口令是否相符
3.如果一切都对的话,就可以进入 shell 的阶段
/etc/passwd 文件结构
root:x:0:0:root:root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
lin3615:x:500:500:lin3615:/home/lin3615:/bin/bash
apache:x:48:48:Apache:/var/www:/sbin/nologin
mysql:x:27:27:Mysql Server:/var/lib/mysql:/bin/bash
..................
以上每一行代表一个账号,有几行就代表有几个账号在这个系统中,里面有好多账号是系统正常运行所必须的,我们简称为系统账号,例如:bin
其中root的那一行就是这个系统管理员了,可以看到是用
":"来分隔成七部分,解释如下:
root(1账号名称):x(2口令):0(3uid):0(4GID):root(5用户信息说明栏):root(6家目录):/bin/bash(7Shell)
1.账号名称:
就是账号,用来对应 UID,例如 root 的UID 对应的就是 0(第三字段)
2.口令
早期 Unix
系统的口令就是放在这字段上,但是因为这个文件的特性是所有的程序都能读取,为了安全性,因此后来就将这个字段的口令数据改放到
/etc/shadow 中去了,所以这里看到的是 "X"
3.UID
这个就是使用者的标识符了
其中里面的ID 范围有其特殊性
id:为0时,表示系统管理员
当在 (1-499)时表示是系统账号,当在(500-...)给一般使用者用
与 /etc/passwd 文件相关
4.GID
这个与 /etc/group有关,其实与/etc/passwd差不多,只是名字不同而已
5.用户信息说明栏
这个字段基本上是用来解释这个账号的意义而已
6.家目录
这个是用户的家目录,默认的用户家目录在 /home/用户名
7.shell:
这个就是一个shell 命令,并指定默认的 bash
/etc/shadow文件结构
这个保存着用户密码之类的信息,之前的密码是保存在 /etc/passwd
中的第二个字段,但是为了安全性,所以在 /etc/passwd 中的第二个字段值设为
"X",然后把密码等之类的存放在这个文件中
文件的内容形式如下:
root:$1$9asfdsfsdfsdfsfsdffa:16543:0:9999999:7:::
root(1账号名称):$1$9asfdsfsdfsdfsfsdffa(2口令):16543(3最近更动口令的日期)
:0(4口令不可被更动的天数):9999999(5口令需要重新变更的天数):7(6口令需要变更限前的警告天数)
:(7口令过期后的账号宽限时间):(8账号失效日期):(9保留字段)
用 ':'分成九段了,每一段如下:
1.账号名称
这个字段名称必须与 /etc/passwd 相同才行
2.口令
这个是加密后的口令字段值,当这个字段的长度改变后,该口令就会失效,所以很多软件透过这个功能,在此字段前加上
!或者是 * 改变口令字段长度,就会让口令暂时失效
3.最近更动口令的日期
这个字段记录了更动口令那天的日期,算法是从
1970/01/01那天到更新口令那一天的天数
4.口令不可被更动的天数
这个字段值表示在设置的天数内不能修改口令,如果为0,则表示没有限制
5.口令需要重新变更的天数
表示在这个指定的天数后,要改变口令才能使用
6.口令需要变更期限前的警告天数
当账号的口令限制期快到时,会根据这个设置值来提示警告修改口令
7.口令过期后的账号宽限时间(口令失效日)
当口令过期时,其实还可以登陆,但是必须在这个指定的天数内,不然就失效,无法登陆
8.账号失效日期
设置多少天后,这个账号失效,无法使用
9.保留字段
/etc/group 文件结构
这个文件就是记录GID与组名的对应关系
形式如下:
root:x:0:
lin3615:x:500:
以“:”分隔,共分为四栏
as:
root(1组名):x(2群组口令):0(3群组id):[4root可空](此群组支持的账号)
1.组名
就是组名
2.群组口令
通常不用配置,这个是给群组管理员使用,很少有必要配置,同样的,口令已经移动
/etc/gshadow去,所以此字段只会存在一个 "X"
3.gid
就是群组 ID了,我们/etc/passwd 第四个字段使用的 gid
对应的群组名,就是由这里对应出来的
4.此群组支持的账号名称
一个账号可以加入多个群组,那某个账号想要加入此群组,将该账号填入这个字段即可。如:我想把lin3615也加入root
这个群组,那么在第一行的最后加上 ",lin3615",不要有空格,使其成为
root:x:0:root,lin3615,此字段可为空,如果为空,则表示就是前面的组名
查看用户所在的组名:
groups