我运行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/*
这会将group
和other
权限设置为r-x
,并且将链接保留为lrwxrwxrwx
。 请勿以此类推,chmod 755
因为这样会破坏我们已修复的权限!
答案2
我认为唯一合适的答案是重新安装系统。否则您将永远发现无法正常工作的东西。
您应该首先从中恢复所需的任何重要文件,备份它们,然后重新安装。
绝不对系统文件进行深远影响chmod -R
。有太多东西绝对需要以某种方式设置权限,如果将它们设置为其他内容,就会中断,甚至说777
。
这包括许多需要“setuid”的可执行文件,如另一个答案所述。但它还包括检查以确保其文件权限设置安全的应用程序和服务,如果它们不安全,则拒绝运行。例如,这在网络守护程序中很常见。
目前还没有简单的方法告诉 Ubuntu/Debian 恢复全部文件权限恢复到出厂设置。逐个修复它们将是一个混乱的手动过程。如果您只是返回并修复实际损坏的东西,那么您仍然会面临一个非常不安全的系统,特别是如果它在网络上并运行任何服务器。