루트가 아니거나 비밀번호를 입력하지 않고 스크립트에서 영구적으로 zsh로 전환합니다.

루트가 아니거나 비밀번호를 입력하지 않고 스크립트에서 영구적으로 zsh로 전환합니다.

chsh -s /bin/zsh루트 없이 비밀번호 없이 실행할 수 있는 방법이 있나요 ? 나는 이것을 루트에 의해 호출되지 않는 비대화형 스크립트에 넣고 싶습니다.

답변1

로그인 셸을 변경할 권한이 없으면 bash(bash가 로그인 셸이라고 가정함)에 이를 zsh로 바꾸도록 지시할 수 있습니다. yours에 ~/.bash_login다음 줄을 추가하세요.

exec /bin/zsh --login

답변2

귀하의 버전에 chsh비밀번호가 필요한 경우(제가 그랬습니다) 특별한 권한을 사용하여 sudo를 설정해야 합니다. 다음과 같이 비밀번호를 묻지 않고 모든 프로그램에 액세스할 수 있도록 구성할 수 있습니다.

user   ALL=(ALL) NOPASSWD:/usr/bin/chsh

여기서 "user"는 사용자 이름(또는 % 접두사가 붙은 그룹 이름)입니다. chsh이렇게 하면 사용자가 루트로 다른 것을 실행할 수는 없지만(스크립트 포함) 바이너리는 비밀번호 없이 루트로 실행될 수 있으므로 사용자 비밀번호 프롬프트를 우회할 수 있습니다 .

답변3

특정 요구 사항에 따라 긴 스크립트를 실행하고 있고 해당 질문 중간에 중단되는 것을 원하지 않기 때문에 이 작업을 수행하려는 경우 미리 암호를 요청한 다음 권한을 chsh사용하여 실행할 수 있습니다. sudo의 비밀번호입니다 stdin.

read -p 'What is your password?' sudo_password

# rest of the script here

sudo -S chsh -s '/bin/zsh' "${USER}" <<< "${sudo_password}"

-Ssudo에서 비밀번호를 읽 습니다 stdin. 깨닫다가능한 보안 위험이 접근 방식을 사용하십시오(그러나 나는 이것을 재현할 수 없었으며 필요에 따라 문제가 되지 않을 수도 있습니다).

관련 정보