Я столкнулся с проблемой. Когда я пытаюсь выполнить 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)
Проблема, с которой сталкивается OP, заключается в том, что все корневые двоичные файлы setuid в /usr/bin
каким-то образом потеряли свой бит setuid. Это вызывает проблему при начальной загрузке установки бита setuid обратно на /usr/bin/sudo
без возможности sudo
. Вот как это сделать:
Перезагрузитесь и в меню Grub выберите опцию «режим восстановления».
Когда появится меню восстановления, выберите «root», чтобы перейти в корневую оболочку.
Перемонтируйте корневую файловую систему для записи:
# mount -o remount,rw /
Установите бит setuid для sudo и pkexec:
# chmod u+s /usr/bin/sudo /usr/bin/pkexec
Выйдите из режима восстановления и продолжите обычную загрузку.
Переустановка пакета sudo с помощью
pkexec apt-get --reinstall install sudo
установит флаг sudo setuid. Если это не помогло, попробуйте переустановить его, используя графический менеджер пакетов или aptitude
. Если это тоже не удается, установите бит setuid sudo вручную:
pkexec chmod u+s /usr/bin/sudo
Если это также не удается с ошибкой «pkexec: должен быть корнем setuid» , то проверьте, что файловая система, содержащая /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