SSH 연결을 처리 할 때 시스템이 수행하는 단계는 무엇입니까?


9

SSH 연결을 처리 할 때 시스템이 수행하는 단계는 무엇입니까?

  1. ssh를 통해 로그인을 시도합니다
  2. sshd pam 및 pam 모듈을 시작하여 인증
  3. pam 구성에 따라 사용자 이름과 비밀번호 (pam 확인 passwdshadow파일) 를 제공해야합니다.
  4. 팸에 대한 검사 hosts.allow/deny, /etc/shells그리고 다른 것들
  5. 모든 것이 잘되면 로그인됩니다
  6. ???
  7. 셸이 시작되었습니다

그래서 제 질문은 passwd파일 에서 어떤 쉘이 사용자에게 할당되어 있는지 확인하는 메커니즘은 무엇입니까 (6 단계)? pam 자체, 특정 pam 모듈 sshd또는 다른 것입니까? passwdpam 모듈을 작성 하여 파일 (사용자 이름 및 비밀번호 확인 용)을 교체 할 수 있지만 passwd쉘 항목 의 파일을 어떻게 교체 할 수 있습니까?

답변:


8

내가 아는 한 PAM은 사용자의 셸을 결정하지 않으며 응용 프로그램에 맡겨집니다. PAM의 세션 모듈은 특정 서비스를 사용하여 로그인 할 때마다 수행해야하는 일반적인 작업 및 검사를 수행합니다. 응용 프로그램이 셸을 시작하려는 경우 자유롭게 시작하며 일반적으로 사용자 데이터베이스에서 셸을 찾습니다.

귀하의 질문이 OpenSSH 에 관한 것이라고 가정하면 , 정확히 그렇게합니다 : 일단 사용자가 인증되고 PAM 세션 작업이 완료되면 (PAM¹을 사용하도록 구성된 경우) ssh 서버는 사용자 데이터베이스에서 직접 셸을 조회합니다 PAM 라이브러리를 통해).

사용자 데이터베이스는 /usr/passwd친구로 제한되지 않습니다 . Linux (내가 언급 한 이후에 사용한다고 가정 shadow)에서 사용자 데이터베이스를 구성하는 것은의 passwd설정에 의해 결정됩니다 /etc/nsswitch.conf. 다중 컴퓨터 설정에서 로컬 데이터베이스에 일반적으로 추가되는 것은 NISLDAP 입니다. 의 쉘이 아닌 쉘을 사용 /etc/passwd하려면 구성해야 할 내용 일 수 있습니다 (조금 이상 할 수도 있지만 달성하려는 것을 알려 주면 사람들이 더 나은 제안을 제공 할 수 있습니다).

완전한 셸 액세스 권한이없는 사용자를 원한다면 자연스러운 해결책은 scp, rsync 및 cvs와 같은 소수의 파일 복사 유형 응용 프로그램 만 허용하도록 /etc/passwd제한된 셸 (예 : rssh) 을 배치 하도록 변경 하는 것 입니다. 사용자 ~/.ssh/authorized_keys파일 에서 강제 명령을 사용할 수도 있습니다 .

ssh 서버가 수행중인 작업의 추적을 보려면 데몬을로 시작하십시오 ssh -ddd. ssh -vvv여기에서 서버의 관점이 가장 중요하지만 클라이언트의 관점을 얻을 수도 있습니다 .

¹ 이 PAM 지지체로 구성되며, 경우 OpenSSH를 단지 PAM을 사용 UsePAM지시로 설정 yes에서 sshd_config. PAM을 사용하더라도 PAM 외에 다른 인증 방법을 제공합니다. 특히 공개 키 인증은 PAM을 거치지 않습니다.


내 응용 프로그램 사용자가 시스템에서 계정을 만들지 않고 일반 사용자로 셸에 로그인 할 수 있도록하고 싶습니다. 사용자 데이터 (사용자 이름, 패스 및 셸)는 sqlite db에 저장됩니다. 첫 번째 단계는 사용자를 다시 인증하는 sqlite pam 모듈입니다. 두 번째 단계는 데이터베이스에서 읽은 쉘을 제공하는 것입니다. 적절한 nis 모듈을 작성하면 달성 할 수 있다고 생각합니다. 답변을위한 것보다 ...
pbm

@pbm : 나는 당신이 원하는 생각하지 않는다 nis, 오히려 db(혹은 사용자 정의 모듈).
Gilles 'SO- 악마 중지'11

"오타 (맞춤형) nss 모듈을 작성하는 것"을 의미했습니다.
pbm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.