SUDO 时出错

SUDO 时出错

我遇到了一个问题。当我尝试sudo在终端上执行操作时,我得到了:

sudo: must be setuid root

我谷歌了一下这个问题,并按照建议做了,比如设置 sudo 权限,但它们已经处于所需状态。无法弄清楚问题可能是什么。请帮忙。

谢谢

输出mount

 /dev/sda8 on / type ext4 (rw,errors=remount-ro) 
 proc on /proc type proc (rw,noexec,nosuid,nodev) 
 sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) 
 none on /sys/fs/fuse/connections type fusectl (rw) 
 none on /sys/kernel/debug type debugfs (rw)
 none on /sys/kernel/security type securityfs (rw) 
 udev on /dev type devtmpfs (rw,mode=0755)
 devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620)
 tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755)
 none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880)
 none on /run/shm type tmpfs (rw,nosuid,nodev)
 /dev/sda6 on /home type ext4 (rw)
 /dev/sda7 on /var type ext4 (rw)
 /home/incaendo/.Private on /home/incaendo type ecryptfs (ecryptfs_check_dev_ruid,ecryptfs_cipher=aes,ecryptfs_key_bytes=16,ecryptfs_unlink_sigs,ecryptfs_sig=b746275454680798,ecryptfs_fnek_sig=2164f6a8d7aa74c7)
 gvfs-fuse-daemon on /home/incaendo/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=incaendo)

答案1

重新安装须藤包使用

pkexec apt-get --reinstall install sudo

将设置 sudo 的 setuid 标志。如果失败,请尝试使用图形包管理器或 重新安装它aptitude。如果这也失败,请手动设置 sudo 的 setuid 位:

pkexec chmod u+s /usr/bin/sudo

如果也失败并出现错误“pkexec:必须是 setuid root”,然后检查包含的文件系统/usr/bin是否未意外地使用nosuid选项集挂载。检查 的输出mount

如果情况也不是这样,那么检查任何二进制文件输入/usr/bin已设置其 setuid 位,使用:

find /usr/bin -perm 4755

这至少应该列出passwdsudo和类似的。如果没有,那么肯定是一条流浪的宇宙射线将这些 setuid 位踢了过来(或者也许毕竟是你,chmod -s *因为有传言说 setuid 不好而过于热心?)

无论哪种方式,您首先必须重新建立 sudo 权限。我已在单独答案回答这个问题。一旦有了这些,请重新安装每个包含 setuid 二进制文件的软件包,或者手动 chmod 每个二进制文件,如本答案顶部所示。


不幸的是,作为答案另一个问题指出,没有简单的方法可以找出 Ubuntu 中哪些二进制文件是以 setuid root 身份安装的。

以下是几乎完美的 12.04 上的列表,仅供参考。左侧是软件包名称,冒号右侧是二进制文件:

$ find {/usr,}/bin -perm 4755 | xargs dpkg -S
passwd: /usr/bin/chsh
iputils-tracepath: /usr/bin/traceroute6.iputils
mtr-tiny: /usr/bin/mtr
passwd: /usr/bin/gpasswd
sudo: /usr/bin/sudoedit
login: /usr/bin/newgrp
passwd: /usr/bin/chfn
sudo: /usr/bin/sudo
passwd: /usr/bin/passwd
login: /bin/su
iputils-ping: /bin/ping
mount: /bin/umount
mount: /bin/mount
fuse: /bin/fusermount
iputils-ping: /bin/ping6

答案2

OP 的问题是全部setuid root 二进制文件不知何故丢失了 setuid 位。这会导致无法/usr/bin重新设置 setuid 位的引导问题。下面介绍如何执行此操作:/usr/bin/sudosudo

  1. 重新启动并在 Grub 菜单中,选择“恢复模式”选项。

  2. 当出现恢复菜单时,选择“root”即可进入 root shell。

  3. 重新挂载根文件系统以使其可写入:

    # mount -o remount,rw /
    
  4. 在 sudo 和 pkexec 上设置 setuid 位:

    # chmod u+s /usr/bin/sudo /usr/bin/pkexec
    

退出恢复模式并继续常规启动。

答案3

在尝试了所有给我的建议后,唯一的办法就是重新安装 Ubuntu,这也是我最终要做的。

相关内容