답변:
다음은 잠긴 계정이 셸을 변경하지 못하게하고, 사람들이 선택적으로 chsh
sudo 또는 su없이 사용할 수 있도록 합니다.
이것을 맨 위에 추가하십시오 /etc/pam.d/chsh
:
# This allows users of group chsh to change their shells without a password.
#
# Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
#
auth sufficient pam_wheel.so trust group=chsh
chsh 그룹을 작성하십시오.
groupadd chsh
usermod -a -G chsh username
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$
chsh는 / etc / passwd에서 사용자와 관련된 행을 실제로 변경하지만, 사용자는 / etc / passwd에서 자신의 '줄'만 변경할 수 있습니다. 따라서 다른 사용자의 쉘을 변경하려면 passwd가 필요합니다.
당신이 정말로 그것을 원한다면 (Lorenzo의 게시물의 우려와 가능한 보안 문제를 감안할 때) 다음과 같이하십시오.
#visudo
루트 권한이 필요합니다.
현재 "alice"로 실행 중이고 비밀번호없이 "bob 's"쉘을 변경하려고한다고 가정하십시오.
파일에 추가하십시오.
Cmnd_Alias SHELL = /usr/bin/chsh
Runas_Alias SH = Bob
alice ALL = (SH) NOPASSWD: SHELL
이렇게하면 SHELL의 명령 그룹에 비밀번호없이 SH 그룹의 사용자로서 모든 호스트에서 'alice'를 실행할 수 있습니다.
아마도 이런 식으로하기 위해 조금 가져 왔을 수도 있지만 가능합니다.
sudores 파일을 'visudo', 특히 보안 관련 메시지로 변경하기 전에 "man sudoers"를 읽으십시오!
사용자 이름을 전달해야합니다. 이를 통해 sudo
(또는 루트로) 이 작업을 수행 하면 이전 비밀번호를 묻지 않고 사용자 비밀번호 / 쉘을 설정할 수 있습니다. 자세한 내용 man chsh
을 확인 하십시오.
이제 제 질문은 : 왜 그렇게 하시겠습니까? 설정 스크립트 인 경우 생성시 (예 : 시작시 adduser
) 사용자 셸만 변경하면 안 됩니까? 시스템을 원격으로 복제하는 경우 /etc/passwd
먼저 변경하지 않아야 합니까? 전체 설치 프로세스를 자동화하고 설치할 셸 선택이 첫 번째 사용자를 만든 후가 아니라면 스크립트를 통해이를 수행 할 이유가 없습니다.
#!/usr/bin/sudo -s
(shebang line)을 사용하십시오. 또한 zsh가 / bin에 있고 아마도 / usr / bin에 있지 않습니까? (방금 확인, EC2에 익숙하지 않습니다)
명령 /etc/password
을 사용하여 파일 에서 사용자의 셸을 변경할 수 있다고 생각합니다 passwd
. 아직 읽지 않았지만 유용 할 수 있습니다 : UNIX 셸 차이점 및 셸 변경 방법 .