1.3.5 配置文件与排错(/etc/passwd、/etc/shadow、/etc/group)
配置文件与排错(/etc/passwd、/etc/shadow、/etc/group)#
1. 三个核心文件的作用与格式#
- /etc/passwd:用户账号基础信息,系统可读。
- 字段格式:
用户名:口令占位符:UID:GID:备注:家目录:登录Shell - /etc/shadow:加密密码与账户策略,仅 root 可读。
- 字段格式:
用户名:加密口令:最近修改日:最小天数:最大天数:警告天数:不活跃天数:过期日:保留 - /etc/group:组信息与成员列表。
- 字段格式:
组名:口令占位符:GID:成员
原理草图:用户与组信息关联
2. 关键字段说明与常见取值#
- UID/GID
- 0:root
- 1-999:系统用户/服务账户
- 1000+:普通用户
- 登录Shell
/bin/bash:可交互登录/sbin/nologin或/bin/false:禁止交互登录- shadow 字段中的日期
- 以 1970-01-01 起的天数表示,可通过
chage -l 用户查看
3. 文件查看与命令解释(完整示例)#
示例目标:查看用户记录、密码策略、组成员并解释关键字段
# 1) 查看用户记录
getent passwd testuser
# 输出示例:testuser:x:1001:1001:Test User:/home/testuser:/bin/bash
# 解释:用户名:口令占位符:UID:GID:备注:家目录:Shell
# 2) 查看 shadow(需 root)
sudo getent shadow testuser
# 输出示例:testuser:$6$...:19800:0:99999:7:::
# 解释:加密口令:最近修改日:最小/最大天数:警告天数:不活跃:过期日
# 3) 查看用户所属组
id testuser
# 输出示例:uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),10(wheel)
# 4) 查看组记录与成员
getent group wheel
# 输出示例:wheel:x:10:root,testuser
4. 典型排错场景与处理(含命令与预期)#
- 用户无法登录
# 检查 /etc/passwd 是否存在用户记录与 Shell
getent passwd testuser
# 检查 shadow 是否被锁定(以 ! 或 * 开头)
sudo getent shadow testuser
# 检查账号是否过期或策略限制
chage -l testuser
预期与处理:
- Shell 为 nologin:sudo usermod -s /bin/bash testuser
- 密码被锁:sudo passwd -u testuser
- 账户过期:sudo chage -E -1 testuser
- UID/GID 冲突
# 检测重复 UID
awk -F: '{print $3}' /etc/passwd | sort | uniq -d
# 检测重复 GID
awk -F: '{print $3}' /etc/group | sort | uniq -d
处理建议:
- 重新分配 UID/GID:sudo usermod -u 2001 testuser
- 同步文件属主(避免权限丢失):
sudo find / -xdev -user 1001 -exec chown -h 2001 {} \;
- 组权限异常
# 主组不匹配
getent passwd testuser | awk -F: '{print $4}'
getent group 1001
# 补充附加组
sudo usermod -aG wheel testuser
- 文件损坏或误编辑
# 校验文件完整性
sudo pwck
sudo grpck
# 使用系统自动备份恢复
sudo cp /etc/passwd- /etc/passwd
sudo cp /etc/shadow- /etc/shadow
sudo cp /etc/group- /etc/group
5. 安全与运维建议(含审计示例)#
- 严禁直接手动编辑
/etc/shadow,优先使用passwd、usermod、chage - 备份关键文件:
sudo cp /etc/passwd /etc/passwd.bak
sudo cp /etc/shadow /etc/shadow.bak
sudo cp /etc/group /etc/group.bak
- 账号规范审计:
# 空密码账号
sudo awk -F: '($2==""){print $1}' /etc/shadow
# 可交互登录的系统用户
awk -F: '($3<1000 && $7!~/nologin|false/){print $1,$7}' /etc/passwd
6. 快速排查清单#
getent passwd 用户、getent group 组名id 用户chage -l 用户pwck、grpckls -l /etc/passwd /etc/shadow /etc/group
7. 练习题(含目标与验证)#
- 练习:创建受限登录用户
- 目标:创建appuser,禁止交互登录
sudo useradd -m -s /sbin/nologin appuser
getent passwd appuser
- 验证:Shell 应为
/sbin/nologin
- 练习:设置密码 90 天过期
sudo chage -M 90 -W 7 appuser
chage -l appuser
- 验证:最大密码天数为 90,警告天数为 7
- 练习:修复组成员缺失
- 目标:将appuser加入wheel
sudo usermod -aG wheel appuser
getent group wheel
- 验证:wheel 组成员包含 appuser