/etc/passwd에서 루트 쉘을 수동으로 편집했는데 오타가 있었습니다. 설상가상으로 내 상자에는 sudo 사용자가 없습니다.
그래서 다음을 시도했고 다음과 같은 결과를 얻었습니다.
$ su -s '/bin/bash chsh root' root
Password:
Cannot execute /usr/bin/scrrn: No such file or directory
(내가 한 짓 봤지? 윽.)
나는 맨 페이지에서 이것이 바로 이것 때문이라고 생각합니다.
If the target user has a restricted shell (i.e. the shell field of
this user's entry in /etc/passwd is not listed in /etc/shells),
then the --shell option or the $SHELL environment variable won't be
taken into account, unless su is called by root.
어쩌면 내 질문이 su -s에 관한 것이 아니어야 할 수도 있지만 여기서부터 시작할 수 있습니다.
답변1
한 가지 가능성은 단일 사용자 모드로 시스템을 부팅하거나 복구 부팅 USB 플래시 드라이브(배포판에 따라 다름)를 사용하여 오타를 수정하는 것입니다./etc/passwd
많은 Linux 시스템에서는 매개변수화된 커널을 실행하도록 GRUB 부트 로더에 지시할 수 있습니다 init=/bin/bash
. 이렇게 하고 나면 다시 편집할 수 있습니다.주의 깊은당신의/etc/passwd
그건 그렇고, 올바른 일은 쉘을 변경하는 것이지만 실제로는 그렇게 하고 chsh
싶지 않습니다.chsh
/usr/bin/screen
root
(다른 uid 0과 쉘 계정을 만들 수 있습니다 /usr/bin/screen
. 그게 현명한지는 잘 모르겠습니다...)
마지막으로 잘 읽어보세요수(1):
-s
,--shell=
껍데기Run the specified shell instead of the default.
따라서 다음을 실행해야 합니다 /bin/su -s /bin/bash
./bin/bash chsh root
아니요실행 파일의 경로(다음과 같을 수 있음)실행(2)-d를 쉘로 사용), 쉘이 목록에 없으면 루트에는 영향을 주지 않습니다./etc/shells
당신은 또한 시도할 수 있습니다/usr/bin/sudo SHELL=/bin/bash -s
답변2
@Basile Starynkevitch에게 50%의 신용을 주거나 그가 별도의 답변을 썼더라도 좋겠습니다. 그의 제안 중 하나가 나를 올바른 길로 인도해 주었기 때문입니다.
1 - @Basile Starynkevitch가 말했듯이 머신을 부팅할 수 있었고 GRUB에서 "e"를 눌러 부팅 옵션을 편집했습니다. "linux"로 시작하는 줄에 매개변수를 추가했습니다.
init=/bin/bash
루트 bash 쉘로 부팅됩니다. 진전!
2 - 파일 시스템이 읽기 전용으로 마운트되어 있기 때문에 파일 시스템의 루트로서 여전히 아무것도 편집할 수 없습니다(GRUB에서 해당 옵션을 제거했지만 이유는 조사하지 않았더라도). 따라서 다음을 입력해야 합니다.
# mount -o remount,rw /
그런 다음 다음을 진행할 수 있습니다.
3 - /etc/passwd 파일 편집
@Basile Starynkevitch가 말했듯이:
그런데 쉘을 변경하는 올바른 방법은 chsh입니다.
그가 옳다. 하지만 난 방금 그랬어
# vi /etc/passwd
왜냐면 나는 보통 똑같은 멍청한 짓을 두 번은 안 하기 때문이다.