几天来,我除了上网之外没有在电脑上做任何事情,突然当我尝试做以下事情时:
$ 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,下次启动时问题就消失得无影无踪了。
希望它能对某人有所帮助。