su -s '/bin/bash' /etc/passwd에서 셸을 계속 사용합니다.

su -s '/bin/bash' /etc/passwd에서 셸을 계속 사용합니다.

/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/screenroot

(다른 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

왜냐면 나는 보통 똑같은 멍청한 짓을 두 번은 안 하기 때문이다.

관련 정보