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. 典型排错场景与处理(含命令与预期)#

  1. 用户无法登录
# 检查 /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

  1. 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 {} \;
  1. 组权限异常
# 主组不匹配
getent passwd testuser | awk -F: '{print $4}'
getent group 1001

# 补充附加组
sudo usermod -aG wheel testuser
  1. 文件损坏或误编辑
# 校验文件完整性
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,优先使用 passwdusermodchage
  • 备份关键文件:
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 用户
  • pwckgrpck
  • ls -l /etc/passwd /etc/shadow /etc/group

7. 练习题(含目标与验证)#

  1. 练习:创建受限登录用户
    - 目标:创建 appuser,禁止交互登录
sudo useradd -m -s /sbin/nologin appuser
getent passwd appuser
  • 验证:Shell 应为 /sbin/nologin
  1. 练习:设置密码 90 天过期
sudo chage -M 90 -W 7 appuser
chage -l appuser
  • 验证:最大密码天数为 90,警告天数为 7
  1. 练习:修复组成员缺失
    - 目标:将 appuser 加入 wheel
sudo usermod -aG wheel appuser
getent group wheel
  • 验证:wheel 组成员包含 appuser