修复 Chown 灾难后的 Sudo 错误 | AI生成和翻译

Home 2026.02

Question: 我运行了 sudo chown -R $USER:$(id -gn) $(npm -g config get prefix),而 prefix 是 /usr/,这导致许多系统文件(包括 /usr/bin/sudo)的所有权被更改,现在 sudo 提示 “sudo must be owned by uid 0” 且无法工作。我该如何修复?

Answer:

你的系统目前处于 非常危险的状态 —— /usr/ 目录下的许多关键系统文件可能都被你的普通用户而非 root 所有。
目前最重要的文件是 /usr/bin/sudo(取决于发行版,有时是 /bin/sudo/usr/local/bin/sudo)。

以下是现实的修复方案,按从最安全到最极端排序:

Option 1 – 最佳机会(如果你仍有任何可用的 root 访问权限)

任何仍能提供 root 权限的方法(即使是暂时的):

Option 2 – 快速修复(如果你只需要恢复 sudo 且能承担风险)

如果你的 pkexec (PolicyKit) 仍然可以工作(在 Ubuntu/Debian 上很常见):

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

或者如果你有其他类似 sudo 的工具仍可工作:

Option 3 – 终极方案(最后手段)

如果 没有任何办法 再获得 root 权限:

  1. 启动 live USB
  2. 挂载根分区
  3. 从 live 系统中复制一个已知正常的 sudo 二进制文件:
sudo cp /usr/bin/sudo /mnt/root/usr/bin/sudo
sudo chown root:root /mnt/root/usr/bin/sudo
sudo chmod 4755      /mnt/root/usr/bin/sudo

这通常有效,因为 live USB 的 sudo 通常是相同的版本。

Summary – 大多数人使用的最快现实恢复路径

  1. 启动 Ubuntu live USB(尽可能与你系统的版本一致)
  2. 挂载你损坏的系统
  3. chroot 进入
  4. 修复 sudo 权限
  5. 重启并祈祷系统的其余部分仍能启动

许多遇到这种情况的人最终会选择 重装系统,因为对 /usr/ 执行 chown -R 造成的损害通常过于广泛(损坏的软件包、缺失的库文件等)。

千万不要 对从 npm config get prefix 获取的任何路径运行 chown/chmod -R,除非你 100% 确定它指向哪个文件夹。

References:


Back Donate