로그인 쉘에 대해 주어진 옵션 중 어느 것이 참입니까?
- 로그인 쉘은 사용자가 로그인할 때마다 달라집니다. 커널은 로그인 중에 쉘의 가용성을 결정합니다.
- 로그인 쉘은 특정 시스템의 모든 사용자에 대해 고정되어 있습니다. 구성할 수 없습니다.
- 로그인 쉘은 관리자가 /etc/passwd 파일에서 구성할 수 있습니다.
- 위의 항목 중 어느 것도 없습니다.
답변1
커널은 특정 항목(프로세스, 파일)에 대한 태그인 숫자 ID 외에는 사용자에 대해 아무것도 모릅니다. 사용자 영역에서 발생하는 "로그인"이라는 개념이 없습니다.
로그인 프로세스를 처리하는 프로그램( login
텍스트 모드 콘솔에서는디스플레이 관리자그래픽 콘솔에서는 원격 로그인과 같은 데몬이 sshd
먼저 telnetd
사용자를 인증하고 다른 작업을 수행합니다.팸자주 사용됩니다. 그것은 가지고있다많은 기능인증, 로깅, 사용자 데이터베이스 등에 관련됩니다. 프로그램이 루트로 실행에서 원하는 사용자로 실행으로 전환된 후 로그인 프로세스의 마지막 단계(성공한 경우)는 로그인 쉘을 호출하는 것입니다.
로그인 쉘은 사용자 계정 데이터베이스에서 결정됩니다. 사용자 데이터베이스에는 여러 유형이 있습니다. 가장 일반적인 것은/etc/passwd
(또는 드물게 다음을 통해 구성된 다른 파일도 있습니다.NSS)(로컬 시스템에 있는 간단한 텍스트 파일)국정원그리고LDAP여러 컴퓨터에서 계정을 사용할 수 있는 네트워크에서 사용되는 네트워크 데이터베이스입니다.
사용자는 다음을 사용하여 쉘을 변경할 수 있습니다.chsh
로컬 계정에 대한 명령ypchsh
NIS 계정의 경우 또는chsh.ldap
LDAP 계정의 경우. 어떤 곳에서는 chsh
사용 중인 계정 데이터베이스 유형에 상관없이 작동하도록 명령이 설정되어 있습니다. 사용자는 파일에 나열된 쉘 사이에서만 전환할 수 있습니다 /etc/shells
. 이는 보안 조치(쉘이 나열되지 않은 사용자는 제한된 계정을 갖고 있는 것으로 추정되며 변경할 수 없음)이자 안전 조치(존재하지 않거나 제한된 쉘로 변경하면 계정이 효과적으로 잠길 수 있음)입니다. 관리자는 chsh
명령을 실행하거나 데이터베이스를 직접 편집하여 모든 계정의 로그인 셸을 변경할 수 있습니다.
정상적으로 구성된 시스템에서는 유용한 쉘 프로그램이 나열되고 /etc/shells
해당 프로그램이 작동합니다. (1)은 일반적으로 그렇지 않더라도 로그인 쉘이 다양할 수 있고(사용자 또는 관리자가 chsh
언제든지 호출할 수 있음) 기술적으로 사실입니다. 물론 프로그램을 시작하면 커널이 프로그램 파일을 로드하고 다음과 같은 경우 실패하게 됩니다. 파일이 존재하지 않거나 손상되었습니다.
-
로그인 프로그램은 이름 앞에 대시가 있는 프로그램 이름으로 설정된 인수 0을 사용하여 로그인 쉘을 실행합니다 . 예를 들어, 로그인 쉘이 /bin/bash
(전체 경로가 필요하고 조회가 $PATH
수행되지 않음) 경우 인수 0은 입니다 -bash
. 인수 0은 일반적으로 프로그램 이름입니다. 추가 대시는 쉘이 로그인 쉘 역할을 하도록 지시합니다. 로그인 쉘은 시작 시 추가 파일을 실행합니다(예: /etc/profile
및 ~/.profile
; 보다로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?이 부분에 대한 자세한 내용은.
이 객관식 시험은 각 옵션이 참으로 해석될 수 있기 때문에 잘 설계되지 않았습니다.
(1): 사용자가 로그인할 때마다 로그인 쉘이 결정되는 것은 사실이다. 로그인 과정에서 쉘의 사용 가능 여부를 커널이 결정하는 것도 사실이다. 따라서 기술적으로 (1)은 사실입니다(기술적 정확성은 정확성의 가장 좋은 형태입니다. 그렇죠?). 그러나 (1)은 커널이 로그인 쉘이 무엇인지 결정하지 않고 로그인이나 쉘의 개념조차 가지고 있지 않기 때문에 매우 오해의 소지가 있습니다.
(2)는 서로 다른 사용자가 서로 다른 로그인 쉘을 가질 수 있으므로 일반적으로 사실이 아닙니다. 그러나 어떤 이유로든 모든 사용자가 동일한 셸을 사용하는 설정이 있습니다. 예를 들어 시스템 간에 계정이 공유되고 어디에서나 사용이 보장되는 유일한 셸인 이기종 네트워크가 있습니다 /bin/sh
.
(3)은 아마도 의도된 대답일 것입니다. 왜냐하면 /etc/passwd
관리자가 로그인 쉘을 구성할 수 있는 곳이기 때문입니다. 그러나 /etc/passwd
직접 편집해서는 안 되며, vipw
명령이나 chsh
. 또한 로컬이 아닌 계정은 /etc/passwd
.
답변2
몇 가지 사실을 확인해 보겠습니다.
테스트해보세요.
echo $SHELL
. 이제 로그아웃하고 다시 로그인하세요.echo $SHELL
. 헹구고, 씻고, 반복하세요. 매번 같은 대답./etc/passwd
로그인 쉘은 모든 사용자에 대한 내용에서 파생됩니다 . 해당 파일에 설정된 값은 시스템의 각 사용자에 대한 로그인 셸 값이 됩니다. 사용자가 다른 쉘을 실행할 수 있지만 에 값이 설정되지 않으면 로그인 쉘이 아닙니다/etc/passwd
.수동으로 실행하는 다양한 셸에서 명령을 시도하여 이를 확인할 수 있습니다.
bash -c "get-shell" sh -c "get-shell" zsh -c "get-shell"
이러한 모든 명령은 어떤 쉘에서 실행하든 상관없이 동일한 출력을 제공합니다. 로그인 쉘의 값은 사용자가 실행하기로 선택한 쉘이 아니라
/etc/passwd
.시스템에 없는 경우 위 명령 내부를
get-shell
대체하여 사용자 로그인 셸을 결정할 수 있습니다.getent passwd $(whoami) | cut -d: -f7
이는 관리자의 지식 수준에 따라 크게 달라집니다. 파일 을 편집하려면
/etc/passwd
루트로 텍스트 편집기를 시작하는 방법에 대한 지식과 파일의 단일 문자도 엉망으로 만들지 않는 손재주가 필요합니다. 닌자가 이것을 해낼 수도 있지만, 이 글을 읽는 관리자는man chsh
그것이 로그인 쉘을 조정하는 프로그램이라는 것을 알게 될 것입니다:설명
chsh는 로그인 쉘을 변경하는 데 사용됩니다.위 답변 중 하나라도 사실이라면 이는 거짓이어야 합니다.