스크립트에서 명령 행을 통해 쉘 변경 (chsh 사용) /bin/zsh 그러나 이것은 사용자의

컴퓨터를 설정하는 시작 스크립트에서 실행하고 싶습니다.

chsh -s /bin/zsh

그러나 이것은 사용자의 비밀번호를 요구합니다. 비밀번호를 매개 변수로 어떻게 전달합니까? 아니면 sudo power가 있다면 어떻게 든 그 단계를 우회 할 수 있습니까? 아니면 기본 시작 셸을 변경하는 다른 방법이 있습니까?



답변

다음은 잠긴 계정이 셸을 변경하지 못하게하고, 사람들이 선택적으로 chshsudo 또는 su없이 사용할 수 있도록 합니다.

여전히 안전한 간단한 설정 :

  1. 이것을 맨 위에 추가하십시오 /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
    
  2. 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먼저 변경하지 않아야 합니까? 전체 설치 프로세스를 자동화하고 설치할 셸 선택이 첫 번째 사용자를 만든 후가 아니라면 스크립트를 통해이를 수행 할 이유가 없습니다.


답변

명령 /etc/password을 사용하여 파일 에서 사용자의 셸을 변경할 수 있다고 생각합니다 passwd. 아직 읽지 않았지만 유용 할 수 있습니다 : UNIX 셸 차이점 및 셸 변경 방법 .


답변

sudo chsh -s /bin/zsh다음을 시도하십시오 .

  1. 서버 종료
  2. 터미널을 다시 시작
  3. 서버에 로그인하여 확인하십시오 echo $SHELL– 성공한 경우 변경 🙂

답변