많은 튜토리얼에서 ssh 서버를 다음과 같이 구성하라고 말합니다.

ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no 

하지만 이 설정에서는 PAM을 사용할 수 없습니다. Google Authenticator(OTP Onetime Password)와 함께 2단계 인증을 사용할 계획이므로 PAM이 필요합니다.

그래서 일반 비밀번호로 로그인하는 것을 막고 여전히 PAM을 사용하도록 허용하려면 새로운 데비안 jessie ssh 데몬을 구성하는 방법.

아마도 정확한 질문은 암호를 허용하지 않도록 pam을 구성하는 방법일 것입니다.

Details on PAM Authentication

Disabling PAM-based password authentication is rather un-intuitive. It is needed on pretty much all GNU/Linux distributions (with the notable exception of Slackware), along with FreeBSD. If you're not careful, you can have PasswordAuthentication set to 'no' and still login with just a password through PAM authentication. It turns out that you need to set 'ChallengeResponseAuthentication' to 'no' in order to truly disable PAM authentication. The FreeBSD man pages have this to say, which may help to clarify the situation a bit:

Note that if ChallengeResponseAuthentication is 'yes', and the PAM authentication policy for sshd includes pam_unix(8), password authentication will be allowed through the challenge-response mechanism regardless of the value of PasswordAuthentication.

http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html

answer

maybe the exact question is how to configure pam to disallow passwords?

옳은. 설정 UsePAM no이 일반적으로 좋지 않은 조언 이라는 사실을 이미 알게 되었습니다 . 뿐만 아니라 그것은 또한, 그것은 PAM 기반 인증의 형태를 방지 비활성화 수행 accountsession모듈. 액세스 제어 및 세션 구성은 좋은 것입니다.

먼저 요구 사항 목록을 작성해 보겠습니다.

  • OTP를 통해 pam_google_authenticator.so. 이것은 UsePAM yes가 필요합니다 ChallengeResponseAuthentication yes. 결국 자격 증명을 요구하는 것입니다!
  • PAM을 통한 다른 형태의 비밀번호 인증은 없습니다. 이는 로그인을 auth통해 암호를 전송할 수 있는 모듈을 비활성화하는 것을 의미 keyboard-interactive합니다. (OTP에 대해 활성화된 상태로 두어야 함)
  • 키 기반 인증. publickey인증이 필요하며 gssapi-with-micKerberos가 구성되어 있는 경우일 수 있습니다.

일반적으로 키로 인증하면 PAM 기반 인증을 완전히 건너뜁니다. 이것은 이전 버전의 openssh를 사용하여 트랙에서 우리를 멈추게 했을 것이지만 Debian 8(jessie)은 이 AuthenticationMethods지시문을 지원합니다 . 이를 통해 여러 인증 방법을 요구할 수 있지만 SSHv2를 구현하는 클라이언트에서만 작동합니다.


SSH 구성

아래는 제가 제안하는 라인입니다 /etc/ssh/sshd_config. 당신이 sshd무언가를 깨뜨릴 경우를 대비 하여 이 시스템에 접근할 수 있는 방법이 있는지 확인하십시오 !

# Require local root only
PermitRootLogin no

# Needed for OTP logins
ChallengeResponseAuthentication yes
UsePAM yes

# Not needed for OTP logins
PasswordAuthentication no

# Change to to "yes" if you need Kerberos. If you're unsure, this is a very safe "no".
GSSAPIAuthentication no


# Require an OTP be provided with key based logins
AuthenticationMethods publickey,keyboard-interactive

# Use this instead for Kerberos+pubkey, both with OTP
#
#AuthenticationMethods gssapi-with-mic,keyboard-interactive publickey,keyboard-interactive

sshd이러한 변경 사항이 적용되면 다시 로드하는 것을 잊지 마십시오 .

PAM 구성

여전히 PAM을 구성해야 합니다. Debian 8을 새로 설치한다고 가정합니다(귀하의 질문에 따라).

  • 님의 댓글 @include common-auth입니다 /etc/pam.d/sshd.
  • /etc/pam.d/sshd시작하는 줄이 없는지 검토 하고 확인합니다 auth. 새로 설치하면 안되지만 안전한 것이 가장 좋습니다.
  • 에 대한 auth항목을 추가합니다 pam_google_authenticator.so.

로컬 암호는 여전히 작동한다는 것을 기억하십시오.

로컬 콘솔을 통한 로그인에 영향을 미치거나 사용자가 비밀번호를 사용하여 권한을 업그레이드하는 것을 방지하는 변경을 하지 않았습니다. sudo.이것은 질문 범위를 벗어났습니다. 더 나아가기로 결정했다면 루트는 항상 비밀번호를 통해 로컬로 로그인할 수 있어야 한다는 점을 기억하십시오. 그렇지 않으면 실수로 시스템에서 자신을 잠글 위험이 있습니다.

암호 요청을 허용하지 않으려면

이 줄에 주석을 달다

#auth       substack     password-auth

/etc/pam.d/sshd에서

OTP를 사용하지 않고 ssh를 통해 인증해도 괜찮지 않다면 이 줄 끝에 nullok가 없어야 합니다.

auth required pam_google_authenticator.so