突然无法运行 sudo

突然无法运行 sudo

几天来,我除了上网之外没有在电脑上做任何事情,突然当我尝试做以下事情时:

$ sudo apt-get update 

我有:

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?

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

答案1

sudo采用一种称为设置用户标识设置用户 ID或也称为苏伊德)。如果在可执行文件上设置了该位(例如sudo),则应用程序将在该文件的所有者用户的权限下执行(在 的情况下sudo,所有者即为用户root)。

这意味着 sudo 以 的身份执行root。到目前为止一切顺利。但是,现在没有什么可以阻止您插入带有 shell 的 USB 驱动器,该驱动器已设置 setuid 位。您拥有完全的 root 访问权限!这就是为什么通常使用 mount 选项安装 USB 驱动器的原因noexec,以防止在这样的设备上执行二进制文件/脚本。如果您仍想执行文件,另一个 mount 选项是您问题中的错误消息中提到的选项:nosuid

请参阅安装手册页

[...]
nosuid     Do not allow set-user-identifier or set-group-identifier bits to take effect.
[...]

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

$ mount

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

$ mount -n -o remount,suid /

这设置了suid选项,它与 完全相反nosuid

答案2

其实并不是 100% 相关,但请听我说:

我遇到了这个问题,因为我更改了默认的 Docker 安装。docker 服务想要执行sudo或做类似的事情(系统调用?)

更具体地说,我移动了 Docker 安装卷和镜像的文件系统位置。Docker
虚拟机会占用大量磁盘空间。
因此我将/var/lib/docker其移至 /mnt/virtualmachines_ssd/docker

过了一段时间,我忘记了这一点。我必须找出/var/lib/docker符号链接到哪里。

ls -l /var/lib/docker
lrwxrwxrwx 1 root root  /var/lib/docker -> /mnt/virtualmachines_ssd/docker

确实/mnt/virtualmachines_ssd/是一个不同的分区,一个不同的文件系统。

mount | grep virtualmachines | grep sdd
/dev/sdd1 on /mnt/virtualmachines_ssd type ext4 (rw,nodev,nosuid,relatime,x-gvfs-show)

因此,

sudo mount -o remount,suid /mnt/virtualbox_ssd

问题解决了!“ddev”docker 容器又能正常工作了。

mount | grep virtualmachines | grep sdd
/dev/sdd1 on /mnt/virtualmachines_ssd type ext4 (rw,nodev,relatime,x-gvfs-show)

就你的情况来说,当你无法跑步的时候sudo

也许更改您的文件系统的条目/etc/fstab,然后重新启动。

答案3

如果您仍然遇到此问题,或者其他任何人遇到此问题,这是我的解决方案(我也遇到了这个问题!)。

只需重新安装sudo。由于您无法使用该sudo命令,因此您必须使用 升级到 root 命令行su

$ su
Password:
#

然后

# apt reinstall sudo

无需重启。你应该可以退出 root shell 并恢复你的日常生活。

答案4

我昨天遇到了这个问题,我意识到问题可能是由我连接到 USB 端口的 U 盘引起的,因为问题很快就开始了。

巧合的是(或不是),尽管我没有运行可执行文件,但 pendrive 上已经安装了 Linux。

因此,我只需重新启动 Linux,下次启动时问题就消失得无影无踪了。

希望它能对某人有所帮助。

相关内容