Как я могу добавить себя обратно как пользователь sudo?

64

Я сегодня установил Ubuntu 11.10, а затем установил VirtualBox. Это потребовало от меня добавления себя в группу vboxusers, и, поскольку у 11.10, похоже, больше нет графического приложения для добавления пользователей в группу, я выполнил следующую команду:

sudo usermod -G vboxusers stephane

Это проблема. Теперь я вижу, что я должен был запустить вместо этого:

sudo usermod -aG vboxusers stephane

Конечным результатом является то, что я больше не в группах, в которых я должен быть. Включая любую группу, необходимую для запуска "sudo". Теперь, когда я запускаю любую команду от имени sudo, я получаю следующее:

$ sudo ls
[sudo] password for stephane: 
stephane is not in the sudoers file.  This incident will be reported.

Есть ли способ исправить это, или мне нужно заново установить с нуля?

Stéphane
источник

Ответы:

65
  1. Во время загрузки нажмите и удерживайте левую Shift клавишу, и вы должны увидеть меню GRUB.

  2. Выберите запись, содержащую ( режим восстановления ) и подождите.

  3. Теперь вам должно быть представлено меню. Выбрать:

    remount    Remount / read/write and mount all other file systems 
    

    и дождитесь монтирования файловых систем с разрешениями на чтение / запись, затем нажмите Enter.

    Если этот параметр не отображается или не работает, вы можете вместо этого выбрать этот rootпараметр и использовать следующую команду для монтирования системного раздела:

    mount -o remount /
    

    Вы можете проверить, какой у вас системный раздел, fsckкомандой или просмотрев /etc/mtab.

    После успешного запуска команды монтирования (т.е. без сообщений об ошибках) перейдите непосредственно к шагу 5 ниже.

  4. После выбора remountопции меню снова появляется. Выбрать:

    root       Drop to root shell prompt
    
  5. Теперь введите одну из следующих команд, чтобы повторно добавить пользователя в adminгруппу (для Ubuntu 11.10 и более ранних версий):

    adduser <USERNAME> admin
    

    или sudoгруппе (для Ubuntu 12.04 и выше):

    adduser <USERNAME> sudo
    
  6. Перезагрузитесь, и вы сможете sudoснова использовать .

htorque
источник
3
Если вы не видите меню «remount», вы можете сначала выбрать «fsck», оно перемонтирует вашу файловую систему для чтения / записи. После этого вы можете добавить своего пользователя в режиме root.
Jiejing Zhang
1
Это сработало для меня, за исключением того, что мне пришлось смонтировать файловую систему с помощью команды mount -o remount,rw /.
Passuf
Это работает отлично. Кроме того, это выглядит как большая проблема безопасности. Я думаю, вы должны отключить эту функцию на разумных машинах? - В режиме восстановления я никогда не могу перезагрузиться. Я всегда должен использовать reboot -f.
Ромен Винсент
15

Если в вашей системе включен root-доступ, просто перетяните терминал через Control+ Alt+ F1без входа в X. Войдите в систему как root, а затем просто добавьте нужного пользователя в adminгруппу (для Ubuntu 11.10 и более ранних версий):

adduser desired_user_name admin

Для Ubuntu 12.04 и более поздних версий добавьте пользователя в sudoгруппу:

adduser desired_user_name sudo

Если вы не включили root-вход, просто выберите режим восстановления в Grub, а затем попробуйте root shell.

Root Shell

Смонтируйте файловую систему как чтение-запись:

mount -o rw,remount /

После этого вы можете снова добавить нужного пользователя в admin(или sudo) группу.

heartsmagic
источник
Но я не могу получить доступ к sudo от моего пользователя!
Джейми Хатбер
7

Я пробовал различные комбинации после того, как сделал то же самое, что в меню перемонтирования, кажется, не в 12.10. Я попробовал все остальное в этом посте от root. Последний был

umount -a
mount -o -w /<path> /

Это привело к тому, что файловая система все еще находилась в состоянии ro из-за установки в fstab значения ro для загрузки при ошибке файловой системы, я думаю, с указанием, что после монтирования она выглядит как ro .

Я наконец справился с этим

mount -o rw,remount /

Хотя я не уверен, насколько это отличается от предыдущего набора команд.

После применения этого варианта добавление пользователя в группу admin(11.10 и ealrier) или sudo(12.04 и более поздние версии) выполняется аналогичным образом:

adduser username admin    # 11.10 and earlier
adduser username sudo     # 12.04 and later
Jodi
источник
2

Старый вопрос, но тоже случилось со мной (Ubuntu 14.04).

Мне не удалось войти в режим восстановления и получить доступ к корневой оболочке, как описывают многие ответы здесь и в других местах: доступ к корневой оболочке из GRUB, кажется, защищен паролем.

Поэтому я решил проблему следующим образом:

  1. загрузиться на живой USB-флешке
  2. открыть оболочку
  3. получить доступ к основной файловой системе HD Linux (вы можете найти ее точку монтирования в адресной строке Проводника файлов GUI, обычно после CTRL-L). cdвнутрь.
  4. отредактируйте файл etc/group(скажем, с помощью nano etc/groupчего-либо еще)
  5. найдите строку "sudo". Должно выглядетьsudo:x:27:admin,bob,alice
  6. добавить себя в sudoстроку, разделив запятую

Конечно, это означает, что файл etc/sudoersвсе еще содержит строку

%sudo   ALL=(ALL:ALL) ALL

Это означает, что все члены группы sudoимеют полный контроль. Сначала проверьте это.

Работал без происшествий.

KEBS
источник
0

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

Принятый ответ мне не помог. При загрузке в режиме восстановления все, что я получил, было бесполезным сообщением

Не удается открыть доступ к консоли, root-аккаунт заблокирован. См. Man-страницу sulogin (8) для более подробной информации.
Нажмите ENTER для продолжения.

После нажатия клавиши ENTER система загрузилась нормально: не повезло, получив root-доступ для решения проблемы. Я оставляю этот ответ на случай, если к этому моменту кто-то окажется на моем месте. Используйте следующее, только если вы не можете перейти в режим восстановления через меню Grub .

Прохождение для получения корневой оболочки:

  1. Загрузитесь в меню Grub и выделите (но не нажимайте Enter!) Нормальную (по умолчанию, не восстановление!) Опцию загрузки.
  2. Нажмите e. Grub отобразит редактор командной строки с несколькими строками, каждая из которых может показаться незнакомой, если не пугающей. Не волнуйтесь, все сделанные вами изменения не сохраняются навсегда.
  3. Найдите строку, которая читает linux ... ro .... Это командная строка ядра. Заменить roтокен rw, чтобы сделать корневую файловую систему чтения / запись, и добавить еще один параметр командной строки ядра, init=/bin/sh. Это указывает ядру на выполнение shвместо /sbin/init. В конце строка должна выглядеть так linux ... rw init=/bin/sh .... Примечание: вы можете обойтись даже с голой grub>подсказкой. Я буду рад объяснить, как шаг за шагом, если все остальное не сработает для вас; просто оставьте комментарий к этому ответу.
  4. После изменения нажмите, F10чтобы использовать команды из редактора для загрузки системы (или прочитайте инструкции по загрузке прямо под окном редактора, если ваш Grub скомпилирован по-другому). Вы получите приглашение корневой оболочки, так как процесс init запускается как PID 1 с идентификатором root.
  5. Сделайте изменения, которые вы хотите сделать, например usermod -a -Gadm,sudo YOURUSERID. Подтвердите, id -a YOURUSERIDчто вы получили членство в sudo. Если вы получили ошибку «команда не найдена», используйте /sbin/usermodи /bin/id.
  6. Вы не можете выключить или перезагрузить систему в этот момент. reboot, haltили poweroffне будет работать, и exitиз оболочки приведет к панике ядра, так как процесс PID 1 не ожидается просто выйти. Итак, следующие две команды, которые вы должны выполнить:

    sync
    exec /sbin/init
    

    syncна всякий случай, если что-то пойдет не так, чтобы сохранить все изменения на диске и execзаменить оболочку реальной init(которая может быть systemd, upstart или System V init, но она всегда вызывается /sbin/init). Скорее всего, система продолжит загрузку в обычном режиме (без режима восстановления).

  7. Войдите в систему и перезагрузите систему один раз, например - sudo rebootвы должны были получить обратно привилегию sudo. Рекомендуется перезагрузка, поскольку (хотя и очень редко) initмогут передаваться дополнительные параметры при обычной загрузке, а мы этого не делали. В случае execсбоя просто перезагрузите компьютер и дайте ему нормально загрузиться. Все современные файловые системы журналирования, такие как ext4, xfs и btrfs, быстро восстанавливаются (максимум несколько секунд для проверки журнала, если syncредактируется до сброса), и все будет готово.

Немного фона

В отчете об ошибках Debian обсуждалась именно эта проблема, и, насколько я понимаю, это была определенная функция, а не ошибка, которую я считаю скорее ошибкой. Пробыв в этом бизнесе 25 лет, я не могу не согласиться с доводом Майкла Библа в сообщении № 31 в этой теме:

Учтите это: у вас есть ноутбук с заблокированной учетной записью root. По умолчанию загрузчик grub создает загрузочную запись для режима восстановления. Таким образом, даже если вы заблокируете биос, чтобы запретить загрузку с CD-Rom или USB, и вы защищаете паролем grub, кто-то может легко получить root-доступ, если вы на мгновение оставите ноутбук без присмотра.

Правильное ИМО, если не достаточно общее, возражение было дано в сообщении № 70 Фелипе Сателером:

Для многих (большинства?) Компьютеров физический доступ означает потерю игры в плане безопасности, так как вы можете просто разобрать коробку и получить жесткий диск.

Это особенно верно для ноутбука, упомянутого в аргументе Майкла: если вы оставите его без присмотра на мгновение, а кто-то ищет ваши данные, ноутбук просто исчезнет, ​​и его больше никогда не увидят. И для любой машины, а не для «многих» или «большинства», даже для тех, кто врезается в стойку с 8 точками, как только злоумышленник получает физический доступ к машине, игра действительно заканчивается.

ККМ
источник