로그인 셸과 관련하여 다음 옵션 중 올바른 것은 무엇입니까?
- 사용자가 로그인할 때마다 로그인 쉘이 달라집니다. 커널은 로그인 중에 쉘의 가용성을 결정합니다.
- 로그인 쉘은 특정 시스템의 모든 사용자에 대해 고정되어 있습니다. 구성할 수 없습니다.
- 관리자는 /etc/passwd 파일에서 로그인 셸을 구성할 수 있습니다.
- 위의 어느 것도 아닙니다.
답변1
커널은 무언가(프로세스, 파일)에 대한 레이블인 사용자의 숫자 ID 외에는 사용자에 대해 아무것도 모릅니다. 사용자 공간에서 발생하는 "로그인"이라는 개념이 없습니다.
로그인 프로세스를 처리하는 프로그램( login
텍스트 모드 콘솔에서는디스플레이 관리자그래픽 콘솔에서는 데몬(예: sshd
원격 telnetd
로그인 등)이 먼저 사용자를 인증하고 다른 작업을 수행합니다.폴리아크릴아미드자주 사용됩니다.많은 능력인증, 로깅, 사용자 데이터베이스 등과 관련됩니다. 프로그램이 루트로 실행에서 원하는 사용자로 실행으로 전환된 후 로그인 프로세스의 마지막 단계(성공한 경우)는 로그인 쉘을 호출하는 것입니다.
로그인 쉘은 사용자 계정 데이터베이스에 의해 결정됩니다. 사용자 데이터베이스에는 다양한 유형이 있습니다. 가장 일반적인 것은 다음과 같습니다./etc/passwd
(또는 드물게 다른 파일을 구성하여국가안보국)는 로컬 컴퓨터에 있는 간단한 텍스트 파일입니다.국정원그리고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
.
/etc/passwd
(3) 은 관리자가 로그인 셸을 구성할 수 있는 곳이므로 아마도 예상된 대답일 것입니다 . 하지만 /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는 로그인 쉘을 변경하는 데 사용됩니다.위 답변 중 하나라도 사실이라면 해당 답변은 거짓이어야 합니다.