账号管理与群组

使用者标识符: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
原文地址:https://www.cnblogs.com/lin3615/p/4149780.html