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

19

Я ошибочно вошел

chsh -s /usr/bin 

вместо того

chsh -s /bin/bash 

и теперь я не могу войти в корневую оболочку, как мне вручную запустить оболочку bash от имени root?

ChiseledAbs
источник
в каком контексте ты это сделал. В текущем терминале для пользователей оболочка по умолчанию?
jgr208
у вас нет пользователей в группе sudo?
Руи Ф Рибейро
3
делает sudo vipwработу?
Руи Ф Рибейру
1
@RuiFRibeiro да, это было спасибо, я не знал, что могу изменить корневую оболочку по умолчанию в этом файле
ChiseledAbs
1
В этом случае нет необходимости, но когда вы непреднамеренно создали катастрофу с участием пользователя root, вы обычно можете перевести машину в однопользовательский режим, исправить проблему и затем вернуться в многопользовательский режим.
Бордрайдер

Ответы:

29

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

Таким образом, ваш sudo, очевидно, работает.

Файл passwd можно редактировать с помощью:

sudo vipw

И корневая оболочка изменилась вручную.

( /etc/passwdобычно первая строка )

root:x:0:0:root:/root:/bin/bash

Fom man vipw

Команды vipw и vigr редактируют файлы / etc / passwd и / etc / group соответственно. С флагом -s они будут редактировать теневые версии этих файлов, / etc / shadow и / etc / gshadow соответственно. Программы установят соответствующие блокировки, чтобы предотвратить повреждение файла.

Руи Ф Рибейро
источник
3
Я никогда не знал о vipwи vigr, спасибо! Я всегда использовалsudo vim /etc/passwd
кошка
3
Вы также можете быть заинтересованы в visudo sudo.ws/man/1.8.15/visudo.man.html , @tac
Rui F Ribeiro
3
Или sudo -eэто выполняет функцию блокировки-редактирования для любого редактирования.
Кодзиро
16

Другой вариант, если у вас есть доступ к другой учетной записи, состоит в том, чтобы вручную переопределить оболочку по умолчанию, используя su --shell=/bin/bash:

-s, --shell = SHELL
запустить SHELL, если / etc / shells это позволяет

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

Xiong Chiamiov
источник
8

По соображениям безопасности, логины ли текстовые или графические и утилиты , как suи sudoчто позволяет запускать команды , как другой пользователь все запускать эти команды через оболочку целевого пользователя. Если оболочка целевого пользователя не работает, ну, вы видели результаты :-(

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

Загрузите спасательную систему, смонтируйте, скажем, корневую файловую систему вашей реальной системы /mnt/foo, и отредактируйте ее, /mnt/foo/etc/passwdчтобы исправить оболочку. Сохранить, размонтировать, и все готово.

Celada
источник
Любопытно, что произойдет, если вы сделаете это и файл / etc / passwd будет в хеш-коде вместо простого текста?
jgr208
1
/etc/passwdне открытый текст? Я не видел этого, по крайней мере, лет через десять. Это все еще вещь в некоторых системах? Во всяком случае, я полагаю, chroot /mnt/foo chsh -s /bin/bashможет быть в этом случае?
Селада
У меня никогда не было описанной проблемы, однако я работаю с заблокированными системами, которые должны иметь / etc / passwd не в виде простого текста, чтобы избежать хакеров и тому подобного, что еще больше скомпрометирует систему, если они получат доступ. Хм, это может сработать, скажем так, я надеюсь, мне никогда не придется пытаться понять, работает ли это на самом деле.
jgr208
Мне удалось отредактировать / etc / passwd с помощью sudo из учетной записи пользователя, я не знал, что оболочка была определена в этом файле, спасибо
ChiseledAbs
@ChiseledAbs о, ты был? Молодец, рад, что ты решил свою проблему. Я не думал, что это позволит вам.
Селада
6

Добавьте init=/bin/bashв командную строку ядра (при загрузке с помощью grub нажмите, eчтобы отредактировать загрузочную запись), и у вас будет оболочка bash, работающая от имени пользователя root, даже без ввода пароля. Вероятно, ваша корневая файловая система все еще будет монтироваться только для чтения, поэтому сначала вам нужно перемонтировать ее, а затем снова сменить оболочку chsh.

psusi
источник
4

sudo usermod -s /bin/bash jdoe

изменит оболочку jdoe на bash. Вы можете тогда sudo egrep jdoe /etc/passwdпроверить.

user208145
источник