背景

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

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 啊

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