본문 바로가기
리눅스

(번역) chsh

by 다움위키 2025. 1. 29.

원문 보기: https://dawoum.duckdns.org/wiki/Chsh

 

Original article: w:Chsh

chsh ("change shell"의 약어)은 로그인 을 변경하기 위해 사용되는 유닉스-계열 운영 시스템명령입니다. 사용자는 명령줄에서 변경하려는 쉘의 경로-이름을 제공하거나, 인수를 제공하지 않을 수 있으며, 이 경우에서 chsh는 사용자에게 대화형으로 쉘을 변경하는 것을 허용합니다.

Introduction

데비안에서, 설치 후 기본 쉘은 Bash (Unix shell)입니다. 아마도 리눅스 배포판에서 가장 광범위하게 기본 쉘로 선택되고 있어서 어떤 상황에서도 오류가 가장 적을 것으로 기대되는 쉘입니다.

반면에, Z shell과 같은 쉘은 배쉬에 새로운 기능을 추가함으로써 특히 생산성 향상을 기대할 수 있습니다.

이러다 보니, 간혹은 배포판에서 제공하는 bash 쉘에서 다른 쉘로 변경할 경우가 생길 수 있습니다. 보통 현재 사용자의 쉘을 zsh로 바꾸고 싶을 때에는 다음과 같이 간단히 바꿀 수 있습니다:

  • chsh -s $(which zsh)

일반 사용자가 루트 사용자의 쉘을 변경할 수 없으므로, 루트 사용자의 쉘을 변경하고 싶을 때에는 루트로 로그인한 후에 위의 명령을 사용하던지 아니면 일반 사용자에게 권한을 주어서 변경할 수 있습니다:

  • sudo chsh -s $(which zsh) root

Usage

chsh/etc/passwd 파일을 수정하는 setuid 프로그램이고, 보통의 사용자만 자신의 로그인 쉘을 수정하도록 허용합니다. 슈퍼유저는 명령줄 인수로 쉘을 수정할 사용자의 이름을 제공함으로써 다른 사용자의 쉘을 수정할 수 있습니다. 보안상의 이유로, 보통 사용자와 슈퍼유저 둘 다가 지정할 수 있는 쉘은 /etc/shells 파일의 내용에 따라 제한되며, 쉘의 경로-이름은 해당 파일에 나타난 것과 정확히 같아야 합니다. (이 보안 기능은 다른 구성 옵션으로 명령에 대해 소스 코드를 다시-컴파일함으로써 변경할 수 있고, 따라서 모든 시스템에서 반드시 활성화되는 것은 아닙니다.) 어쨌든, 슈퍼유저는 암호 파일을 직접 수정하여, /etc/shells를 참조하지 않고 chsh를 사용하지 않고도 모든 사용자의 쉘을 시스템의 모든 실행 파일로 설정할 수 있습니다.

대부분의 시스템에서, chsh가 -s 명령줄 옵션 (쉘 이름 지정) 없이 호출될 때, 사용자에게 쉘을 선택하라는 메시지가 표시됩니다. Mac OS X에서, 만약 -s 옵션 없이 호출되면, chsh는 기본 편집기 (처음에는 vim으로 설정됨)에 텍스트 파일을 표시하여, 사용자에게 변경이 허용된 사용자 계정의 모든 기능을 변경할 수 있도록 합니다. 쉘의 경로-이름은 "Shell:" 옆에 있는 이름입니다. 사용자가 vim을 종료할 때, 거기에서 변경한 내용이 /etc/passwd 파일로 전송되며 루트만 직접 변경할 수 있습니다.

-s 옵션을 사용하는 것은 (예를 들어, % chsh -s /usr/local/bin/bash) 쉘 변경 임무를 크게 간소화합니다.

시스템에 따라, chsh는 쉘을 변경하거나 대화형 모드로 들어가기 전에 사용자에게 암호를 묻거나 묻지 않을 수 있습니다. 일부 시스템에서, 비-루트 사용자에 의한 chsh의 사용은 시스템 관리자에 의해 완전히 비활성화됩니다.

많은 리눅스 배포판에서, chsh 명령은 PAM-인식 응용 프로그램입니다. 이를테면, PAM 구성 옵션을 사용하여 개별 사용자에 맞게 동작을 조정할 수 있습니다. 예를 들어, pam_listfile.so 모듈을 지정하는 auth 지시문을 사용하여 접근을 거부할 사용자 이름이 있는 파일을 해당 모듈에 listfile= 옵션과 함께 지정하여 (sense=deny 옵션과 함께) 개별 사용자에게 chsh 접근을 거부할 수 있습니다.

Portability

POSIX/etc/passwd에 있는 사용자의 엔트리를 수정하는 데 사용되는 chsh와 같은 유틸리티를 설명하지 않습니다. 대부분의 유닉스-계열 시스템은 chsh를 제공합니다. SVr4-기반 시스템은 passwd로 유사한 기능을 제공했습니다. 나머지 세 시스템 중 두 시스템 (IBM AIXHP-UX)은 passwd -e 외에도 chsh를 제공합니다. 예외는 Solaris로, NIS 또는 NIS+와 같은 네트워크 이름 서버가 설치되지 않은 한 관리자가 아닌 사용자는 쉘을 변경할 수 없습니다. 폐기된 SGI SVr4 시스템 IRIX64에도 chsh가 없습니다.

Further reading