<p>/etc/passwd- 是首选方案,因为它是 glibc 和 shadow-utils 在执行 useradd/usermod 等操作时自动创建的上一版本备份,权限为644、内容完整、无需人工干预且100%与上次成功修改一致;恢复必须用 cp -a 保留 SELinux 上下文、ACL 和扩展属性,否则可能导致 sshd 拒绝登录。</p>

直接用 /etc/passwd- 恢复,这是系统自带的、每次修改 passwd 时自动保留的上一版本备份,99% 的情况够用。
为什么 /etc/passwd- 是首选方案
Linux 系统(包括 Ubuntu、CentOS、Debian 等主流发行版)在调用 usermod、useradd、passwd 或任何修改 /etc/passwd 的工具时,会先将当前文件复制为 /etc/passwd- —— 这不是用户手动备份,而是 glibc 和 shadow-utils 的强制行为。它不依赖 cron、不依赖你是否记得备份,只要最近一次改过用户,它就存在。
- 该文件权限为
-rw-r--r--,root 可读写,普通用户不可修改 - 内容与上次成功保存的
/etc/passwd完全一致,含所有用户、UID、GID、shell、home 路径 - 不包含密码哈希(密码在
/etc/shadow,同理也有/etc/shadow-) - 若误删后系统仍能登录(比如你用 root 登录了),立刻执行恢复,零风险
恢复命令必须带 cp -a,不能只用 cp
直接 cp /etc/passwd- /etc/passwd 会丢掉关键元数据:SELinux 上下文(RHEL/CentOS)、ACL、扩展属性(如 immutable 标志)。一旦丢失,sshd 可能拒绝登录,或 su 失败。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 正确做法:
sudo cp -a /etc/passwd- /etc/passwd -
-a=-r --preserve=all,保留所有权、时间戳、权限、SELinux context、xattrs - 验证是否生效:
ls -lZ /etc/passwd(看 SELinux type 是否为etc_t)和getfattr -d /etc/passwd(确认无异常 xattr 丢失) - 如果提示
Operation not supported,说明目标文件系统不支持 xattrs(如挂载为 vfat),此时降级用cp -p,至少保权限+时间+owner
如果 /etc/passwd- 也不存在或太旧怎么办
只有两种可能:系统从未改过用户(极罕见),或该文件被你顺手删了/覆盖了。这时别碰磁盘,优先查其他本地备份源:
- 检查
/var/backups/:Ubuntu/Debian 默认每晚用logrotate备份/etc/passwd到/var/backups/passwd.*.gz,解压即可:zcat /var/backups/passwd.*.gz | sudo tee /etc/passwd - 检查
/boot/grub/或 LVM 快照:若启用了 LVM,运行sudo lvs -o +seg_monitor看是否有快照卷;若有,可从快照挂载后拷出原始文件 - 别用
extundelete或photorec扫描/etc:成功率低且易覆盖——/etc小而热,日志轮转、apt 更新随时写入,越等越没 - 最后手段:从另一台同版本同配置机器上复制
/etc/passwd基础结构(root、daemon、sys 等系统用户),再手动补上你自己的用户行(UID/GID/home/shell)
最常被忽略的一点:/etc/passwd- 不是“备份文件”,它是系统自我保护机制的一部分;但很多人删完 passwd 后第一反应是翻自己写的 backup 脚本,反而错过这个现成、可靠、零配置的恢复入口。

















