Как исправить sudo после «chmod -R 777 / usr / bin»?

15

Я вошел chmod -R 777 /usr/binи теперь sudo не работает.

Это говорит sudo must be setuid root.

Некоторый совет онлайн сказал, чтобы бежать chown root:root /usr/bin/sudo chmod 4755 /usr/bin/sudo.

При входе chown root:root /usr/bin/sudoэто показывает opened in readonly modeошибку.

Manojkumar
источник
1
Для запуска этих команд вы должны быть пользователем root
Манодж Кумар: А метод в моем ответе (который вы помеченный как общепринятый) решить эту проблему для вас? Я стал убежден , что, как Дэмиен Roche и Оли прокомментировали этот метод не работает после того, как команда успешно завершена. Мол , должен быть установлен root для работы. (Я не уверен, почему, поскольку он использует службу polkit , но это так.) Однако, я думаю, я слышал, что другие люди говорят, что это работает для них, что любопытно! Вы нажали Ctrl + C до завершения команды chmod? pkexecsudo chmod -R 777 /usr/binsudopkexec777
Элия ​​Каган
Здравствуйте. Этот метод действительно работал для меня после того, как я случайно запустился sudo chmod -R 777 /usr/bin, но только после входа в rootучетную запись.
iHowell

Ответы:

10

Несмотря на принятый статус, теперь я убежден, что этот ответ неверен . (Я надеюсь улучшить его в ближайшее время, посоветовавшись с OP о принятии.) Я думаю, что я вспоминаю, как другие говорили, что это сработало, но я полагаю, что их проблемы, по крайней мере, немного отличались. Описанный здесь способ остается полезным для некоторых ситуаций, когда chmod -R 777 /usr/binпрерывается знаком Ctrl+ Cили не завершается иным образом. Но как только он это сделает, pkexecон тоже не установлен и не будет работать лучше, чемsudo , как справедливо прокомментировали Дэмиен Рош и Оли.

В настольной системе Ubuntu установлен PolicyKit , поэтому pkexecего можно использовать для восстановления испорченного sudoисполняемого файла или sudoersфайла . Вам не нужно загружаться в режиме восстановления, и вам не нужно загружаться с live CD. Вам даже не нужно перезагружаться.

В этом случае выполните следующие команды:

pkexec chown root:root /usr/bin/sudo
pkexec chmod 4755 /usr/bin/sudo

Смотрите этот вопрос для получения дополнительной информации.

Элия ​​Каган
источник
9
pkexec must be setuid root! Какой кошмар!
Дэмиен Роше
1
Как указывает Дэмиен, проблема этого подхода pkexecв том же затруднительном положении, что и sudo. Это обычно setuid и живет в /usr/bin. Я проверил это, и это просто не работает после chmod -R 777 /usr/bin.
Оли
@DamienRoche, Оли: Я прошу прощения за не фиксируя этот путь раньше! Вы оба правы. Я не уверен, почему для работы pkexecдолжен быть установлен setuid root (разве он не работает через демон polkit, как другие не-setuid процессы?), Но это действительно нужно. Я прокомментировал вопрос, чтобы увидеть, может ли ОП (который принял это) пролить свет на то, что, если что-то, правильно или полезно в этом ответе. И я добавил временный баннер в начало этого поста, чтобы больше не вводить в заблуждение. Если этот ответ продолжает существовать, его улучшенная форма, вероятно, будет включать некоторую информацию, которая в настоящее время находится в этом баннере.
Элия ​​Каган
Вы можете просто использовать su, который находится в / bin
FliiFe
@FliiFe Для исправления прав доступа (или владения) к файлам /usr/binтребуются права суперпользователя, но вы не можете получить root-права suна большинстве систем Ubuntu, потому что root-логины отключены по умолчанию. В отличие от sudoи pkexec, когда вы используете suдля получения оболочки root или для запуска команды от имени root, вы должны предоставить пароль root, а не свой собственный. Но root не имеет пароля по умолчанию в Ubuntu (то есть, аутентификация на основе пароля для root всегда будет неудачной, а не ввод пустого пароля). Смотрите RootSudo для деталей.
Элия ​​Каган
4

Даже при запуске с live CD / Pendrive вы должны поставить префикс chmod командойsudo . Таким образом, ваши шаги будут выглядеть следующим образом:

  1. загрузка с live CD / Pendrive
  2. проверьте, был ли ваш диск уже смонтирован (и куда). Если нет, установите его (см. Ниже)
  3. использовать sudo chmod 0755 <path>для настройки разрешений

Как выяснить, где монтируется ваш диск: из окна терминала запустить mount(без аргументов). Это перечислит все подключенные устройства. Проверьте typeперечисленное - вы можете пропустить все, не используя «настоящую файловую систему» ​​(ваш диск, вероятно, использует либо ext3, либо ext4 - вы можете пропустить такие вещи, как proc, sysfs и тому подобное). Если что-то звучит многообещающе/dev/sda1 on /media/sda1 type ext3 ), проверьте его содержимое, используя, ls /media/sda1чтобы узнать, так ли это.

Если он не установлен, вы можете проверить с /devзаписями , где диск может быть (используя ls /dev/ |grep '/dev/sdдля проверки доступных устройств, ваш диск должен выглядеть /dev/sdaX, /dev/sdbXи тому подобное - с Х является числом). Сравните это со списком установленных устройств. Если его там нет, попробуйте смонтировать его и проверить его содержимое (как показано выше). Чтобы смонтировать его, сначала создайте точку монтирования, например sudo mkdir /mnt/mydisk, затем попробуйте смонтировать устройство с помощью mount /dev/sda1 /mnt/mydiskи проверьте его содержимое с помощью ls /mnt/mydisk.

После того, как вы получите правильный диск там, вы можете пойти , чтобы изменить права доступа обратно на USR директории: sudo chmod 0755 /mnt/mydisk/usr.

Теперь у вас все еще могут быть проблемы, если вы изначально выполняли chmodкоманду рекурсивно, используя -Rпараметр. В этом случае вы можете попытаться исправить каждую запись вручную или перейти к новой установке ...

Иззи
источник
Я попытался создать точку монтирования, но я получил ошибку , которая прочитать точку монтирования мнта / mydisk не существует в mydisk быть заменен некоторыми вещами , и только для записи я писал mount /dev/sda /mnt/mydiskизroot@Ubuntu:/dev#
Vin
Вы а) создали эту точку монтирования (каталог) перед тем, как вводить команду монтирования (как описано), и б) позаботились и о ведущем слэше? Попробуйте mkdir -p /mnt/mydisk && mount /dev/sda1 /mnt/mydisk(я не думаю, что у вас нет разделов /dev/sda, поэтому вы, должно быть, также пропустили номер раздела. Убедитесь, что вы указали правильное устройство (или монтирование не удастся).
Izzy
1

Я думаю, что Mat прав, вы должны быть пользователем root, чтобы добавить бит в / usr / bin, но, конечно, sudo не работает. Если у вас есть пароль root, вы можете использовать его, чтобы войти в систему как root, а затем исправить разрешения с помощью приведенной выше команды. Однако, если вы этого не сделаете (и я тоже), то, вероятно, было бы лучше:

  • загрузка с живого CD с Linux
  • стать там корнем
  • смонтировать раздел с помощью вышеуказанной системы
  • затем выровняйте разрешения в этой файловой системе с помощью терминала.

Root - это всегда пользователь с номером 0, поэтому root в любой системе может вносить изменения, разрешенные для root, в других файловых системах.

Джон С. Грубер
источник
1

У меня мало знаний. Но эти шаги решили мою проблему даже без перезагрузки моей машины. Следуй этим шагам:

su root
<enter root password>
cd /usr
chmod -R 755 *
Ману Мохан Теккедат
источник
1
Вам не хватает хотя бы команды "cd". Если вы делаете это так, вы выполняете команду "chmod" в домашнем каталоге для root. Это ухудшит положение.
Rinzwind
спасибо ... отредактировал мой ответ ... я был в папке / usr
Manu Mohan Thekkedath
2
Это работает, только если для пароля установлен пароль root, который не является стандартной конфигурацией Ubuntu.
Дэвид Фёрстер
1

Пытаясь установить разрешения для своих локальных сценариев, я нарушил разрешение sudo и по ошибке изменил владельца. Я смог изменить владельца sudo на root, выполнив следующие действия:

Шаг 1: Переключитесь в режим восстановления Ubuntu . Если вы не знаете о процессе, вы можете отправить ответ здесь: /ubuntu//a/172346/223901

Шаг 2: В режиме восстановления выберите root - приглашение «Drop to root shell»

Шаг 3: Выполните следующие команды

mount -o remount,rw /
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
reboot

Подождите, пока ваша система загрузится нормально, и вы увидите право владения sudo на root.

ramsudharsan
источник