登录流程
在你输入账号和密码后,系统会:
- 先找寻/etc/passwd里面是否有你输入的账号,没有就跳出,有就查看该账号对应的UID和GID
- (在/etc/group)读出来,另外将家目录和shell设定也读出
- 进入/etc/shadow里面核对密码
- 如果一切OK,进入shell管控的阶段
/etc/passwd结构
- 账号名称,就是用户名
- 密码,早期有,现在没有了,只显示一个x
- UID,0是超级管理员的UID,1999是系统账户,100060000是给普通用户用的
- GID,组的ID
- 用户信息说明栏,就相当于注释
- 家目录
- Shell,在登入系统后就是使用该Shell. Shell有bash,ch,sh等等
/etc/shadow结构
- 账号名称,就是用户名
- 密码,但该密码是加了密的。 在该字段前加!或*改变密码字段长度,会让密码暂时失效 。查询密码加密机制(Ubuntu不行):authconfig --test | grep hashing
- 最近更改密码的日期,以1970/1/1作为1开始算起
- 密码不可被更改的天数(与第三字段相比)。表示该账号在最近一次被更改(第三字段)要经过几天 才 能更改。如果该字段为0表示没有限制,随时可更改。10表示十天后才能在次更改
- 密码需要重新变更的天数(与第三字段相比)。该字段是在这个天数之内 必须 变更一次密码。如果设为99999表示没有强制之意。如果设定为10,表示在10天内必须更改一次密码, 否则这个账户的密码将会变成过期特性
- 密码需要变更期限前的警告天数(与第五字段相比)。当密码有限期快要到的时候,系统会依据这个设定,发出警告提醒该用户尽快去修改密码
- 密码过期后的账号宽限日期(与第五字段相比)。密码有效期=变更日期(第三字段)+ 重新变更日期(第五字段),过了该期限用户仍然可以登入系统。但如果密码过期了,当你登入系统时,会强制你更改密码才能登入
- 账号失效日期(1970/1/1开始)。不管密码是否过期,该账号都不能使用了
- 保留字段。看以后有没有新功能加入
/etc/group
- 组名
- 组名密码,现在也没有了,只显示一个x。组名密码移到了/etc/gshadow里面
- GID,组的ID
- 该群组支持的账号名称。也就是那些用户是该组的成员
/etc/gshadow
- 组名
- 密码栏,开头为!表示无合法密码,所以无群组管理员
- 群组管理员的账号
- 有加入群组支持到所属账号
有效群组和初始群组
- 初始群组:在用户登入系统立刻等到该组的权限,/etc/group下的第三个字段
- 有效群组:作用就是创文件是该文件的所属群组是谁
- groups: 查看当前用户支持的群组
- newgrp + 群组: 有效群组的切换,这样你创建文件时该文件的所属群组就是你修改的群组了。 该命令是在子shell里执行的
账号管理的相关命令
useradd [-u UID] [-g 初始群组] [-G 次要群组] [-mM] [-c 说明] [-d 家目录绝对路径] [-s shell] [-e 失效时期]使用者账号
- -m 强制建立家目录
- -M 强制不建立家目录
- -f 过期宽限日期,,0为立刻失效,-1为永不失效
- -r 建立系统账号
- -D , 显示useradd配置文件(/etc/default/useradd)里面的默认值
- GROUP=100 , 预设的群组
- HOME=/home, 默认家目录所在目录
- INACTION=-1 , 密码失效日
- EXPIRE= , 账号失效日
- SHELL=/bin/bash , 预设的shell
- CKEL=/etc/skel , 使用家目录下面的内容数据参考目录
- CREATE_MAIL_SPOOL=yes, 是否主动为用户建立邮件邮箱
- /etc/login.defs文件还有一些其他默认值
passwd [-l] [-u] [–stdin] [-S] [-n 日数] [-x 日数] [-w 日数] [-i 日数] 账号
- -l , 上锁
- -u , 解锁
- -n + 天数, 多久不可修改
- -x + 天数, 多久内必须修改一次
- -w + 天数, 密码过期前的警告天数
- -i , 密码失效日期
- -S ,列出密码相关参数
- chage [-ldEImMW] 账号名
- -l , 列出该账号的详细参数
- -d , 接日期,修改 shadow 第三字段(最近一次更改密码的日期), 格式为YYYY-MM-DD
- -E , 接日期,修改shadow第八字段(账号失效日期),格式为YYYY-MM-DD
- -I ,后面接天数,修改shadow第七字段 (密码失效日期)
- -m , 后面接天数,修改shadow第四字段(密码多少天才能再次修改)
- -M , 后面接天数,修改shadow第五字段(密码多少天内至少要修改一次)
- -W , 后面接天数,修改shadow第六字段(在密码过期前多少天警告用户)
- usermod [-cdegGlsuLU] 用户名
- -c , 后面接账号的说明
- -d , 后面接家目录
- -e, 后面接日期,shadow里面第八字段,账号过期日期
- -f , 后面接天数,shadow第七字段,密码过期日期
- -g , 后面接初始群组
- -G , 后面接次要群组,表示修改次要群组
- -a , 与-G合用,表示增加次要群组
- -l , 后面接账号名称。修改账号名
- -s , 后面接shell的实际文件,如/bin/bash, /bin/sh等等
- -u , 后面接
- -L , 暂时将用户的密码冻结
- -U, 解冻
- id + 账号名, 列出账号相关的信息,包括UID,GID等等
- finger [-s] username
- -s , 列出用户的账号,全名,终端机代号,登入时间等
- chfn [-foph] 账号名 , 该修改的其实就是passwd的第五字段
- -f , 后面接完整的大名
- -o , 你办公室的房间号码
- -p , 办公室的电话号码
- -h , 家里的电话号码
- chsh [-ls]
- -l , 列出目前系统支持的shell,其实就是/etc/shells的内容
- -s , 设定修改自己的shell
群组相关的管理命令
- groupadd [-g gid] [-r] 组名
- -g , 后面接GID,用来给予某个GID
- -r ,建立系统群组。跟useradd一样的参数耶
- groupmod [-g gid] [-n group_name] 群组名
- -g 修改既有的GID数字
- -n 修改既有的组名。跟usermod参数一样
gpasswd [-A user1,…] [-M user3,…] [-rR] groupname
- -a , 将后面的用户加入群组
- -A , 设置后面的用户为群组管理员,可以有多个
- -M, 将后面的用户加入该群组,可以多个
- -d , 将后面的用户移除
- -r , 将groupname的密码移除
- -R , 让groupname的密码栏失效
- groupdel 组名。删除组