如何解决此错误“sudo:/usr/local/bin/sudo 必须由 uid 0 拥有并设置 setuid 位”而无需重新安装 ubuntu?

如何解决此错误“sudo:/usr/local/bin/sudo 必须由 uid 0 拥有并设置 setuid 位”而无需重新安装 ubuntu?

TLDR:我正在使用 i3 运行 Ubuntu 18.04,但我弄乱了我的权限。每当我使用 sudo 运行命令时,我都会收到此错误消息。sudo: /usr/local/bin/sudo must be owned by uid 0 and have the setuid bit set我正在尝试弄清楚是否需要完全重新安装 Ubuntu,或者是否可以用一种不那么激烈的方式解决这个问题。

发生的事情是:我尝试使用 nvm 升级我的 npm 版本,但 nvm 命令无法被识别。我按照此 stackoverflow 帖子的说明进行操作 https://stackoverflow.com/questions/21215059/cant-use-nvm-from-root-or-sudo将我通过 nvm 激活的节点版本复制到 中/usr/local。我运行了下面的命令。(是的,我现在意识到在运行这一系列命令之前我应该​​调查一下。)

n=$(which node); \
n=${n%/bin/node}; \
chmod -R 755 $n/bin/*; \
sudo cp -r $n/{bin,lib,share} /usr/local

然后我收到大量错误信息 chmod: changing permissions of '/usr/bin/*': Operation not permitted

之后我运行sudo nvm install-latest-npm并得到了与之前相同的错误sudo: nvm: command not found

然后我尝试使用 sudo 运行另一个命令,并收到错误sudo: /usr/local/bin/sudo must be owned by uid 0 and have the setuid bit set。现在,每当我使用 sudo 运行任何东西时,都会出现此错误。

我认为这个问题是由我运行引起的,chmod -R 755 $n/bin/*; \但我很困惑,因为错误消息说权限/usr/bin没有改变。
我有两个问题:1) 是什么导致了这个错误?我说的对吗?这是由命令引起的chmod -R?2) 我可以在不完全重新安装 ubuntu 的情况下修复这个问题吗?如果可以,怎么做?

就上下文而言,我已经阅读了这两个问题sudo: /usr/lib/sudo/sudoers.so 必须由 uid 0 拥有和这个/usr/bin/sudo 必须由 uid 0 拥有,并且设置了 setuid 位。但是,我不确定第一个问题答案中的建议是否适用于这种情况,因为我收到的错误消息并不是专门针对的/usr/lib/sudo/sudoers.so

谢谢阅读!

答案1

必须由 uid 0 拥有设置 setuid 位

  1. 使用 检查当前所有者和权限ls -l /usr/bin/sudo。它应该类似于:

    -rwsr-xr-x 1 root root 157192 2018-08-23 10:36:40 /usr/bin/sudo

  2. 在终端中运行pkexec bash以获取具有 root 权限的 shell。

  3. 修复文件所有权:

    chown root:root /usr/bin/sudo
    
  4. 设置 setuid 位:

    chmod u+s /usr/bin/sudo
    
  5. sudo现在您应该可以进行进一步的修复了。

答案2

在您的错误消息中,它说它来自/usr/local/bin/sudo大多数 Linux 发行版(包括 Ubuntu)上 sudo 的正常位置,因此我猜您试图编译并安装一个新的、非发行版提供的 sudo 副本。由于/usr/local/bin通常放在$PATH正常的/bin/usr/bin文件夹之前,这将优先。尝试使用正常的 sudo 命令,通过运行/usr/bin/sudo/bin/sudo使用其完整路径,而不是仅仅输入sudo。如果这有效,那么我建议删除,/usr/local/bin/sudo除非您打算使用它的自定义版本。如果这样做,请确保修复它的权限:

chmod u+s /usr/local/bin/sudo
chown root:root /usr/local/bin/sudo

答案3

如果您在软件包管理的 /usr/local 中找到“sudo”二进制文件(您没有运行像 Linux From Scratch 这样的程序,您没有使用像 pkgsrc 这样的辅助依赖解析源构建系统),主流 Linux 系统并且您没有明确采取措施来编译本地版本的 sudo....

假设是恶意的。这看起来像是一次(可能不成功的)安全威胁尝试。

Debian 或 ubuntu 软件包永远不会在 /usr/local 中安装二进制文件,更不用说 SUID/SGID 内容了。任何其他安装程序都不应在任何可能与系统二进制文件混淆的地方安装任何东西,除非它们明确用于此目的(安装自定义系统二进制文件)。

把那个可疑的二进制文件拿出来,检查它实际上做了什么以及它来自哪里。

第一步,将该二进制文件的大小和 md5sum 与常规 sudo 二进制文件进行比较,以确定它是否只是该系统二进制文件在愚蠢地方的副本。

如果不 ...

您手动安装的任何东西是否在文档中明确且公开地说明了安装了该东西?

如果不 ...

在你弄清楚发生了什么之前,不要相信那个系统。

相关内容