第5章 用户与用户组管理
📝 Linux学习笔记 - 第5章 🎯 共4节
本章目录
用户配置文件
用户信息文件 /etc/passwd
文件格式:
用户名:密码标识:UID:GID:用户说明:家目录:登录之后的Shell
| 字段 | 说明 |
|---|---|
| 用户名 | 用户登录系统时使用的用户名 |
| 密码标识 | x代表真正的密码存放在/etc/shadow中 |
| UID | 用户ID |
| GID | 用户初始组ID |
| 用户说明 | 用户的描述信息 |
| 家目录 | 用户登录后的默认目录 |
| 登录Shell | 用户登录后使用的Shell |
UID范围:
- 0:超级用户(root)
- 1-499:系统用户(伪用户)
- 500-65535:普通用户
影子文件 /etc/shadow
文件格式:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码到期前警告天数:密码过期后宽限天数:账号失效时间:保留
| 字段 | 说明 |
|---|---|
| 用户名 | 与/etc/passwd对应 |
| 加密密码 | SHA512加密,!!或*代表无密码不能登录 |
| 最后一次修改时间 | 从1970年1月1日算起的天数 |
| 最小修改时间间隔 | 两次修改密码的最小间隔天数 |
| 密码有效期 | 密码多少天后必须修改 |
| 密码到期前警告天数 | 到期前几天开始警告 |
| 密码过期后宽限天数 | 过期后还能用几天 |
| 账号失效时间 | 账号过期日期 |
| 保留 | 保留字段 |
时间戳换算:
date -d "1970-01-01 16066 days"
# 把时间戳换算为日期
echo $(( $(date +%s)/86400 + 1 ))
# 把日期换算为时间戳组信息文件 /etc/group
文件格式:
组名:组密码标识:GID:组中附加用户
| 字段 | 说明 |
|---|---|
| 组名 | 组的名称 |
| 组密码标识 | x代表密码存放在/etc/gshadow |
| GID | 组ID |
| 组中附加用户 | 以此组为附加组的用户列表 |
组密码文件 /etc/gshadow
文件格式:
组名:组密码:组管理员用户名:组中附加用户
用户管理相关文件
用户的家目录
- 普通用户:
/home/用户名/,所有者和所属组都是此用户,权限是700 - 超级用户:
/root/,所有者和所属组都是root用户,权限是550
普通用户更改为root权限:
vi /etc/passwd
# 编辑用户密码文件,修改第3字段用户ID(UID)为0
# 注意:是修改UID,不是GID用户模板目录
/etc/skel/
可以创建一个文本如警告信息等,之后每创建一个用户自动复制警告信息文件到该用户的家目录。
用户的邮箱
/var/spool/mail/用户名/
用户管理命令
查看用户ID
id 用户名useradd 用户添加命令
useradd [选项] 用户名| 选项 | 说明 |
|---|---|
| -u UID | 手工指定用户的UID号 |
| -d 家目录 | 手工指定用户的家目录,不推荐手工创建 |
| -c 用户说明 | 手工指定用户的说明 |
| -g 组名 | 手工指定用户的初始组 |
| -G 组名 | 指定用户的附加组,多组用,分隔 |
| -s shell | 手工指定用户的登录shell,默认是/bin/bash |
示例:
useradd user1
# 添加用户
useradd -u 666 -G root,bin -d /home/shijie -c "test user" -s /bin/bash shijie
# 创建UID为666,添加到root,bin用户组,创建/home/shijie家目录,添加说明,默认shell的shijie用户useradd执行后系统操作
当键入useradd命令后系统所做的操作:
- 在
/etc/passwd中添加用户信息 - 在
/etc/shadow中添加密码信息 - 在
/etc/group中添加用户组 - 在
/etc/gshadow中添加组密码信息 - 创建用户家目录
- 创建用户邮箱
用户默认值文件
/etc/default/useradd
vi /etc/default/useradd| 配置项 | 说明 |
|---|---|
| GROUP=100 | 用户默认组 |
| HOME=/home | 用户家目录 |
| INACTIVE=-1 | 密码过期宽限天数(shadow文件7字段) |
| EXPIRE= | 密码失效时间(shadow文件8字段) |
| SHELL=/bin/bash | 默认shell |
| SKEL=/etc/skel | 模板目录 |
| CREATE_MAIL_SPOOL=yes | 是否建立邮箱 |
/etc/login.defs
vi /etc/login.defs| 配置项 | 说明 |
|---|---|
| PASS_MAX_DAYS 99999 | 密码有效期(5) |
| PASS_MIN_DAYS 0 | 密码修改间隔(4) |
| PASS_MIN_LEN 5 | 密码最小5位(PAM) |
| PASS_WARN_AGE 7 | 密码到期警告(6) |
| UID_MIN 500 | 最小和最大UID范围 |
| GID_MAX 60000 | |
| ENCRYPT_METHOD SHA512 | 加密模式 |
passwd 修改用户密码
root用户修改密码
passwd [选项] 用户名| 选项 | 说明 |
|---|---|
| -S | 查询用户密码的密码状态,仅root用户可用 |
| -l | 暂时锁定用户。仅root用户可用 |
| -u | 解锁用户。仅root用户可用 |
| —stdin | 可以通过管道符输出的数据作为用户的密码 |
示例:
passwd -S lamp
# 查看密码状态
# 输出示例:lamp PS 2013-01-06 0 99999 7 -1
# 用户名 密码设定时间 密码修改间隔时间 密码有效期 警告时间 密码不失效
passwd -l user1
# 锁定用户user1
# 系统实际上在shadow文件中的user1账户后加 !!(双感叹)
passwd -u user1
# 解锁用户
echo "123" | passwd --stdin lamp
# 使用字符串作为用户的密码💡 可以直接编辑/etc/shadow文件,在需要锁定的用户后加!!(双感叹),解除锁定直接删除!!即可
普通用户修改自己的密码
passwd
# 在当前用户直接输入passwd即可usermod 修改用户信息
usermod [选项] 用户名| 选项 | 说明 |
|---|---|
| -u UID | 修改用户的UID号 |
| -c 用户说明 | 修改用户的说明信息 |
| -G 组名 | 修改用户的附加组 |
| -L | 临时锁定用户(Lock) |
| -U | 解锁用户锁定(Unlock) |
示例:
usermod -c "test user" lamp
# 修改用户的说明
usermod -G root lamp
# 把lamp用户加入root组
usermod -L lamp
# 锁定用户
usermod -U lamp
# 解锁用户chage 修改用户密码状态
chage [选项] 用户名| 选项 | 说明 |
|---|---|
| -l | 列出用户的详细密码状态 |
| -d 日期 | 修改密码最后一次更改日期(shadow3字段) |
| -m 天数 | 两次密码修改间隔(4字段) |
| -M 天数 | 密码有效期(5字段) |
| -W 天数 | 密码过期前警告天数(6字段) |
| -I 天数 | 密码过后宽限天数(7字段) |
| -E 日期 | 账号失效时间(8字段) |
示例:
chage -d 0 lamp
# 把密码修改日期归0了(shadow第3字段)
# 这样用户一登陆就要修改密码userdel 删除用户
userdel [-r] 用户名| 选项 | 说明 |
|---|---|
| -r | 删除用户的同时删除用户家目录 |
手工删除用户:
vi /etc/passwd
vi /etc/shadow
vi /etc/group
vi /etc/gshadow
rm -rf /var/spool/mail/lamp
rm -rf /home/lamp/su 用户切换命令
su [选项] 用户名| 选项 | 说明 |
|---|---|
| - | 选项只使用”-“代表连带用户的环境变量一起切换 |
| -c | 仅执行一次命令,而不切换用户身份 |
示例:
su - root
# 普通用户若要完全切换到root,选项的 - 一定不能省
# 否则环境变量等不会改变
# root切换到普通用户则不需要
env
# 查看账户环境变量
su - root -c "useradd user3"
# 不切换成root,但是执行useradd命令添加user3用户用户组管理命令
groupadd 添加用户组
groupadd [选项] 组名| 选项 | 说明 |
|---|---|
| -g GID | 指定组ID |
示例:
groupadd tg
# 创建tg组groupmod 修改用户组
groupmod [选项] 组名| 选项 | 说明 |
|---|---|
| -g GID | 修改组ID |
| -n 新组名 | 修改组名 |
示例:
groupmod -n newtg tg
# 把tg组名改为newtggroupdel 删除用户组
groupdel 组名⚠️ 注意:要删除的组不能是初始组,只能是附加组
gpasswd 把用户添加入组或从组中删除
gpasswd [选项] 组名| 选项 | 说明 |
|---|---|
| -a 用户名 | 把用户加入组 |
| -d 用户名 | 把用户从组中删除 |
示例:
gpasswd -a user tg
# 把user用户加入tg组
gpasswd -d user tg
# 把user用户从tg组中删除