스크립트에서 명령 행을 통해 쉘 변경 (chsh 사용)


11

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

chsh -s /bin/zsh

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

답변:


21

다음은 잠긴 계정이 셸을 변경하지 못하게하고, 사람들이 선택적으로 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:~$ 

작동하는 해결책, 이것이 여전히 받아 들여지지 않는지 궁금합니다.
dimpiax

감사. 이것은 키 쌍 전용 인증을 사용하는 사용자가 sudo없이 쉘을 변경하도록하는 가장 깨끗한 방법 인 것 같습니다. 이 pam.d 물건은 매우 흥미 롭습니다!
François Drolet 2012 년

4

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는 시스템을 우회하고 근절하기가 매우 쉽다는 것입니다. sudoers다른 방법 (setuid / setgid 실행 파일, 그룹 권한 등)을 충족 할 수없는 특정 요구가 없는 한 변경 하지 않는 것이 좋습니다 .

2

사용자 이름을 전달해야합니다. 이를 통해 sudo(또는 루트로) 이 작업을 수행 하면 이전 비밀번호를 묻지 않고 사용자 비밀번호 / 쉘을 설정할 수 있습니다. 자세한 내용 man chsh을 확인 하십시오.

이제 제 질문은 : 왜 그렇게 하시겠습니까? 설정 스크립트 인 경우 생성시 (예 : 시작시 adduser) 사용자 셸만 변경하면 안 됩니까? 시스템을 원격으로 복제하는 경우 /etc/passwd먼저 변경하지 않아야 합니까? 전체 설치 프로세스를 자동화하고 설치할 셸 선택이 첫 번째 사용자를 만든 후가 아니라면 스크립트를 통해이를 수행 할 이유가 없습니다.


그것은 ec2 기계 (기계가 시작한 직후에 실행하는 스크립트)를위한 것입니다. 기본 시작 셸을 변경하고 싶습니다. "sudo chsh -s / bin / zsh user_name"도 작동하지 않습니다 (여전히 사용자의 비밀번호를

스크립트를 사용하고 #!/usr/bin/sudo -s(shebang line)을 사용하십시오. 또한 zsh가 / bin에 있고 아마도 / usr / bin에 있지 않습니까? (방금 확인, EC2에 익숙하지 않습니다)
lorenzog

이 답변은 sudo권한 이 있다고해서 불완전합니다 . sudo일반 사용자에게 필요하지 않은 다른 접근 방식에 대해서는 광산을 참조하십시오 .

0

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


명령은 chsh또는 usermod입니다. passwd파일을 직접 편집하지 말고 항상 해당 vipw명령을 사용하십시오 .

0

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

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

이것은 실제로 zsh를 루트 사용자의 기본 터미널로 설정합니다.
lcguida

@lcguida 맞습니다.
dimpiax
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.