Skip to content

System auth文件修复

可以,完全可行!

使用 init=/bin/sh (或 init=/bin/bash) 是另一种非常经典且有效的进入单用户/紧急模式的方法。它的原理是直接告诉内核:“跳过正常的 systemd 初始化流程,直接运行 /bin/sh 作为第一个进程”。

对于 Anolis OS 8.6,这种方法同样有效,但操作细节略有不同(主要是挂载和 SELinux 处理)。

以下是使用 init=/bin/sh 修复 Anolis OS 8.6 的具体步骤:

🚀 第一阶段:引导进入 Shell

  1. 重启并拦截 GRUB

    • 重启电脑/虚拟机。
    • 在 GRUB 菜单出现时,迅速按 e
  2. 修改引导参数

    • 找到以 linuxlinux16 开头的行。
    • 在该行末尾添加一个空格和以下参数:
      init=/bin/sh enforcing=0
      
    • 解释
      • init=/bin/sh:直接启动 Shell,不加载 systemd。
      • enforcing=0必须加。因为跳过了正常初始化,SELinux 上下文可能混乱,临时关闭它可避免权限报错。
  3. 启动

    • Ctrl + xF10
    • 系统会很快启动,直接给你一个 sh-5.0#bash-4.4# 的提示符。

🛠️ 第二阶段:手动挂载与修复 (关键区别)

注意:使用 rd.break 时,系统会自动帮你挂载好 /sysroot。但使用 init=/bin/sh 时,根文件系统通常是以“只读”方式挂载的,且没有挂载到标准位置,你需要手动挂载

请依次执行以下命令:

1. 重新挂载根目录为读写模式

这是最关键的一步。如果不执行,你无法保存修改。

mount -o remount,rw /
(注意:这里直接挂载 /,而不是 /sysroot,因为 init=/bin/sh 模式下 / 就是根目录)

2. 备份原文件

cp /etc/pam.d/system-auth /etc/pam.d/system-auth.bak.init-fix

3. 清理错误的 PAM 配置

执行以下两条 sed 命令删除错误行:

# 1. 删除单独以 unlock_time 开头的行
sed -i '/^unlock_time=300/d' /etc/pam.d/system-auth

# 2. 删除断裂的 auth 行
sed -i '/^auth required pam_faillock\.so.*preauth silent deny=5$/d' /etc/pam.d/system-auth

4. 验证修复

tail -n 15 /etc/pam.d/system-auth
确认末尾没有那两行奇怪的代码。

5. 标记 SELinux 重标 (非常重要)

因为你跳过了正常启动流程且修改了文件,必须让系统在下次正常启动时重标 SELinux。

touch /.autorelabel

6. 强制重启

由于 init=/bin/sh 跳过了 systemd,直接输入 reboot 命令可能会失效或报错。你需要强制重启:

  • 方法 A (推荐):如果是在虚拟机或云控制台,直接使用界面的“重启”按钮。
  • 方法 B (命令):尝试执行以下命令强制重启:
    exec /sbin/init
    
    或者
    reboot -f
    
    (如果 reboot 没反应,直接按虚拟机的重启键或物理机的重启键是最稳妥的)

⚖️ rd.break vs init=/bin/sh 对比

特性 rd.break (推荐) init=/bin/sh (备选)
挂载状态 自动挂载到 /sysroot (只读) 根目录 / 已挂载 (只读)
挂载命令 mount -o remount,rw /sysroot mount -o remount,rw /
Chroot 需要 chroot /sysroot 不需要 (直接在根环境)
环境变量 保留部分 dracut 环境 极简环境,变量很少
重启方式 exit 两次即可正常重启 可能需要强制重启 (reboot -f)
适用场景 RHEL/CentOS/Anolis 8+ 标准做法 通用 Linux,旧系统或 rd.break 失效时

💡 结论

你可以放心使用 init=/bin/sh

对于你的 Anolis OS 8.6 桌面版: 1. 它在操作上稍微简单一点点(不需要 chroot)。 2. 唯一要注意的坑是:一定要执行 mount -o remount,rw /,否则修改保存不了! 3. 一定要加 enforcing=0 和创建 /.autorelabel,否则重启后可能因为 SELinux 问题进不去图形界面。

只要记住了 mount -o remount,rw / 这一步,这两种方法效果是一样的。祝你修复成功!

☁️ 部署建议
如果你打算长期运行项目(博客 / API / 自动化脚本),建议直接用云服务器,会比本地稳定很多。
👉 查看云服务器(新用户优惠)