Как вернуть sudo на Ubuntu?

12

Я сделал это:

sudo chown -R myname /usr/

и теперь я не могу использовать sudoкоманду из-за этой ошибки:

sudo: должен быть корень setuid

И когда я читаю, это означает, что владельцем этого файла /usr/bin/sudoне является рут. Это мой пользователь сейчас из-за чу на /usrпапку.

На многих форумах и блогах люди предлагают сделать это как root:

# chown root:root /usr/bin/sudo
# chmod 4111 /usr/bin/sudo

... но проблема в том, что мне нужно войти в систему как root, но я не могу, потому что если я пишу suв терминале, пароль неверный (на самом деле я использую пароль, который я добавил к своему пользователю):

$ su
Password:
su: Authentication failure

Так я могу вернуть sudoкоманду?

Изменить: Моя Ubuntu находится под Paralells на моем Mac OS X.

Адам
источник
Что вы подразумеваете под "я использую пароль, который я добавил к своему пользователю"? Когда вы используете su, вам будет предложено ввести пароль root , а не пароль вашего пользователя, как с sudo. Вы знаете пароль пользователя root для этой машины?
Калеб
Нет, мне никогда не нужно было добавлять или изменять его, есть ли для него настройки по умолчанию?
Адам
Вам нужно перезагрузиться в однопользовательском режиме. Какой дистрибутив вы используете?
Жиль "ТАК - перестань быть злым"
1
Просто любопытно, но что заставило вас принять решение о том, sudo chmod -R cirk:cirk /usrчего вы пытались достичь?
свободная пушка
1
Программа, которая была установлена ​​где-то в / usr /, так как я не знал точного местоположения программы, я решил использовать chown для всей папки usr, и, поскольку я нуб, я снова все испортил: P
Адам

Ответы:

5

Если у вас есть похожая система, которую вы можете использовать в качестве руководства, чтобы увидеть, как правильно владеть всеми файлами, тогда вы можете загрузиться в режиме восстановления, перейти в корневую оболочку и вручную восстановить правильное владение для всех пользователей. файлы в /usr.

Самым быстрым способом может быть переустановка вашей ОС или восстановление из резервной копии.

В Ubuntu или аналогичном по умолчанию пароль root не используется (учетная запись отключена), поэтому вы не можете su.

psusi
источник
8
Да ладно, это не переустановка Windows - это не всегда самый простой и быстрый способ что-либо сделать, и, конечно же, он не учит людей, как решать проблемы. В этом случае все, что ему нужно сделать, - это отменить действие, которое он предпринял, что можно легко сделать, смонтировав файловую систему в другой среде, такой как LiveCD, или в предложенном вами режиме восстановления (зависит от дистрибутива).
Калеб
@Caleb, когда вы полностью удаляете разрешения для основной части файловой системы. Он не просто испортил sudo, вероятно, он забыл упомянуть в своем посте, что использовал -R (иначе это изменило бы только владельца самого каталога / usr, а не sudo). Я также описал, как полностью изменить процесс, но это очень трудоемкая и кропотливая задача.
psusi
1
Это тот случай, когда chownнет chmod. Поскольку все в /usrпапке должно быть root:root, это должно быть легко, а не кропотливое исправление, chmodкоторое означал бы клопбер.
Калеб
2
@Caleb не все в / usr должно быть root: root.
psusi
6
@Caleb chownсбрасывает биты setxid. Есть несколько файлов /usr, которые не принадлежат руту; больше, которые находятся в другой группе (особенно в программах setgid /usr/bin).
Жиль "ТАК - перестань быть злым"
11

Поскольку вы сохранили права доступа к единственному компоненту, который предоставляет вам доступ на уровне root, вам потребуется некоторая помощь из-за пределов текущей программной среды, чтобы это исправить.

Я полагаю, что самый простой способ - это загрузить LiveCD для вашего дистрибутива, смонтировать диск и изменить права доступа к файлам, используя список chmod, указанный вами оттуда.

Вы также можете попробовать загрузиться в однопользовательском режиме, чтобы получить корневую оболочку.

Имейте в виду, что обычно все вещи в /usr/каталоге должны принадлежать, rootпоэтому вы просто должны иметь возможность сделать рекурсивный способ chownисправить все, что вы сломали. ( Edit: Per @Gilles комментарии , очевидно , работает chownбрейки Setuid и setgid биты, так что вам будет нужно вручную сравнить с существующей системой , чтобы восстановить все те , как только вы снова закрепить право собственности) .

Тем не менее, очень FEW должно быть 4111. Это дополнительное специальное разрешение, но оно заставляет его работать от имени пользователя root даже при запуске от имени пользователя! Только sudoдля нескольких выбранных команд должен быть установлен этот бит разрешения. Если вы не запускали a chmodдля начала, вам, вероятно, вообще не нужно это исправлять , все разрешения должны быть правильными. Не запускайте большую chmodоперацию, не зная, какими должны быть все разрешения.

Калеб
источник
Возможно ли, если ОС находится на виртуальной машине?
Адам
Да, это не имеет значения. Вы можете использовать уровень запуска 1 (то, что вы можете сделать в самом начале процесса загрузки с grub / lilo или независимо от того, какой у вас загрузчик) или настроить виртуальную машину на использование ISO-образа LiveCD в качестве загрузочного устройства.
Калеб
ахам, задолго до переустановки я попробую ваш совет :)
Адам
хорошо, я думаю, что я в LiveCD, теперь мне нужно написать это в терминале? sudo chown -R root /usr/?
Адам
Начните с этого, но не /usrс LivdCD, вам нужно его где-то смонтировать и, скажем, идти по этому пути /mnt/mydrive/usr. Затем вам нужно будет исправить бит setuid /mnt/mydrive/usr/bin/sudo. Затем просмотрите / usr на livecd и посмотрите, есть ли другие владельцы, кроме root. find /usr -not -uid 0и измените те, чтобы соответствовать. Затем найдите вещи, для которых установлены разные биты setuid или setgid, и убедитесь, что они тоже совпадают. Если у вас есть настоящая система Ubunutu для сравнения, это будет лучше всего.
Калеб
4

В режиме восстановления Ubuntu введите следующие команды. Это исправило проблему для меня ..

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

Надеюсь, что это решит вашу проблему. (Или чью-то еще)

Я нашел это здесь в этом сообщении в блоге .

Ubuntu-пользователь
источник
2

Это намного проще, чем предлагают другие ответы. Нет необходимости форматировать, перезагружать или использовать live CD.

su root # then enter your password to switch to root user
chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo
exit # to get back to the original user

Это самый простой способ исправить эту проблему. Пояснение: sudo поврежден (я знаю, что поврежденный - это неправильный термин, но он не работает, поэтому мы должны избегать использования sudo)

  • Используя команду 1 (su root) , мы меняем пользователя на root без использования sudo.
  • Используя команду 2 (chown root: root / usr / bin / sudo && chmod 4755 / usr / bin / sudo) , мы фиксируем права доступа / владение sudo.
  • Используя команду 3 (выход) , мы возвращаемся к исходному пользователю.

Я проверил этот метод на Linux Mint. Какая система похожа на Ubuntu. Дайте мне знать, что этот метод не работает на любой другой ОС. Буду обновлять ответ соответственно.

Благодарность

divyenduz
источник
как я понимаю, по умолчанию у учетной записи root нет пароля, поэтому на первом шаге su rootsudo
ввести
1
Спасибо, это помогло мне.
Арун
1

Это проще, чем делают люди. Попробуйте следующее:

  1. Вместо того, чтобы пытаться войти в систему как пользователь root с помощью неработающей suкоманды, выйдите из системы под своим текущим пользователем и снова войдите в систему как пользователь root с помощью обычного диспетчера отображения (т.е. экрана входа в систему).
  2. Выполните следующее в терминале: chown root:root /usr/bin/sudo && chmod 4755 /usr/bin/sudo

Это должно исправить sudoкоманду и заставить вас снова начать работу в кратчайшие сроки.

user7089
источник
0

Чтобы войти как root, без su или sudo, вы можете использовать pkexec:

pkexec su

Теперь измените права доступа к файлам:

chmod 440 /etc/sudoers
chmod 775 /etc/sudoers.d
chmod 440 /etc/sudoers.d/README
Джагмит Сингх Бейнс
источник