[server] Ubuntu 14.04.1에서 작동하는 공개 키 (암호 없음) + Google 인증기로 SSH를 가져 오려고합니다.

Ubuntu 14.04.1 (OpenSSH 6.6 및 libpam-google-authenticator 20130529-2 사용)을 사용하고 있습니다.

공개 키가 인증없이 (암호없이) SSH 로그인을 설정하려고하는데 사용자에게 Google OTP의 코드를 입력하라는 메시지가 표시됩니다.

다음 안내에 따라 Google Auth 프롬프트와 함께 비밀번호 프롬프트를 받았습니다.

나는 패키지를 설치 한 내 편집 한 /etc/ssh/sshd_config/etc/pam.d/ssh파일

에서 /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
AuthenticationMethods  publickey,keyboard-interactive
UsePAM yes

아래에 /etc/pam.d/ssh:

auth required pam_google_authenticator.so nullok # (I want to give everyone a chance to set up their 2FA before removing "nullok")

PAM이 주문에 종속적이라는 sshd_config것도 알고 있습니다.

내가 무엇을 잘못하고 있지? 도움을 주시면 감사하겠습니다.



답변

잘 작동했는지 먼저 확인하십시오.

apt-get install libpam-google-authenticator

에서 /etc/pam.d/sshd내가 변경 / (상단)에 다음 줄을 추가 :

# @include common-auth
auth required pam_google_authenticator.so

그리고 /etc/ssh/sshd_config:

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

제대로 작동하고 공개 키로 인증 한 후 “확인 코드”프롬프트가 나타납니다. PAM에서 암호 인증 방법을 효과적으로 제거했기 때문에 암호 + 토큰 또는 키 + 토큰으로 인증을 허용하는 방법을 잘 모르겠습니다.

ssh -v와 함께 Ubuntu 14.04.1 LTS (GNU / Linux 3.8.0-19-generic x86_64) 사용 : OpenSSH_6.6.1p1 Ubuntu-2ubuntu2, OpenSSL 1.0.1f 2014 년 1 월 6 일


답변

나는 마침내 auth [success=done new_authtok_reqd=done default=die] pam_google_authenticator.so nullok의 맨 위에 배치 하여이 작업을 수행 할 수있었습니다 /etc/pam.d/sshd.

pam.d 매뉴얼 페이지 에 따르면 :

  • success=done 이는 Google OTP가 로그 오프하면 더 이상 인증이 수행되지 않으므로 추가 비밀번호 프롬프트가 표시되지 않음을 의미합니다.
  • default=die 즉, Google OTP가 로그인 시도를 거부하면 비밀번호 프롬프트를 건너 뛰고 인증이 즉시 실패합니다.

그래서 [success=done new_authtok_reqd=done default=die]정렬 사이의 혼합이다 sufficientrequisite성공, 즉시 (충분한) 종료 할 경우, 실패하는 경우, 즉시 (필수) 종료 : 우리 모두에서 동작을 원하기 때문에, 제어 값.

nullokpam_google_authenticator.so에 대한 인수 ~/.google_authenticator는 사용자에 대한 파일을 찾을 수없는 경우 공개 키 인증이 정상적으로 진행됨을 의미합니다. 2FA로 내 계정의 하위 집합 만 잠 그려는 경우에 유용합니다.


답변

Linus Kendall의 답변은 구형 시스템에서는 작동하지만 최신 Linux 시스템에서는 문제가 있습니다. 내 아치 리눅스 기반 웹 서버에서 구성하면 ssh 키를받은 후 pam에서 인증 자 코드와 암호를 요구합니다 (즉, 3 개 모두 필요).

이 문제를 방지하고 모든 시스템에서 작동해야하는보다 간단한 솔루션은 다음과 같이 항목을 변경하는 것입니다 /etc/pam.d/sshd.

auth sufficient pam_google_authenticator.so

그런 다음 Linus가 언급 한“/ etc / ssh / sshd ”에 대해 동일한 편집을 수행하십시오.

ChallengeResponseAuthentication yes
UsePAM yes
AuthenticationMethods publickey,keyboard-interactive
PasswordAuthentication no

서버가 공개 키를 수락 한 후 인증 자 토큰을 요청해야합니다. 비밀번호를 요구해서는 안됩니다.

참고로 sftp 사용자 계정을 사용하려면 작동하기 위해 Google 인증자를 우회해야 할 수도 있습니다. 다음은 sftp jail을 안전하게 사용하는 방법에 대한 제안입니다. 에서 etc/ssh/sshd_config:

Subsystem sftp internal-sftp
Match User ftp-user
  PasswordAuthentication yes
  AuthenticationMethods password
  ChrootDirectory /path/to/ftp/dir
  ForceCommand internal-sftp

당신은 /에 / FTP / 디렉토리 루트 쓰기 만 (예 :에 / 경로 권한을 확인해야합니다 chown root:root /path/to/ftp/dir, chmod 755 /path/to/ftp/dir. 그 디렉토리 위의 부모의 모든 또한 보안 권한이 필요합니다. 나는 보통이 작업을 수행하는 방법을 chroot를 디렉토리를 만드는 것입니다 /home/shared/user하는을 만드는 거기에 디렉토리 (예 : ‘data’)를 입력 한 다음 다음과 같이 공유하려는 디렉토리를 마운트하십시오.sudo mount -o bind /path/to/ftp/dir /home/shared/user/data

이 모든 단계를 수행하면 ssh 사용자를위한 공개 키 + Google 인증 자 로그인 및 데이터 전송을위한 기능 암호로 보호되는 sftp 계정이 있습니다.


답변