突然不能运行sudo

Inv*_*orn 9 permissions command-line root sudo mount

几天我除了上网什么都没在电脑上做任何事情,突然当我试图做:

$ sudo apt-get update 
Run Code Online (Sandbox Code Playgroud)

我有:

sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set
      or an NFS file system without root privileges?
Run Code Online (Sandbox Code Playgroud)

我不知道发生了什么,我记得上次跑步sudo是我更新的时候。

cha*_*aos 8

sudo使用称为setuid设置用户 ID,或也称为suid)的机制。如果在可执行文件(如sudo)上设置了该位,则应用程序在用户的权限下执行,用户是该文件的所有者(在 的情况下sudo,所有者是root用户)。

这意味着, sudo 作为root. 到现在为止还挺好。但是,现在没有什么可以阻止您插入带有外壳的 USB 驱动器,该驱动器设置了 setuid 位。您拥有完全的 root 访问权限!这就是为什么通常使用 mount 选项挂载 USB 驱动器的原因noexec,以防止在此类设备上执行二进制文件/脚本。如果您仍想执行文件,则另一个挂载选项是您问题中的错误消息中提到的选项:nosuid.

请参阅安装手册页的摘录:

[...]
nosuid     Do not allow set-user-identifier or set-group-identifier bits to take effect.
[...]
Run Code Online (Sandbox Code Playgroud)

使用该mount命令,您可以确定您的根文件系统是否使用该选项挂载。只需输入:

$ mount
Run Code Online (Sandbox Code Playgroud)

您现在可以即时重新挂载文件系统并更改挂载选项:

$ mount -n -o remount,suid /
Run Code Online (Sandbox Code Playgroud)

这设置了suid选项,这与nosuid.