问题描述
我意外地执行了以下命令
sudo chown [username] -hR /
现在sudo su
收到错误:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
如何解决这个问题?
最佳解决方案
备份数据并重新安装。
这可能看起来很极端,但这不仅仅是sudo
。您销毁了整个文件系统的权限结构。其他一些答案可以让sudo
工作,但忽略整个问题是邀请以后的灾难。
您可以尝试将所有者镜像到另一个安装,但有些情况(例如/var/
)高度依赖于您实际安装的内容。如果你想得到问题的规模,I’ve actually had a crack at helping somebody fix this sort of issue before。修复是手动的,长的,很容易让您的系统不安全或损坏。
挑选这个烂摊子要比干净安装花费更长的时间。
这有一些drive-bys来自那些不了解情况严重性的人。对他们来说,这看起来像是一堆不必要的工作,一个流氓管道工或机械师说要为了更大的工作而动摇你。
如果你只是更改了/usr/bin/sudo
的权限,那么只需修复它。但这个问题是关于整个系统的变化。每个文件(保存runtime-only文件)现在都归用户所有。用户运行的所有内容(例如浏览器,浏览器漏洞)都可以覆盖系统文件,监视您,提取任何数据。这需要纠正。按上述方法,这很难。最简单的方法是重新安装。
所以,请不要对此懒惰。文件系统权限有助于保护您的安全,修复它们。
次佳解决方案
正如您将在this answer on SO上看到的那样,这个问题并不像人们所做的那么难。我按照以下简单步骤重新启动了sudo
命令而无需重新安装:
-
以当前用户身份注销,然后以root用户身份重新登录。
-
执行
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
-
以root身份注销,然后以当前用户身份重新登录。
这样做可以比其他答案中推荐的”nuclear option”更快,更轻松。
如果未设置root密码,则可以在Recovery Mode中启动以进行设置。
第三种解决方案
-
通过在启动系统时按
Esc
进入恢复模式。 -
在进入恢复模式后可以看到长列表中的root选项(它实际上是root shell)
-
type命令 –
mount -o remount /
(或者在恢复中你可以点击grub选项。这有助于我在文件系统上获得read-write权限。这基本上更新了文件系统上的读/写模式,因为命令最初对我不起作用)将以读写模式重新安装文件系统。 -
命令 –
chown -R root:root /usr
此命令将以递归方式将所有权从”user”更改为root -
现在我仍然遇到
sudo
命令的问题,所以我再次按照步骤1,2,3执行了chmod 4755 usr/bin/sudo
现在我真的认为re-installing真的是”nuclear option”
第四种方案
不幸的是,如果你没有完整的备份,那么你现在可以做的最好的事情就是重新安装。
考虑到您已将所有文件所有权更改为同一用户,完全搞乱了系统的安全范例….
如果您搜索此站点,则chmod存在许多类似问题,例如How can I recover from chmod -R a-wrx / command?
第五种方案
我的数字海洋上的液滴也有同样的问题。
sudo: /usr/bin/sudo
必须由uid 0
拥有,并且必须设置setuid
位。以下是我执行并重启后的命令。
chown -R root:root /usr/bin/sudo
chmod -R a=rx,u+ws /usr/bin/sudo
chown -R root:root /usr/lib/sudo/sudoer.so
chmod -R a=rx,u+ws /usr/lib/sudo/sudoer.so
希望能帮助到你。
第六种方案
以上方法对我不起作用,因为我无法“以root身份登录”(未知密码)但是我通过编辑得到了一个root shell
vi /etc/lightdm/lightdm.conf
autologin-user=root
greeter-show-manual-login=true
重启后我终于能够运行了
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo