나는 최신 버전의 로그인 셸(zsh)을 자주 실행합니다. 어제 최신 버전이 버그가 있어서 바로 다운이 됐습니다. 버그가 있는 쉘에 대한 링크를 수정할 수 있도록 안정적인 버전을 실행하는 다른 터미널이 열려 있기 때문에 터미널에서 실행하는 것은 큰 문제가 아닙니다. 그런데 어리석게도 /etc/passwd에 있는 결함이 있는 쉘을 재부팅하고 활성화했는데, 로그인 프롬프트가 떴을 때 결함이 있는 쉘로 인해 로그인을 할 수 없었습니다. 이 문제를 해결할 수 있는 방법이 있는지, 대체 쉘을 설정하는 방법이 있는지, 또는 기본값에 결함이 있는 경우 로그인 시 다른 쉘을 묻는 메시지가 표시되는지 궁금합니다. 실제로 백업설치까지 재부팅해서 그렇게 복구했는데 좀 서툴더군요.
답변1
셸이 완전히 버그가 있고 호출 시 오류와 함께 종료되는 경우 셸 및/또는 종료 코드를 실행하고 자체를 대체 수단으로 사용하는 POSIX 셸 스크립트인 가짜 셸을 만들 수 있습니다.
#!/bin/sh
# this is usually some incredibly limited shell like dash
fallback_shell=/bin/sh
primary_shell="$(getent passwd `whoami` | cut -d: -f7)"
"$primary_shell" || "$fallback_shell"
답변2
루트로 로그인할 수 있는지 확인하세요. 일부 배포판에서는 루트로 직접 로그인하는 것을 금지하지만 루트 계정에 비밀번호를 할당하기만 하면 활성화할 수 있습니다. 안전하지 않습니다(적어도 계정 비밀번호만큼 강력한 비밀번호를 선택하세요). 물론 루트 계정에서는 실험적인 셸을 사용하지 마세요. 어쨌든 해당 계정에서 복잡한 작업을 수행해서는 안 됩니다.
추가 보안을 위해 사용자 데이터베이스에 동일한 사용자에 대한 추가 항목을 생성할 수 있습니다. /etc/passwd
동일한 사용자 ID(즉, 동일한 사용자임)를 사용하지만 다른 사용자 이름(로그인 프롬프트에서 구별할 수 있도록), 다른 홈 디렉토리 및 다른 로그인 쉘을 사용하여 여러 항목을 생성 할 수 있습니다 . 이러한 항목을 생성하려면 /etc/passwd
명령을 실행하여 편집 vipw
하고 계정에 대한 항목을 복사한 다음 두 번째 항목의 사용자 이름과 로그인 셸을 변경합니다. 그런 다음 vipw -s
비밀번호 파일 수정( )을 실행하면 /etc/shadow
계정 항목을 복사하고 사용자 이름을 변경하지만 비밀번호는 유지합니다.
/etc/passwd
예를 들어, 다음은 my ( sash
시스템 복구에 유용한 몇 가지 추가 내장 명령이 포함된 정적으로 연결된 셸) 의 처음 두 줄입니다 .
root:x:0:0:root:/root:/not/bin/sh
sashroot:x:0:0:root:/root:/bin/sash