意外更改运行 sudo 的权限,导致其无法运行

意外更改运行 sudo 的权限,导致其无法运行

我运行sudo chmod 777 -R /usr/bin了几个程序,我希望能够更轻松地运行它们,而无需不断输入我的 root 密码,但现在/usr/bin/sudo每次运行时都会出现错误sudo。即此错误:

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

我不知道该如何解决这个问题。

答案1

还可以从启动到恢复模式选择 Root 执行以下步骤。然后在启动到 root 后,键入以下内容以将驱动器挂载为读/写,以便进行更改:

mount -o remount,rw /

我建议按照此站点上的第一个答案启动 Live CD,以便您可以安装硬盘并修复文件。执行步骤 #5 后停止,以便以 root 用户身份安装硬盘。

我该如何修复 grub?(安装 Windows 后如何恢复 Ubuntu?)


以 root 用户身份安装驱动器后,您应该能够从终端窗口输入:

chmod 4755 /usr/bin/sudo

将 sudo 文件的 setuid 重新设置。

以下列表是所有/usr应该设置 setuid 的文件:(我将它们保留为一个列表,您可以根据需要复制和粘贴)

chmod 4755 /usr/bin/pkexec
chmod 4755 /usr/bin/sudo
chmod 4755 /usr/bin/mtr
chmod 4755 /usr/bin/traceroute6.iputils
chmod 4755 /usr/bin/gpasswd
chmod 4755 /usr/bin/lppasswd
chmod 4755 /usr/bin/passwd
chmod 4755 /usr/bin/newgrp
chmod 4755 /usr/bin/chsh
chmod 4755 /usr/bin/chfn

编辑2:

以下文件具有权限rwxr-sr-x,可以在主机备份后通过将以下内容复制并粘贴到终端中进行重置:(有些可能与您的系统不同)

sudo chmod 2755 /usr/bin/mail-unlock
sudo chmod 2755 /usr/bin/dotlockfile
sudo chmod 2755 /usr/bin/ssh-agent
sudo chmod 2755 /usr/bin/wall
sudo chmod 2755 /usr/bin/dotlock.mailutils
sudo chmod 2755 /usr/bin/chage
sudo chmod 2755 /usr/bin/bsd-write
sudo chmod 2755 /usr/bin/crontab
sudo chmod 2755 /usr/bin/expiry
sudo chmod 2755 /usr/bin/mlocate
sudo chmod 2755 /usr/bin/mail-touchlock
sudo chmod 2755 /usr/bin/mail-lock

由于您运行的chmod 777 -R /usr/bin只是该目录中没有子目录,因此除了链接和上面列表中明显设置了“suid”权限的文件之外的所有文件,该目录中的其余文件的权限设置为-rwxr-xr-x(或 755)。您可以通过输入以下内容重置这些文件的权限,而无需触碰 setuid 文件或链接:

sudo chmod go-w /usr/bin/*

这会将groupother权限设置为r-x,并且将链接保留为lrwxrwxrwx请勿以此类推,chmod 755因为这样会破坏我们已修复的权限!

答案2

我认为唯一合适的答案是重新安装系统。否则您将永远发现无法正常工作的东西。

您应该首先从中恢复所需的任何重要文件,备份它们,然后重新安装。

绝不对系统文件进行深远影响chmod -R。有太多东西绝对需要以某种方式设置权限,如果将它们设置为其他内容,就会中断,甚至说777

这包括许多需要“setuid”的可执行文件,如另一个答案所述。但它还包括检查以确保其文件权限设置安全的应用程序和服务,如果它们不安全,则拒绝运行。例如,这在网络守护程序中很常见。

目前还没有简单的方法告诉 Ubuntu/Debian 恢复全部文件权限恢复到出厂设置。逐个修复它们将是一个混乱的手动过程。如果您只是返回并修复实际损坏的东西,那么您仍然会面临一个非常不安全的系统,特别是如果它在网络上并运行任何服务器。

相关内容