Вопрос или проблема
Команда, из-за которой я попал в эту передрягу.
sudo chown -R :developers /usr/
sudo: /usr/bin/sudo должен принадлежать пользователю с uid 0 и иметь установленный бит setuid
У меня есть uid 0, но бит setuid не установлен. что делать?
Запустив вашу команду, вы испортили разрешения для всего каталога /usr
(я всегда удивляюсь, почему люди выполняют такие команды, которые явно уничтожат систему, например, изменение разрешений в основных системных каталогах). Проблема не только с sudo
– если бы это было так, вы могли бы легко исправить разрешения, загрузившись с носителя с живой установкой и установив надлежащее владение и разрешения для sudo
. Но в вашем случае вам пришлось бы устанавливать их для каждого файла и подкаталога в /usr
, и для этого вы должны знать, какими должны быть правильные значения.
Если у вас есть доступ к другой, работающей системе Ubuntu, вы могли бы попробовать проверить правильные разрешения там и установить их на вашей системе – но вы должны осознавать, что это довольно утомительная работа (если только вы не автоматизируете ее каким-то образом).
В противном случае вам придется переустановить систему, как указано в комментарии. Возможно, вы могли бы попробовать «ненавязчивую» переустановку, то есть установить систему снова на раздел, на который она уже установлена, без его удаления. Но я не пробовал этот режим установки, так что не могу дать никаких дальнейших советов.
Обновление: я подготовил список файлов и каталогов в /usr
на моей системе (это Ubuntu 20.04 с несколькими установленными дополнительными пакетами, так что он может отличаться от вашего, я не знаю, какую версию вы имеете) с либо разрешениями, отличающимися от rwxr-xr-x
или rw-r--r--
или владельцем или группой, отличающимися от root. Возможно, это поможет вам.
-rwsr-sr-x 1 daemon daemon 55560 Nov 12 2018 /usr/bin/at
-rwxr-sr-x 1 root tty 14488 Mar 30 2020 /usr/bin/bsd-write
-rwxr-sr-x 1 root shadow 84512 Feb 6 2024 /usr/bin/chage
-rwsr-xr-x 1 root root 85064 Feb 6 2024 /usr/bin/chfn
-rwsr-xr-x 1 root root 53040 Feb 6 2024 /usr/bin/chsh
-rwxr-sr-x 1 root crontab 43720 Feb 13 2020 /usr/bin/crontab
-rwxr-sr-x 1 root shadow 31312 Feb 6 2024 /usr/bin/expiry
-rwsr-xr-x 1 root root 39144 Mar 7 2020 /usr/bin/fusermount
-rwsr-xr-x 1 root root 88464 Feb 6 2024 /usr/bin/gpasswd
-rwsr-xr-x 1 root root 55528 Apr 9 2024 /usr/bin/mount
-rwsr-xr-x 1 root root 44784 Feb 6 2024 /usr/bin/newgrp
-rwsr-xr-x 1 root root 68208 Feb 6 2024 /usr/bin/passwd
-rwsr-xr-x 1 root root 31032 Feb 21 2022 /usr/bin/pkexec
-rwxr-sr-x 1 root ssh 350504 Feb 11 15:09 /usr/bin/ssh-agent
-rwsr-xr-x 1 root root 67816 Apr 9 2024 /usr/bin/su
-rwsr-xr-x 1 root root 166056 Apr 4 2023 /usr/bin/sudo
-rwsr-xr-x 1 root root 39144 Apr 9 2024 /usr/bin/umount
-rwxr--r-- 3 root root 26928 Sep 26 14:44 /usr/lib/cups/backend-available/dnssd
-rwxr--r-- 2 root root 51592 Sep 26 14:44 /usr/lib/cups/backend-available/lpd
-rwxr--r-- 2 root root 39216 Sep 26 14:44 /usr/lib/cups/backend-available/usb
-rwx------ 1 root root 14648 Oct 8 13:51 /usr/lib/cups/backend/cups-brf
-rwxr--r-- 3 root root 26928 Sep 26 14:44 /usr/lib/cups/backend/dnssd
-rwx------ 1 root root 22848 Oct 8 13:51 /usr/lib/cups/backend/implicitclass
-rwxr--r-- 2 root root 51592 Sep 26 14:44 /usr/lib/cups/backend/lpd
-rwxr--r-- 3 root root 26928 Sep 26 14:44 /usr/lib/cups/backend/mdns
-rwxr--r-- 1 root root 18744 Oct 8 13:51 /usr/lib/cups/backend/serial
-rwxr--r-- 2 root root 39216 Sep 26 14:44 /usr/lib/cups/backend/usb
-rwsr-xr-- 1 root messagebus 51344 Oct 25 2022 /usr/lib/dbus-1.0/dbus-daemon-launch-helper
-rwsr-xr-x 1 root root 14488 Jul 8 2019 /usr/lib/eject/dmcrypt-get-device
-rwxr-sr-x 1 root mail 22856 Apr 7 2021 /usr/libexec/camel-lock-helper-1.2
-r--r--r-- 1 root root 11911168 Feb 5 09:24 /usr/lib/jvm/java-11-openjdk-amd64/lib/server/classes.jsa
-rwxr-sr-x 1 root tty 14640 Nov 30 2021 /usr/lib/mc/cons.saver
-rwsr-xr-x 1 root root 477672 Feb 11 15:09 /usr/lib/openssh/ssh-keysign
-rwsr-xr-x 1 root root 22840 Feb 21 2022 /usr/lib/policykit-1/polkit-agent-helper-1
-rwsr-xr-x 1 root root 159304 Oct 11 10:05 /usr/lib/snapd/snap-confine
-r--r--r-- 1 root root 10470739 Sep 20 16:07 /usr/lib/udev/hwdb.bin
-rwSr--r-- 1 root root 26616 Mar 3 2018 /usr/lib/x86_64-linux-gnu/libgtk3-nocsd.so.0
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/artsearch/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/im-status/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/listenbrainz/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/lyrics/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/magnatune/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/python-console/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/rb/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/replaygain/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/soundcloud/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/lib/x86_64-linux-gnu/rhythmbox/plugins/webremote/__pycache__
-rwsr-sr-x 1 root root 14488 Feb 19 14:54 /usr/lib/xorg/Xorg.wrap
drwxrwsr-x 4 root staff 4096 Jan 16 17:31 /usr/local/lib/python2.7
drwxrwsr-x 2 root staff 4096 Jun 2 2020 /usr/local/lib/python2.7/dist-packages
drwxrwsr-x 2 root staff 4096 Jan 16 17:31 /usr/local/lib/python2.7/site-packages
drwxrwsr-x 3 root staff 4096 Apr 23 2020 /usr/local/lib/python3.8
drwxrwsr-x 2 root staff 4096 Apr 23 2020 /usr/local/lib/python3.8/dist-packages
drwxrwsr-x 2 root staff 4096 Apr 23 2020 /usr/local/lib/python3.8/dist-packages
drwxrwsr-x 2 root staff 4096 Apr 23 2020 /usr/local/share/fonts
-rw-r--r-- 1 root staff 36 Apr 23 2020 /usr/local/share/fonts/.uuid
-rwsr-xr-x 1 root root 48200 Jun 1 2022 /usr/sbin/mount.cifs
-rwxr-sr-x 1 root shadow 43168 Jan 10 2024 /usr/sbin/pam_extrausers_chkpwd
-rwsr-xr-- 1 root dip 395144 Jul 23 2020 /usr/sbin/pppd
-rwxr-sr-x 1 root shadow 43160 Jan 10 2024 /usr/sbin/unix_chkpwd
drwxrwxr-x 2 root root 4096 Apr 22 2023 /usr/share/doc/zoom
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/share/ibus-table/engine/__pycache__
drwxrwxr-x 2 root root 4096 May 28 2020 /usr/share/ibus-table/setup/__pycache__
drwxrwxr-x 3 root root 4096 May 28 2020 /usr/share/locale-langpack/pl
drwxrwsr-t 2 root lpadmin 4096 Feb 24 2020 /usr/share/ppd/custom
Ответ или решение
Нажмите, чтобы увидеть решение
### Теория
Изменение разрешений и владельца системных каталогов может привести к нестабильности и отказу системы. Команда `sudo chown -R :developers /usr/` изменила группу владельца на всю деревню `/usr`, что нарушило права доступа к важным двоичным файлам, включая саму утилиту `sudo`. В Linux `sudo` — это утилита, которая должна иметь определенные разрешения и принадлежность, чтобы нормально выполнять свои функции. При неправильной конфигурации этих разрешений пользователи могут потерять возможность выполнять команды с административными правами.
Для работы `sudo` необходимо, чтобы:
1. Файл `/usr/bin/sudo` принадлежал пользователю root, который имеет идентификатор пользователя (UID) 0.
2. Бит setuid был установлен, чтобы пользователи могли выполнять `sudo` с привилегиями root.
### Пример
Если кто-то использует команду, аналогичную `sudo chown -R :developers /usr/` и изменяет группу для всего содержимого `/usr`, это приведет к тому, что множество критически важных файлов и утилит потеряют свои необходимые системные разрешения и владельцев. Это может сделать целые участки системы непригодными для использования без возможности выполнения команд с привилегиями администратора — например, `sudo`.
### Применение
Теперь о том, как можно попытаться исправить ситуацию:
1. **Используйте загрузочный носитель**:
– Загрузите систему с внешнего загрузочного носителя, такого как USB или DVD, с дистрибутивом Linux. Это позволит вам получить доступ к файловой системе без использования установленных на вашем диске утилит, которые могут быть повреждены.
2. **Исправление разрешений и владельцев**:
– После загрузки с внешнего носителя, откройте терминал и выполните следующее:
– Смонтируйте основной файловый раздел: `sudo mount /dev/sdXn /mnt`, где `/dev/sdXn` — это ваш основной раздел.
– Проверьте, что все изменения в `/usr` действительно присутствуют и попробуйте восстановить права на sudo:
“`bash
sudo chown root:root /mnt/usr/bin/sudo
sudo chmod 4755 /mnt/usr/bin/sudo
“`
– Это восстановит права доступа и владельца для `sudo`.
3. **Сканирование и установка прав для других файлов**:
– Вы можете использовать другой работающий экземпляр Ubuntu для получения списка всех исходных разрешений и владельцев файлов, аналогично предоставленному примеру.
– Составьте скрипт, который может автоматически устанавливать нужные права на основе списка, похожего на предоставленный выше.
4. **Переустановка пакетов**:
– Если доступен интернет, можно попробовать переустановить поврежденные пакеты через `dpkg` или `apt` после временного восстановления sudo.
– Например: `sudo apt-get install –reinstall
5. **Рассмотрение полной переустановки системы**:
– Если восстановить систему вручную не удается, может оказаться более простым и менее времязатратным перешагнуть к переустановке операционной системы, выбирая “Не форматировать” для сохранения личных данных.
В завершение, всегда стоит помнить о важности регулярного резервного копирования и использования виртуальных сред для тестирования изменений системных конфигураций, прежде чем осуществлять их в рабочей среде.