Можно ли переустановить sudo после удаления?

61

Кажется, это проблема куриного яйца. Наиболее распространенная задача sudo- установка и удаление программного обеспечения.

sudo apt-get purge <appname>

Но sudoсама может быть удалена.

sudo apt-get purge sudo # Do not run this command on production computers!

Вот где веселье приходит

ubuntu@ubuntu:~$ sudo
bash: /usr/bin/sudo: No such file or directory

Хотя очевидно, что ни один здравомыслящий человек не очистит себя sudo(кроме меня), кто-то может быть одурачен, чтобы запустить эту команду (не напрямую, в ее шестнадцатеричном режиме или как она там называется), или человек может замаскироваться под SSH как технический гуру. и сделать беспорядок .

Так есть ли способ переустановить sudo?

зарегистрированный пользователь
источник
3
хорошо, что я даже не знал, что sudo тоже может быть очищен! Linux просто настолько чертовски настраиваемый!
user247696
На самом деле не стоит ответа, так как было бы слишком поздно, если бы это произошло, но ничто не мешает вам установить пароль для rootпользователя. Затем вы можете использовать suили войти в систему как root, если у вас есть физический доступ к машине (ssh обычно будет настроен так, чтобы отклонять попытки входа в систему как root).
IMSoP
Все ответы зависят от способа доступа к файловой системе с привилегиями. Для (контр) примера: мой Android Asus Memopad не имеет sudoи не имеет «безопасной загрузки» или аналога. Единственный способ, которым я знаю, - это перейти к xda-devпредварительно собранному пакету полной установки. Вам, так сказать, повезло, что у вас нет этого ограничения.
Карл Виттофт
@CarlWitthoft Android - это производная от Linux, а не дистрибутив Linux. Кроме того, Google внес много изменений (которые ненавидят большинство поклонников Linux). Рутинг , который хорошо известен на Android-смартфонах, - это не что иное, как попытка получить возможности настоящего Linux на Android.
Зарегистрированный пользователь
4
Вы не можете просто войти как root?
Конрад Хеффнер

Ответы:

56

Я могу установить приложения, используя:

pkexec apt-get install <appname>

От man pkexec:

  pkexec allows an authorized user to execute PROGRAM as another user. If
  username is not specified, then the program will be executed as the
  administrative super user, root.

Итак, я полагаю, что это pkexec apt-get install sudoдолжно сработать.


Изменить : теперь я могу подтвердить: да , sudoможет быть установлен с помощью pkexec apt-get install sudo:

переустановить sudo

( нажмите, чтобы увеличить )

Раду Рэдяну
источник
@RaduRadeanu Это интересно, я собираюсь попробовать это благодаря
тебе
@Premkumar Проверьте это с осторожностью! Последняя команда с экрана съемки должно быть , вероятно , только в вашем случае: sudo apt-get install gksu ubuntu-minimal. Но лучше проверить, какие пакеты были удалены одновременно с sudo.
Раду Радеану
5
@Thebluefish Пакет называется policykit-1(по состоянию на 12.04). Его можно удалить, но за счет удаления пакетов, которые обычно требуются в настольных системах, таких как gnome-coreи ubuntu-desktop(на сервере это, скорее всего, не потребуется ни одним необходимым пакетом). Тем не менее, Раду, что определяет, что ваша учетная запись может использовать pkexec apt-get …? Это то, что вы настроили, или это происходит автоматически, и если да, то что определяет, что учетная запись может сделать это?
Жиль "ТАК - перестань быть злым"
1
@ Жиль, я не помню, чтобы когда-то в этом смысле были сделаны некоторые конфигурации. Итак, я полагаю, это происходит автоматически. Если вы знаете, что определяет, что учетная запись может сделать это, пожалуйста, поделитесь; это за пределами моей области знаний.
Раду Рэдяну
2
@ Жиль Я думаю, что члены sudoгруппы могут использовать pkexec. (Мой опыт показывает, что добавление пользователей в эту группу наделяет их pkexecспособностями, а удаление их из нее удаляет pkexecспособности; таким образом, pkexecвозможности, по-видимому, присваиваются так же, как и sudoвозможности в sudoersконфигурации по умолчанию , что имеет смысл, поскольку возможность sudoи pkexecправа root главным образом то, что делает пользователя администратором в Ubuntu.) Я не думаю, что удаление sudoудалит sudoгруппу. Но я не совсем уверен, что мои предположения верны при всех разумных обстоятельствах.
Элия ​​Каган
29

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

Войтех Трефны
источник
16
Вы можете добавить существенную и актуальную часть по ссылке здесь?
Зарегистрированный пользователь
Если в загрузочном меню grub нет восстановления, нажмите <kbd> e </ kbd> и добавьте `single` к строке загрузки. Затем при загрузке установите пароль root с помощью passwd. Перезагрузитесь обычно, в командной строке введите suновый пароль и запустите apt-get install sudo(без sudoпрефикса)
ExploWare
1
Как вы получили интернет-соединение на корневой оболочке?
Авинаш Радж
22

Да, переустановка sudoпакета будет возможна с помощью метода chroot .

  • Первая загрузка с живого диска Ubuntu.

  • Смонтируйте ранее установленный раздел Ubuntu в любой каталог. В моем случае я смонтировал его /media/ubuntu.

    sudo mkdir /media/ubuntu
    sudo mount /dev/sdaX /media/ubuntu   # /dev/sdaX - previously installed Ubuntu partition.
    
  • По умолчанию вы не смогли получить подключение к Интернету после привязки к разделу. Для этого запустите приведенную ниже команду.

    for d in dev sys run proc; do sudo mount --bind /$d /media/ubuntu/$d ; done
    

Спасибо @Oli за этот замечательный кусок кода.

  • Теперь перейдите в этот смонтированный каталог,

    $ sudo chroot /media/ubuntu
    # apt-get update
    
  • Установить sudoпакет, запустив,

    # apt-get install sudo
    
  • Теперь выйдите из изолированного окружения.

    exit
    
  • Наконец загрузите вашу Ubuntu OS. Теперь проверьте вашу sudoкоманду, она наверняка сработает.

Авинаш Радж
источник
4

Загрузитесь с дополнительным параметром init=/bin/shв командной строке ядра. Это поместит вас прямо в корневую оболочку, откуда вы можете просто запустить apt-get install sudoи перезагрузить компьютер. Возможно, вам придется запустить, /etc/init.d/networking startчтобы сначала получить работающее сетевое соединение. Гораздо проще, чем возиться с восстановительными или живыми дисками, если вы спросите меня.

Жюль
источник
1

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

su
apt-get install sudo

введите описание изображения здесь

Нажмите здесь, чтобы увеличить

Авинаш Радж
источник
это работает, если учетная запись root включена, а в ubuntu она обычно отключена. suна моем компьютере выдает «su: Ошибка аутентификации», хотя я предоставил правильный пароль
BЈовић
да, вы правы, это то, что я сказал. Если вы уже обновили пароль учетной записи пользователя root, то вам не нужно беспокоиться об удалении. sudoТеперь попробуйте это sudo passwd root, это позволит вам обновить пароль учетной записи пользователя root. Теперь повторно войдите в свою учетную запись root. запустив suкоманду. Как только вы сможете войти, вы сможете очистить sudo. sudo apt-get purge sudoТеперь очистите sudo с помощью .Login в своей учетной записи root, чтобы переустановить пакет sudo, запустив suиapt-get install sudo
Avinash Raj
-1

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

Физический доступ сводит на нет все и вся программную безопасность вашей системы.

Павел
источник
Я рекомендую расширить это, чтобы объяснить, что вы подразумеваете под «копированием существующего программного обеспечения».
Элия ​​Каган
Не очень легкий способ исправить это все же.
Сет
@ Сидит без вмешательства, я серьезно сомневаюсь, что это можно исправить без написания другого ответа
Брайам
Хорошо, правильный способ сделать это - chroot, но есть гораздо меньше менее варварских способов. Например, войдя в систему как root (НОРМАЛЬНЫЙ способ) или, если у вас почему-то нет пароля root, просто установите init = / bin / bash в качестве параметра ядра, и вы пропустите всю систему инициализации, включая аутентификацию входа в систему.
Орион
-2

Эта проблема, кажется, очень специфична для Ubuntu. Как не пользователь Ubuntu, я даже сначала не понимал, почему sudo будет каким-то особенным случаем (многие дистрибутивы не устанавливают его по умолчанию).

Тебе вообще не нужен sudo. Это просто ленивый ярлык, который позволяет вам выполнить команду root без фактического входа в систему как root. Однако, если вам нужно сделать что-то большее, чем одна команда, просто ужасно постоянно ставить префикс перед sudo. Не говоря уже о том, что использование sudoделает пользователей неосведомленными о том, как работают разрешения и учетная запись root. Гораздо разумнее просто войти в систему как root, выполнить администрирование системы и выйти из системы. Что вы делаете, suесли вы уже вошли в систему как обычный пользователь. Или вы можете войти прямо как root.

Конечно, вам нужно установить rootпароль, это разумная конфигурация, в противном случае у вас есть Windows-подобная система, в которой есть действия, которые никто не может выполнить, и вы действительно заблокированы, если что-то sudoнедоступно (это требует работы /etc/, установки $PATHи др.). вещи смонтированы - чего у вас может не быть, если что-то пойдет не так в начале загрузки).

Орион
источник
Это может быть полезной информацией, но она не отвечает на вопрос.
Луис де Соуза
На самом деле. Это на самом деле не то, что отношение к системе , где пароль суперпользователя является инвалидом и Судо будет установлен по умолчанию. И если вы посмотрите на другие ответы, вы увидите, что последний абзац также не соответствует действительности.
Оли
Пользователь, который рассматривает удаление sudoиз Ubuntu, должен также рассмотреть возможность установки пароля root (другие вопросы указали, как это сделать). Пользователь, который не заботится об этом, может продолжать использовать sudo.
Орион