Linux命令-pwck(检查 /etc/passwd 和 /etc/shadow 完整性) 📅 2026/6/26 4:08:45 Linux命令-pwck检查 /etc/passwd 和 /etc/shadow 完整性快速参考命令语法常用选项检查项目实战示例1. 基础检查2. 只读检查3. 检查特定用户文件副本4. 手动检查 vs pwck5. 安全审计发行版差异相关命令总结快速参考pwckPassword Check是一个系统完整性检查工具用于验证/etc/passwd和/etc/shadow文件的结构完整性。它会逐行检查用户名唯一性、UID/GID 合法性、主目录是否存在、Shell 是否有效等帮助管理员发现潜在的账户配置错误或安全漏洞。在 Linux 系统中/etc/passwd和/etc/shadow是认证体系的根基。pwck是你的账户数据库的健康检查——定期运行它可以在问题演变成安全事故之前发现隐患。命令语法pwck [选项] [passwd [shadow]]常用选项选项功能-r只读模式不修改文件-s排序模式按 UID 排序后检查-q安静模式减少输出-R在 chroot 环境中运行-h显示帮助检查项目pwck会验证以下内容检查项说明用户名唯一性不允许重复的用户名UID 唯一性不允许重复的 UID字段数量每行必须是冒号分隔的 7 个字段UID 合法性必须是数字且在合理范围内GID 合法性必须是数字且在合理范围内主目录存在性主目录路径必须存在Shell 有效性Shell 必须在/etc/shells中列出字段非空除密码字段外其他字段不应为空影子密码一致性passwd 与 shadow 中的用户名对应实战示例1. 基础检查# 检查当前系统需要 root 权限$sudopwck useralice:directory/home/alicedoes not exist userbob:directory/nonexistent/pathdoes not exist usercarol:program/bin/falseis notin/etc/shells pwck: no changes# 解读# alice: 主目录 /home/alice 不存在可能已被删除# bob: 主目录路径无效# carol: Shell 不在 /etc/shells 中可能是合法的服务账户# 查看 /etc/shells 中允许的 Shell$cat/etc/shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /bin/dash /usr/bin/dash /bin/zsh /usr/bin/zsh /usr/bin/fish# 注意/usr/sbin/nologin 和 /bin/false 通常不在此列表中# 它们是合法的禁止登录Shellpwck 可能误报2. 只读检查# 只读模式推荐不修改文件只报告问题$sudopwck-rusertest:directory/home/testdoes not exist invalid passwordfileentry delete linetest:x:2001:2001::/home/test:/bin/bash? No pwck: the files have been updated# 即使 -r 也会尝试修复# 安静模式$sudopwck-q# 只输出错误不输出正常行3. 检查特定用户文件副本# 备份当前的 passwd 和 shadow$sudocp/etc/passwd /tmp/passwd.test $sudocp/etc/shadow /tmp/shadow.test# 对副本进行检查不影响系统$sudopwck-r/tmp/passwd.test usernobody:directory/nonexistentdoes not exist usersystemd-coredump:directory/does not exist pwck: no changes# 修复创建缺失的主目录$sudomkdir-p/home/alice $sudochownalice:alice /home/alice# 修复更新 Shell 路径$sudousermod-s/usr/sbin/nologin carol# 或添加 Shell 到 /etc/shells$echo/usr/sbin/nologin|sudotee-a/etc/shells4. 手动检查 vs pwck# pwck 在做什么——我们可以手动实现类似检查# 检查重复用户名$cut-d:-f1/etc/passwd|sort|uniq-d# 检查重复 UID$cut-d:-f3/etc/passwd|sort|uniq-d# 检查字段不完整非 7 个字段$awk-F:NF ! 7 {print Line NR : $0}/etc/passwd# 检查 UID 非数字$awk-F:$3 !~ /^[0-9]$/ {print Invalid UID: $0}/etc/passwd# 检查 Shell 是否有效$awk-F:{print $7}/etc/passwd|sort-u|whilereadshell;doif!grep-qxF$shell/etc/shells2/dev/null;thenechoShell not in /etc/shells:$shellfidone# 检查主目录是否存在$awk-F:{print $6}/etc/passwd|sort-u|whilereaddir;doif[$dir!/][!-d$dir];thenechoDirectory missing:$dirfidone# 可以封装为自定义检查脚本$cat/usr/local/bin/passwd_check.shSCRIPT #!/bin/bash echo UID 冲突检查 cut -d: -f3 /etc/passwd | sort -n | uniq -d echo 用户名冲突检查 cut -d: -f1 /etc/passwd | sort | uniq -d echo 字段不完整检查 awk -F: NF ! 7 {print Line NR : $0} /etc/passwd echo 0 号 UID 检查除了 root awk -F: $3 0 $1 ! root {print $0} /etc/passwd echo 主目录缺失检查 while IFS: read -r user _ uid _ _ dir shell; do [ $dir / ] continue [ $dir ] continue [ -d $dir ] || echo $user: directory $dir missing done /etc/passwd SCRIPT$chmodx /usr/local/bin/passwd_check.sh5. 安全审计# 检查是否有未授权的 UID 0 账户后门账户$sudopwck-r21|grepUID 0$sudoawk-F:$3 0 {print $0}/etc/passwd root:x:0:0:root:/root:/bin/bash# 如果输出不止 root 一行立即检查是否是安全事件# 检查是否有空密码的账户$sudoawk-F:($2 || $2 !) $3 1000/etc/shadow# 检查是否有已过期但仍活跃的账户$sudochage-lalice# 定期检查的 cron 任务$cat/etc/cron.daily/passwd-integritySCRIPT #!/bin/bash REPORT$(sudo pwck -r -q 21) if [ -n $REPORT ]; then echo Subject: [SECURITY] /etc/passwd integrity warning | \ sendmail -t adminexample.com echo $REPORT | sendmail -t adminexample.com fi SCRIPT$chmodx /etc/cron.daily/passwd-integrity发行版差异发行版包名默认安装命令路径Debian/Ubuntupasswd是/usr/sbin/pwckRHEL/CentOS/Fedorashadow-utils是/usr/sbin/pwckArch Linuxshadow是/usr/bin/pwckAlpine Linuxshadow否 (apk add shadow)/usr/sbin/pwck所有主流 Linux 发行版都提供了pwck行为一致。相关命令命令功能pwck检查/etc/passwd和/etc/shadowgrpck检查/etc/group和/etc/gshadowpwconv从 passwd 创建 shadow影子密码pwunconv从 shadow 恢复传统密码vipw安全编辑/etc/passwd锁定文件vigr安全编辑/etc/group总结pwck是系统账户数据库的例行体检工具。它帮助管理员在问题演变成安全漏洞或登录失败之前发现隐患重复 UID → 权限混乱缺失主目录 → 用户无法登录或配置文件丢失无效 Shell → 用户无法正常使用UID 0 多个 → 可能的安全事件建议在创建/删除用户后运行pwck -r验证定期将pwck -r -q加入安全审计 cron 中。