当前位置: 首页 > news >正文

Linux命令-pwck(检查 /etc/passwd 和 /etc/shadow 完整性)

Linux命令-pwck(检查 /etc/passwd 和 /etc/shadow 完整性)

    • 快速参考
    • 命令语法
    • 常用选项
    • 检查项目
    • 实战示例
      • 1. 基础检查
      • 2. 只读检查
      • 3. 检查特定用户文件副本
      • 4. 手动检查 vs pwck
      • 5. 安全审计
    • 发行版差异
    • 相关命令
    • 总结

快速参考

pwck(Password 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 user'alice':directory'/home/alice'does not exist user'bob':directory'/nonexistent/path'does not exist user'carol':program'/bin/false'is 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 通常不在此列表中# 它们是合法的"禁止登录"Shell,pwck 可能误报

2. 只读检查

# 只读模式(推荐!不修改文件,只报告问题)$sudopwck-ruser'test':directory'/home/test'does not exist invalid passwordfileentry delete line'test: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 user'nobody':directory'/nonexistent'does not exist user'systemd-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/shells

4. 手动检查 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;thenecho"Shell not in /etc/shells:$shell"fidone# 检查主目录是否存在$awk-F:'{print $6}'/etc/passwd|sort-u|whilereaddir;doif["$dir"!="/"]&&[!-d"$dir"];thenecho"Directory missing:$dir"fidone# 可以封装为自定义检查脚本$cat>/usr/local/bin/passwd_check.sh<<'SCRIPT' #!/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$chmod+x /usr/local/bin/passwd_check.sh

5. 安全审计

# 检查是否有未授权的 UID 0 账户(后门账户)$sudopwck-r2>&1|grep"UID 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-integrity<<'SCRIPT' #!/bin/bash REPORT=$(sudo pwck -r -q 2>&1) if [ -n "$REPORT" ]; then echo "Subject: [SECURITY] /etc/passwd integrity warning" | \ sendmail -t admin@example.com echo "$REPORT" | sendmail -t admin@example.com fi SCRIPT$chmod+x /etc/cron.daily/passwd-integrity

发行版差异

发行版包名默认安装命令路径
Debian/Ubuntupasswd/usr/sbin/pwck
RHEL/CentOS/Fedorashadow-utils/usr/sbin/pwck
Arch Linuxshadow/usr/bin/pwck
Alpine Linuxshadow否 (apk add shadow)/usr/sbin/pwck

所有主流 Linux 发行版都提供了pwck,行为一致。

相关命令

命令功能
pwck检查/etc/passwd/etc/shadow
grpck检查/etc/group/etc/gshadow
pwconv从 passwd 创建 shadow(影子密码)
pwunconv从 shadow 恢复传统密码
vipw安全编辑/etc/passwd(锁定文件)
vigr安全编辑/etc/group

总结

pwck是系统账户数据库的"例行体检"工具。它帮助管理员在问题演变成安全漏洞或登录失败之前发现隐患:

  • 重复 UID → 权限混乱
  • 缺失主目录 → 用户无法登录或配置文件丢失
  • 无效 Shell → 用户无法正常使用
  • UID 0 多个 → 可能的安全事件

建议:在创建/删除用户后运行pwck -r验证,定期将pwck -r -q加入安全审计 cron 中。

http://www.cnnetsun.cn/news/3012227.html

相关文章:

  • N_m3u8DL-RE:跨平台流媒体下载工具,支持点播和直播
  • 2026软考系规备考:金钟老师是谁?为什么他适合带零基础?
  • Mac NTFS读写终极解决方案:Free-NTFS-for-Mac免费完整指南
  • 其实APP宣传成本最低的方式是:电子海报---POP广告
  • CryptoHack Writeup——Modular Exponentiation:理解RSA中的模幂运算
  • 鸿蒙 ArkUI 弹性填充布局实战:Row + Text + Spacer + IconButton 模式详解
  • 牛客发布招聘Agent,为企业招聘注入全新生产力
  • 连锁门店用钉钉,为什么建议你为专业版买单?
  • 2026年会议记录工具对比实测对比:办公选哪款,谁才是效率王者
  • Blueprints - UE5的Map键值对
  • 前列腺癌MRI多序列AI诊断:临床可解释模型实战解析
  • UTXO模型与账户模型深度对比:从现金交易到银行账户
  • 为什么淘宝图片下载工具用着用着就坏了?技术选型的真相
  • 免费开源工具WeChatMsg:3步完成微信聊天记录永久保存与深度分析
  • 上门按摩平台订单流失率居高不下?问题可能在运营方式上
  • 想找靠谱花槽工厂?这几家实力过硬口碑佳值得你关注
  • ENDO 2026 | 怡培生长激素基于IGF-1水平的剂量调整研究
  • 后端转Agent开发, 别上来就死嗑python
  • MSCI公布MSCI 2026年市场分类评审结果
  • 2026下半年甘肃省事业单位联考机构实战测评:真实体验对比
  • Lightroom Classic 2025安装教程(附安装包)RAW格式摄影修图软件配置图文教程
  • 企业级大模型接口集成避坑指南:超越价格战的工程化选型复盘
  • 安卓应用逆向工程实战:爱加密企业级加固脱壳与算法还原
  • 蓝速科技 AI 数字人选购避坑与实测指南
  • 37.零 BUG 通用模板!PLC 电机正反转切换延时、软硬件双重互锁代码
  • SQPCC算法局部收敛性分析:从互补约束优化到工程实践
  • 分层设计的记忆系统
  • 深度学习进阶(二十一)跨窗口的 RPE
  • GraalVM原生镜像构建实战:十分钟让你的Java应用启动速度快100倍
  • Windows平台FTP服务器搭建实战:从FileZilla Server配置到安全加固