/usr/bin/sudo 必须由 uid 0 拥有并设置了 setuid 位

Pan*_*dya 106 root sudo chown

我不小心运行了以下命令

sudo chown [username] -hR /
Run Code Online (Sandbox Code Playgroud)

现在sudo su得到错误:

sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

use*_*962 188

正如您将在 SO上的这个答案中读到的那样,这个问题并不像人们提出的那么难。您可以按照以下简单步骤重新sudo运行命令,而无需重新安装

  1. 以当前用户身份注销,然后以 root 用户身份重新登录。
  2. 执行 chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
  3. 以 root 身份注销,然后以当前用户身份重新登录。

这可以解决问题,并且比其他答案中推荐的“核选项”要快得多,痛苦也少得多。

如果您的 root 密码未设置,您可以在恢复模式下启动以进行设置。

请注意,这将解决名义错误,/usr/bin/sudo must be owned by uid 0 and have the setuid bit set但如果像 OP 一样,您所做的不仅仅是弄乱了/usr/bin/sudo文件的权限,那么实际上更“核”的选项可能更有意义。

  • 如果没有root用户,重启后按Esc进入grub菜单。为 Ubuntu 选择高级选项并选择恢复模式。然后选择root,您可以在root shell中找到自己。如果您收到文件系统处于只读模式的错误,请执行以下操作: mount -o remount,rw / (22认同)
  • 当然,这将修复 `sudo`,但它不会修复许多其他被破坏的东西。 (19认同)
  • 使用 `su root` 而不是 `sudo su`,后跟 root 密码可以为你省去一些麻烦,如果你的 ssh,或者而不是去 grub。 (7认同)
  • 在我的 lxc 容器中有同样的问题,另外必须这样做:`chown root:root /usr/lib/sudo/sudoers.so && chmod 4755 /usr/lib/sudo/sudoers.so;` `chown root:root / etc/sudoers;``chown root:root /etc/sudoers;` (6认同)
  • 除了@infro 所说的,我还需要为 `/etc/sudoers.d`、`/etc/sudoers.d/README` 和 `/var/lib/sudo` 使用 `chown` (5认同)
  • 我按照您的指示修复了权限,一切正常,然后我使用 https://github.com/CISOfy/lynis 检查了安装的安全性,我还需要做什么?只是为了确保我的系统不需要重新格式化 (2认同)
  • 有用的提示:如果您使用 WSL,请查看本教程以登录和退出 root:https://www.tenforums.com/tutorials/128152-set-default-user-windows-subsystem-linux-distro-windows -10-a.html (2认同)

Oli*_*Oli 45

备份您的数据并重新安装。

这可能看起来很极端,但这不仅仅是sudo. 你破坏了整个文件系统的权限结构。其他一些答案可以sudo奏效,但忽略整个问题会招致后来的灾难。

您可以尝试将所有者从另一个安装中镜像出来,但有些情况(/var/例如)高度依赖于您实际安装的内容。如果您想了解问题的规模,实际上我以前曾帮助某人解决此类问题。修复是手动的,时间长,很容易使您的系统不安全或损坏。

解决这个烂摊子比全新安装需要更长的时间。


这已经有一些人不了解这里情况的严重性。对他们来说,这看起来像是一大堆不必要的工作,流氓水管工或机械师为了一份更大的工作而为了让你失望而说的那种事情。

如果您只更改了 的权限/usr/bin/sudo,请务必修复它。但这个问题是关于整个系统的变化。每个文件(除了运行时的文件)现在都归用户所有。用户运行的所有内容(例如浏览器、浏览器漏洞利用)都可能会覆盖系统文件、监视您、提取任何数据。这需要纠正。如上所述,这很困难。最简单的方法是重新安装。

所以请不要在这方面偷懒。文件系统权限有助于确保您的安全,修复它们。

  • 这不应该是公认的答案。启动到恢复模式并运行以下答案中的命令:https://askubuntu.com/a/471503/311767 (12认同)
  • @oidualc 因为这是*正确*的答案。我已经在之前的评论中介绍了这一点,我刚刚添加了一个编辑。文件系统权限是一项重要的安全功能。不要懒惰解决这个问题。为了完成你的比喻,你的脚趾有坏疽,它给了你败血症。你在神志不清的状态下看不到这一点,但相信我,我是一名医生。 (8认同)
  • @Tisch 该答案修复了`sudo`。该问题假设 ***整个 *** 系统归 `$USER` 所有。仅仅修复 `sudo` 就会使系统的其余部分处于非常脆弱的状态。重新安装是合理的,除非您想花费数小时浏览工作系统以比较系统文件应该归谁所有。 (6认同)
  • @PeterDrinnan 涉及核法令的答案假设是全球性的。你的情况听起来更加离散。也就是说,为什么在“/usr/local/bin/”中有一个“sudo”二进制文件?这对我来说似乎很狡猾。 (4认同)
  • 打赌这家伙在商场拥有一家电脑“维修”店 (3认同)
  • @oidualc 欢迎您不同意,但这并不意味着您仍然没有将单一症状与系统性问题混淆。 (3认同)
  • 这个答案是假的。“su”然后“chown root:root /usr/bin/sudo” (2认同)
  • 尽管我不愿意这么说,但从长远来看,这会节省时间。一般来说,对于系统目录,应该非常小心地使用“chown”和“chmod”。 (2认同)
  • 我有一种强烈的感觉@Oli 对此是正确的。假设您不只是不小心搞砸了 sudo 二进制文件的权限,那么您很可能做了像我一样的愚蠢事情。在 /root/ 中时,尝试为该目录中从非 root 用户移动的每个隐藏目录递归设置权限。`sudo chmod -R root:root .*` 谁知道 `..` 包含在该列表中。哎呀! (2认同)

小智 20

  1. Esc在启动系统时按住 进入恢复模式。

  2. 在进入恢复模式后可以看到的长列表中选择root选项(它实际上是root shell)

  3. 键入命令 - mount -o remount /(或者在恢复中,您可以单击 grub 选项。这帮助我获得了文件系统的读写权限。这基本上更新了文件系统上的读/写模式,因为该命令最初对我不起作用)

    它将以读写模式重新挂载您的文件系统。

  4. 命令 -chown -R root:root /usr 此命令将再次递归地将所有权从“用户”更改为 root

  5. 现在我仍然遇到sudo命令问题,所以我再次按照步骤 1、2、3 执行chmod 4755 /usr/bin/sudo

现在我真的认为重新安装真的是一个“核选项”


小智 8

我在数字海洋上的液滴也有同样的问题。

sudo: /usr/bin/sudo必须归其所有uid 0setuid设置该位。以下是我执行并重启后的命令。

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
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。