背景

我不知道脑子出啥问题了,我命令了:

1
sudo chmod -R 777 /usr

导致/usr/local/sudo命令和/usr/local/su命令都不能使用了。

看到网上的解决办法都是只有其中一种问题,例如:报错:

1
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

本来就应该su root,然后

1
chown root:root /usr/bin/sudo

之后:

1
chmod 4755 /usr/bin/sudo

最后重启,完美解决。

可是我第一步就完蛋了,我运行:su root时出现问题:

1
su: Authentication failure

查了之后说要执行sudo passwd root给 root 设置密码。但是我不能用 sudo 啊。而且我是使用过 su 的,密码我也记得。

解决过程

根据报错:sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set

sudo 的用户属组要属于 uid 0,即 root 用户;同时 sudo 要设置 setuid 位。我首先查询了一下我系统中 sudo 的信息:

1
ls /usr/bin/sudo

结果为:

1
-rwxrwxrwx  1 root root      215944 Feb 14  2022  sudo*

是 root 用户。

那么就要设置 setuid 位:

1
2
3
chmod 4755 /usr/bin/sudo
或者
chmod u+s /usr/bin/sudo

可是我没法用sudo啊,这咋改啊。

没有办法了,只能进入恢复模式 recovery mode。

恢复模式

进入恢复模式:

选择 Advanced options for Ubuntu,按下[Enter]进入,选择 recovery mode,不要按下回车键。

按 E 进入到编辑界面,按向下键找到 到 linux /boot/vmlinuz-……. ro recovery nomodeset 所在行,将“ro recovery nomodeset”替换为“quiet splash rw init=/bin/bash”,按下[F10]或者[Ctrl+x]重启系统。

重启以后进入到这个页面,向下键选择 root 回车。

但是我还是糟糕啊,完蛋孩子。再尝试一会儿决定重装(删除虚拟机后新建)😭

长记性啊,可千万不能 chmod -R 777 啊

你以为我能解决啊,我也想解决啊 😅