SSH 연결을 처리할 때 시스템은 어떤 단계를 거치나요?

SSH 연결을 처리할 때 시스템은 어떤 단계를 거치나요?

SSH 연결을 처리할 때 시스템은 어떤 단계를 거치나요?

  1. SSH를 통해 로그인을 시도합니다
  2. sshd신원을 확인하기 위해 pam 및 pam 모듈을 시작하십시오.
  3. pam 구성에 따라 사용자 이름과 비밀번호를 제공해야 합니다(pam 체크섬 passwd파일 shadow).
  4. hosts.allow/denypam은 , /etc/shells및 기타 항목을 확인합니다 .
  5. 모든 것이 잘되면 로그인합니다
  6. ???
  7. 쉘이 시작되었습니다

passwd그래서 내 질문은 파일에서 사용자에게 할당된 쉘을 확인하는 역할을 하는 메커니즘은 무엇입니까 (6단계)? pam 자체인가요, 특정 pam 모듈인가요 sshd, 아니면 다른 것인가요? pam 모듈을 작성하여 파일(사용자 이름과 비밀번호 확인용)을 바꿀 수 있다는 것을 알고 있지만 쉘 항목에 대한 파일을 passwd어떻게 바꾸나요 ?passwd

답변1

내가 아는 한, PAM은 사용자의 쉘을 결정할 수 없으며 이는 애플리케이션에 달려 있습니다. PAM의 세션 모듈은 특정 서비스를 사용하여 로그인할 때마다 수행해야 하는 일반적인 작업과 확인을 수행합니다. 이후에 응용 프로그램이 셸을 시작하려고 하면 마음대로 그렇게 할 수 있으며 일반적으로 사용자 데이터베이스에서 셸을 찾습니다.

귀하의 질문이 다음과 같다고 가정합니다.SSH 열기, 이것이 바로 수행되는 작업입니다. 사용자가 인증되고 PAM 세션 콘텐츠가 완료되면(PAM1을 사용하도록 구성된 경우) ssh 서버는 사용자 데이터베이스에서 셸을 찾습니다(PAM 라이브러리를 통하지 않고 직접).

사용자 데이터베이스는 /usr/passwd친구에만 국한되지 않습니다. Linux에서는(이 내용을 언급한 후 Linux를 사용하고 있다고 가정합니다) 사용자 데이터베이스의 구성은 다음 설정에 따라 shadow결정됩니다 .passwd/etc/nsswitch.conf. 다중 시스템 설정에서 로컬 데이터베이스에 대한 일반적인 추가는 다음과 같습니다.국정원그리고LDAP. 사용하려는 셸이 에 있는 셸이 아닌 경우 /etc/passwd다음을 구성해야 할 수 있습니다. (약간 이상하겠지만 달성하려는 목표를 알려면 사람들이 더 나은 제안을 제공할 수 있습니다.)

사용자가 전체 셸 액세스 권한을 갖지 못하도록 하려면 자연스러운 해결책은 /etc/passwd제한된 셸을 넣도록 변경하는 것입니다.RSSHscp, rsync 및 cvs와 같은 몇 가지 파일 복사 유형의 응용 프로그램만 허용됩니다. 사용자 디렉터리에서 force 명령을 사용할 수도 있습니다.~/.ssh/authorized_keys문서.

SSH 서버가 수행하는 작업을 보려면 데몬을 시작하십시오 ssh -ddd. ssh -vvv여기서는 서버 보기에 가장 관심이 있지만 Get the client's view 를 사용할 수도 있습니다 .

1 OpenSSH는 PAM 지원이 구성되고 UsePAM지시어가 에 설정된 경우에만 yesPAM을 사용합니다 sshd_config. PAM을 사용하더라도 특히 PAM 외에 다른 인증 방법을 제공하므로 공개 키 인증은 PAM을 거치지 않습니다.

관련 정보