/etc/passwd是Linux用户管理体系的基石,不存密码但定义登录身份、UID/GID、家目录和Shell;必须严格7字段冒号分隔,权限为644 root:root,错误会导致登录失败或系统瘫痪。

/etc/passwd 是 Linux 用户管理体系的基石,它不存密码,但定义了每个用户能否登录、以谁的身份运行进程、家目录在哪、用什么 Shell——任何字段错位或格式损坏,都可能导致用户无法登录、服务启动失败,甚至系统瘫痪。
文件结构必须严格合规
每行 7 个冒号分隔字段,顺序固定不可调换:用户名:密码占位符:UID:GID:GECOS:家目录:Shell。常见错误包括:
- UID 或 GID 重复(如两个用户 UID=0),会引发权限混乱
- 家目录路径不存在或权限错误,导致用户登录后立即退出
- Shell 字段写成不存在的路径(如 /bin/bashs),登录时提示 “Login incorrect” 或直接断连
- GECOS 字段含未转义的冒号(如 Alice:Dev),会把一行切分成 8 段,破坏解析逻辑
权限与归属不能妥协
/etc/passwd 必须是 644 权限(-rw-r--r--)且属主属组均为 root。原因很实际:
- ls -l、ps、id 等命令依赖该文件将 UID 映射为用户名,若其他用户不可读,这些命令显示数字 ID 而非名称,运维排查效率骤降
- 权限过松(如 664 或 755)允许非 root 修改,可能被提权利用;权限过严(如 600)则普通用户无法解析自身账户信息,影响 shell 初始化和 PAM 模块行为
- 用 stat -c "%a %U:%G" /etc/passwd 一键验证:输出应为 644 root:root
修复操作要可控、可回溯
一旦发现异常,优先用备份恢复,而非手动重写:
- 系统通常自带备份,如 /etc/passwd-(useradd/usermod 自动创建)或 /etc/passwd.bak
- 进入单用户模式后,先执行 mount -o remount,rw / 确保可写,再 cp /etc/passwd- /etc/passwd
- 无备份时,至少保留原始文件副本:cp /etc/passwd /etc/passwd.corrupted.$(date +%s)
- 切勿用 vim/nano 直接编辑——意外中断可能留下 .swp 文件或截断内容;推荐用 sed -i 做最小化替换,或用 usermod 等专用命令间接修改
日常防护比事后抢救更重要
把风险挡在发生前:
- 将 stat -c "%a %U:%G" /etc/passwd 加入每日巡检脚本,异常时发告警
- 禁止普通用户拥有 sudo 权限去编辑该文件;所有用户增删改统一走 useradd/usermod/userdel
- 启用 auditd 监控文件变更:aureport -f /etc/passwd 可追溯谁、何时、做了什么修改
- 配置文件管理工具(如 Ansible)部署时,校验 md5sum 并自动还原基线


















