我遇到了一个问题。当我尝试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
这至少应该列出passwd
、sudo
和类似的。如果没有,那么肯定是一条流浪的宇宙射线将这些 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/sudo
sudo
重新启动并在 Grub 菜单中,选择“恢复模式”选项。
当出现恢复菜单时,选择“root”即可进入 root shell。
重新挂载根文件系统以使其可写入:
# mount -o remount,rw /
在 sudo 和 pkexec 上设置 setuid 位:
# chmod u+s /usr/bin/sudo /usr/bin/pkexec
退出恢复模式并继续常规启动。
答案3
在尝试了所有给我的建议后,唯一的办法就是重新安装 Ubuntu,这也是我最终要做的。