개요
리눅스에서 새로운 쉘을 설치하거나 커스텀 스크립트를 사용자 로그인 쉘로 지정할 때 필수적인 add-shell 명령어의 개념과 원리를 설명합니다. /etc/shells 파일 관리부터 chsh 명령어와의 연동, 실무에서의 안전한 계정 쉘 관리 및 remove-shell 정리 방법까지 단계별로 실습합니다.
1. /etc/shells 파일의 역할과 현재 등록된 유효 쉘 확인
시스템에서 유효한 로그인 쉘 목록을 확인하기 위해 cat /etc/shells 명령어로 해당 파일의 내용을 조회합니다./etc/shells에 등록된 쉘 경로만 사용자가 chsh 명령어로 로그인 쉘을 변경할 수 있도록 허용되며, 시스템 보안 및 서비스 인증에 활용됩니다.

현재 시스템에 설치된 기본 쉘의 실제 실행 파일 위치를 확인하기 위해 which bash sh 명령어를 실행합니다.
조회된 /usr/bin/bash 및 /usr/bin/sh 경로가 /etc/shells 목록에 정상적으로 포함되어 있는지 비교하여 유효성을 검증할 수 있습니다.

2. 새 쉘(Zsh) 설치 및 add-shell을 이용한 시스템 쉘 등록
add-shell 실습을 위해 새로운 쉘 환경으로 사용할 zsh 패키지를 시스템에 설치합니다.

설치된 zsh 실행 파일의 시스템 전체 경로를 확인하기 위해 which zsh 명령어를 실행합니다.
현재 실행 결과에서는 경로가 출력되지 않아 패키지가 아직 정상적으로 설치되지 않았거나 실행 파일 위치를 찾지 못했음을 나타냅니다.

sudo add-shell $(which zsh) 명령어는 조회된 쉘 실행 파일의 전체 경로를 /etc/shells 파일에 유효한 쉘로 등록합니다.
앞선 명령어에서 zsh 경로를 찾지 못해 인자 없이 실행되었으므로 add-shell shellname 형식의 사용법 안내 메시지가 출력됩니다.

/etc/shells 파일 내에 zsh 경로가 정상적으로 추가되었는지 확인하기 위해 grep -E 'zsh$' /etc/shells 명령어로 검색합니다.
현재 실행 결과에서는 일치하는 항목이 없어 아직 /etc/shells에 zsh가 등록되지 않았음을 보여줍니다.

3. 커스텀 제한 쉘(Restricted Script) 생성 및 add-shell 등록
제한된 사용자 접속 환경을 구성하기 위해 안내 문구를 출력하는 간단한 커스텀 쉘 스크립트 파일을 생성하고 /usr/local/bin/custom-menu.sh 경로에 저장합니다.

생성한 스크립트를 독립적인 실행 파일로 동작시키기 위해 sudo chmod +x /usr/local/bin/custom-menu.sh 명령어로 실행 권한을 부여합니다.

작성한 사용자 정의 스크립트를 시스템 로그인 쉘로 승격시키기 위해 sudo add-shell /usr/local/bin/custom-menu.sh 명령어를 실행하여 /etc/shells 파일에 등록합니다.

/etc/shells 파일의 마지막 3개 항목을 확인하기 위해 tail -n 3 /etc/shells 명령어를 실행합니다.
조회 결과 새로 등록한 /usr/local/bin/custom-menu.sh 경로가 목록 끝에 정상적으로 추가되어 시스템 공인 쉘로 인정받았음을 확인할 수 있습니다.

4. 사용자 계정 연동 테스트와 remove-shell을 통한 안전한 정리
새로 등록한 커스텀 쉘을 기본 쉘로 사용하는 테스트 계정(testuser)을 생성하기 위해 sudo id -u testuser >/dev/null 2>&1 || sudo useradd -m -s /usr/local/bin/custom-menu.sh testuser 명령어를 실행합니다.

계정 생성 시 지정한 쉘 경로가 제대로 적용되었는지 확인하기 위해 grep '^testuser:' /etc/passwd 명령어로 계정 정보를 조회합니다.
조회 결과 testuser의 기본 로그인 쉘 항목에 커스텀 쉘 경로인 /usr/local/bin/custom-menu.sh가 정상 등록되었음을 확인할 수 있습니다.

쉘 연동 테스트 완료 후 실습용으로 생성했던 계정과 홈 디렉터리를 정리하기 위해 sudo userdel -r testuser 2>/dev/null || true 명령어를 실행합니다.

더 이상 사용하지 않는 커스텀 쉘을 시스템 공인 쉘 목록에서 제외하기 위해 sudo remove-shell /usr/local/bin/custom-menu.sh 명령어를 실행하여 /etc/shells 파일에서 해당 경로를 삭제합니다.

시스템에 남아 있는 커스텀 쉘 스크립트 실행 파일을 완전히 정리하기 위해 sudo rm -f /usr/local/bin/custom-menu.sh 명령어로 파일을 삭제합니다.

/etc/shells 파일에서 해당 쉘 경로가 완전히 제거되었는지 검증하기 위해 grep 'custom-menu.sh' /etc/shells || echo '등록 해제 완료' 명령어를 실행합니다.
파일 내에 일치하는 경로가 존재하지 않아 등록 해제 완료 문구가 출력되며 정상적으로 등록 해제되었음을 나타냅니다.

지금까지 add-shell 명령어로 /etc/shells에 셸을 등록하고 chsh와 연동하는 실무 활용법을 간단하게 살펴보았습니다.
직접 설정 파일을 수정하는 대신 표준 명령어를 활용해 시스템 환경을 더욱 안전하게 관리해보시기 바랍니다.