/usr/bin/sudo должен принадлежать uid 0 и иметь установленный бит setuid
Я случайно выполнил следующую команду
sudo chown [username] -hR /
Сейчас sudo su
получить ошибку:
sudo: /usr/bin/sudo must be owned by uid 0 and have the setuid bit set
Как решить это?
12 ответов
Сделайте резервную копию ваших данных и переустановите.
Это выглядит экстремально, но это не просто sudo
, Вы разрушили структуру разрешений всей вашей файловой системы. Некоторые другие ответы могут получить sudo
работает, но игнорируя всю проблему, приглашает к более поздней катастрофе.
Вы могли бы попытаться отразить владельцев от другой установки, но есть случаи (/var/
например), которые сильно зависят от того, что вы на самом деле установили. Если вы хотите получить представление о масштабе проблемы, у меня действительно есть возможность помочь кому-то решить эту проблему раньше. Исправление является ручным, долгим и может легко оставить вашу систему небезопасной или сломанной.
Выбор этого беспорядка займет значительно больше времени, чем чистая установка.
Это было несколько поездок от людей, которые не понимают серьезность ситуации здесь. Для них это похоже на большую кучу ненужной работы, такого рода вещи, которые мошенник-сантехник или механик говорит, чтобы встряхнуть вас для большой работы.
Если вы только изменили разрешения на /usr/bin/sudo
Во что бы то ни стало, просто исправьте это. Но этот вопрос касается полного изменения системы. Каждый файл (за исключением файлов времени выполнения) теперь принадлежит пользователю. Все, что запускает пользователь (например, браузеры, эксплойты браузера), может затем перезаписывать системные файлы, шпионить за вами, извлекать любые данные. Это должно быть исправлено. Как указано выше, это сложно. Самый простой способ - это переустановка.
Поэтому, пожалуйста, не ленитесь об этом. Разрешения файловой системы помогут вам сохранить безопасность, исправить их.
Как вы прочтете в ответе на SO, эта проблема не так сложна, как это делают люди. Я получил sudo
Команда снова работает без переустановки, выполнив следующие простые шаги:
- Выйдите из системы как текущий пользователь, затем войдите в систему как root.
- казнить
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
- Выйдите из системы как пользователь root, а затем снова войдите в систему как текущий пользователь.
Это делает свое дело и гораздо быстрее и менее болезненно, чем "ядерный вариант", рекомендуемый в других ответах.
Если ваш пароль root не установлен, вы можете загрузиться в режиме восстановления, чтобы установить его.
перейдите в режим восстановления, удерживая нажатой клавишу Esc при загрузке системы.
выберите опцию root в длинном списке, который вы можете увидеть после входа в режим восстановления (это на самом деле root shell)
введите команду -
mount -o remount /
(Или в процессе восстановления вы можете нажать на опцию grub. Это помогло мне получить разрешения на чтение и запись в файловой системе. Это в основном обновило режим чтения / записи в файловой системе, так как команда изначально не работала для меня)Он перемонтирует вашу файловую систему в режиме чтения и записи.
команда -
chown -R root:root /usr
эта команда будет рекурсивно менять владельца с пользователя на rootТеперь все еще у меня были проблемы с
sudo
команда, поэтому я снова выполнил шаг 1,2,3 и выполнилchmod 4755 /usr/bin/sudo
Теперь я действительно думаю, что переустановка была бы действительно "ядерным вариантом"
Была такая же проблема на моей капельке на цифровом океане.
sudo: /usr/bin/sudo
должен принадлежать uid 0
и иметь setuid
бит установлен. Ниже приведены команды, которые я выполняю и перезагружаю после.
chown -R root:root /usr/bin/sudo
chmod -R a=rx,u+ws /usr/bin/sudo
chown -R root:root /usr/lib/sudo/sudoer.so
chmod -R a=rx,u+ws /usr/lib/sudo/sudoer.so
Надеюсь, поможет.
Вышеуказанные методы не работают для меня, потому что я не могу "войти в систему как root" (неизвестный пароль), но я получил оболочку root путем редактирования
vi /etc/lightdm/lightdm.conf
autologin-user=root
greeter-show-manual-login=true
После перезагрузки я наконец смог запустить
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
К сожалению, если у вас нет полной резервной копии, вероятно, лучшее, что вы можете сделать на этом этапе, - это переустановить.
Учтите, что вы изменили владение всеми файлами на одного и того же пользователя, полностью нарушив парадигму безопасности вашей системы....
Если вы выполняете поиск по этому сайту, у chmod много подобных проблем, как, например, как мне восстановить команду chmod -R a-wrx /?
Я не смог редактировать lightdm.conf
файл под работающей системой. Я исправил такие вещи:
- загрузочный Ubuntu Live USB
- смонтировать корневой раздел для доступа
/etc/lightdm/lightdm.conf
на установке sudo -H gedit /mnt/etc/lightdm/lightdm.conf
и добавьте следующие строки из ответа Anno2001autologin-user=root greeter-show-manual-login=true
перезагружать
Команда запуска:
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
Изменить обратно пользователя по умолчанию в
/etc/lightdm/lightdm.conf
(вы не хотите каждый раз автоматически входить в систему как root, что будет очень небезопасно и опасно)- перезагрузка, и моя система снова работает нормально.
Если у вас есть пароль пользователя root, то:
Войти как пользователь root
открытый терминал
Введите следующие команды:
Если у вас нет пароля пользователя root, то:
Перезагрузите систему в режиме восстановления (загрузите и нажмите и удерживайте кнопку esc, чтобы войти в режим восстановления)
Перейдите к (дополнительный вариант для Linux), используя кнопку со стрелкой вниз, и дважды нажмите Enter.
Перейдите к корню с помощью кнопки со стрелкой вниз и нажмите Enter
Теперь введите следующие команды:
mount -o remount / chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo chown root:root /usr/lib/sudo/sudoers.so && chmod 4755/usr/lib/sudo/sudoers.so chown root:root /var/* && chmod 4755 /var/*
Нажмите ctrl + d, а затем выберите вариант возобновления загрузки для нормальной загрузки.
This applies to those environments where they have docker / Kubernetes environment running and has host root file system is mounted into the container / pod.
kubectl exec -it mypod -- chown root:root /host/usr/bin/sudo && chmod 4755 /host//usr/bin/sudo
I have not tried creating a fresh Kubernetes pod but I guess that should work too.
Вы уничтожили структуру разрешений всей вашей файловой системы - ДА ЭТО ИСТИНА. Весь корень поврежден. Но не паникуйте, восстановление довольно простое. Создайте новый том корневого диска с последним моментальным снимком, затем отсоедините старый том и присоедините его к экземпляру с тем же именем диска. Через 5 минут простоя вы можете снова войти на сервер .
Для тех, у кого нет пароля root, но у кого установлен докер, вот однострочник:
docker run -v /:/target bash bash -c "chown root:root /target/usr/bin/sudo && chmod 4755 /target/usr/bin/sudo"
Поскольку образ Docker запускается от имени пользователя root, вы являетесь пользователем root в этом образе. Установленный том позволяет вам изменить корневую структуру. Команда позволит вам исправить ваш sudo.
PS: представьте, что еще можно сделать без прав root и докера...
Я изменил / usr / lib / на владельца root, но sudo выполняется только с root-доступом в терминале.
первый шаг: su root второй шаг: cd / usr / lib третий шаг: chown -R root:root sudo
и это все. Просто отметьте, что вы запускаете su root каждый раз, когда хотите использовать sudo.