chsh: "'사용자 이름'에 대한 쉘을 변경할 수 없습니다."

chsh: "'사용자 이름'에 대한 쉘을 변경할 수 없습니다."

내 사용자의 기본 셸을 변경하려고 합니다. 하지만 계속해서 다음 오류가 발생합니다.

$ chsh
You may not change the shell for 'flimm'.
$ chsh -s "$(which bash)"
You may not change the shell for 'flimm'.

내 사용자를 위해 쉘을 변경할 수 없는 이유를 이해하려고 노력 중입니다.

답변1

이것이 setuid 루트임을 확인했기 때문에 /usr/bin/chsh(따라서 권한이 없는 사용자가 자신의 로그인 셸을 변경할 수 있도록 허용해야 함) 이 동작에 대한 가장 가능성 있는 설명은 다음 중 하나입니다.

  • 현재 로그인 쉘이 /etc/shells 파일에 없습니다

또는

  • 현재 로그인 셸이 제한되었습니다(아마도 /bin/rbash).

전.

$ grep fish /etc/shells || echo "invalid shell"
invalid shell
$ 
$ sudo chsh -s /usr/bin/fish testuser
$ 
$ su - testuser
Password:
Welcome to fish, the friendly interactive shell
testuser@t400s ~> chsh -s /bin/bash
You may not change the shell for 'testuser'.
testuser@t400s ~> exit

루트가 사용자의 로그인 쉘을 유효하지 않은 쉘(여기서와 같이)로 설정하는 데에는 제한이 없으며, 이렇게 해도 /etc/shells 파일에 추가하여 유효하지 않은 쉘을 유효하게 만들지는 않는다는 점에 유의하십시오.

$ sudo chsh -s /bin/rbash testuser
$     
$ su - testuser
Password:
testuser@t400s:~$
testuser@t400s:~$ chsh
You may not change the shell for 'testuser'.
testuser@t400s:~$ exit

만약표적쉘이 /etc/shells 파일에 없으면 다른 메시지를 받았을 것입니다:

$ sudo chsh -s /bin/bash testuser
$ 
$ su - testuser
Password:
testuser@t400s:~$ chsh -s /usr/bin/fish
Password:
chsh: /usr/bin/fish is an invalid shell

답변2

sudo usermod -s /bin/bash flimm 명령으로 시도해 볼 수 있습니다.

답변3

사용자의 로그인 셸은 에 보관되며 /etc/passwd일반 사용자가 수정하지 못하도록 보호됩니다. 으로 보실 수 있습니다 getent passwd $USER.
새 셸이 에 나열되어 있으면 /etc/shells다음을 사용하여 변경할 수 있습니다.

sudo chsh -s $(type -p bash) $USER

Ctrl-Alt-F3모든 로그인 정보 조작과 마찬가지로 문제가 발생하여 로그인할 수 없는 경우를 대비하여 다른 터미널( )에서 로그인 세션을 갖도록 하십시오 .

관련 정보