3 단계 인증?


9

우분투를 사용하고 있습니다.

libpam-google-authenticator (휴대 전화에서 생성 된 코드를 사용하여 로그인 할 수 있음)와 함께 작동하도록 인증서 인증을 설정하고 가능한 경우 어떻게 진행되는지 궁금합니다. 설정. 따라서 내 계정에 로그인하려면 내 비밀번호, 내 휴대 전화 (및 비밀번호) 및 인증서 / 개인 키 및 비밀번호가 있어야합니다.

나는 독립적으로 일을했지만 그들과 함께 일할 수 없었습니다. 그래도 가능할 것입니다.

감사.


일반적으로 중복 요인으로 많은 것을 얻지 못합니다. 인증서와 코드 생성기는 '있는 것'요소에 맞습니다. 비밀번호는 '알고있는 것'에 맞습니다. 다른 일반적인 요소는 '무엇인가'(생체)입니다.
Zoredache

답변:


8

PAM 모듈을 체인으로 연결하여이 작업을 수행 할 수 있습니다. 그러나 세부 정보를 얻기 전에 :

PAM을 잘못 구성하면 시스템에 로그인하지 못할 수 있습니다.

고맙게도 항상 단일 사용자 모드로 부팅하고 문제를 해결할 수 있지만 PAM이 필요 이상으로 엉망이 아니라는 경고를 받으십시오.

어쨌든,이 뒤에 아이디어는 확인하십시오를 만들기 위해 쌓아 PAM 모듈을 사용 할 수 있다는 것입니다 pam-google-authenticator, pam_unix(이 검사 암호) 및 인증서 모듈은 모든 당신에게 액세스를 허용하기 위해 성공해야합니다. 기본적으로 PAM은 다른 인증 모듈을 건너 뛰고 모든 인증 모듈이 사용자를 인증 할 수 있도록 구성되어 있습니다.

/etc/pam.d/common-auth에서 맨 위 근처에 다음과 유사한 줄이 표시됩니다.

auth    [success=2 default=ignore]  pam_unix.so nullok_secure try_first_pass

이는 PAM에게 pam_unix.so성공 해야한다는 것을 알려주고 다음 두 규칙 (보통 다른 인증 모듈 pam_deny.so) 을 건너 뛰고 옵션 모듈로 진행합니다. 그러나 모듈이 실패하면 무시되고 제어는 체인의 다음 모듈로 넘어갑니다. 제어가 선택적 블록으로 건너 뛰거나 PAM이 pam_deny.so에 도달하여 실패 할 때까지 각 인증 모듈이 계속 작동합니다.

이것은을 보장하기 위하여 활용 될 수있다 pam-google-authenticator, pam_unix.so당신의 인증서 PAM 모듈은 모든 당신에게 액세스를 허용하기 위해 성공해야합니다. 사용중인 Google 인증 자 모듈 또는 인증서 모듈의 이름을 모르지만 공통 인증 파일에서 찾을 수 있어야합니다. 따라서 맨 위에 다음과 같은 것을 넣으십시오.

auth    requisite   pam_unix.so nullok_secure
auth    requisite   pam_google_authenticator.so
auth    requisite   pam_certificate_auth.so
auth    [success=<n>]   pam_permit.so

장착 <n>여기 pam_permit.so 모듈 및 다음과 모듈의 수와 pam_permit.so모듈 - 말하면 이것은 코드 + 1이 구문은 비트 펑키 최상위 인증 모듈의 설정 [성공 = N 기본 = 무시]되어야 위의 모듈이 성공한 후 인증 모듈을 건너 뜁니다.

물론이 3 단계 인증을 사용자 계정으로 만 제한하는 방법이 궁금 할 수도 있습니다. pam_succeed_if.so모듈 로 수행 할 수 있으며 위에서 설명한 3 단계 인증 블록 위에 삽입해야합니다.

auth    [success=ignore default=4]  pam_succeed_if.so user = <username>

어디에서 <username>사용자 이름으로 대체됩니다. 이 줄은 단순히 pam_succeed_if.so가 성공하면 (즉, 사용자 이름이 해당 줄의 사용자 이름과 일치 함) PAM은 다음 모듈 인 3 단계 인증 모듈로 진행해야합니다. 그렇지 않으면 PAM은이 모듈에서 4 개 모듈 떨어진 실제 모듈로 이동해야합니다.

예를 들어 특정 사용자 이름과 함께 그룹 멤버십과 같은 여러 항목을 일치 시키려면 다음과 같이 여러 줄을 사용해야합니다.

auth    [success=1 default=ignore]  pam_succeed_if.so user = <username>
auth    [success=ignore default=4]  pam_succeed_if.so user ingroup <group>

이 작업을 수행하기 전에 공용 인증 파일을 백업하고 단일 사용자 모드와 응급 상황에서 이전 파일을 복원하는 방법에 익숙해 질 것입니다. 이 구성은 나에게 테스트되지 않았지만 작동해야합니다.

이것을 처음으로 테스트하려면 루트 셸을 두 개 열어 두십시오. 공통 인증을 백업으로 쉽게 대체 할 수 있기 때문에 문제가 발생하는 경우 대체로 작동합니다. 그런 다음 변경하십시오. 다음으로 su사용자 계정에 로그인하여 3 단계 인증 프로세스를 거쳐야합니다.

pam_succeed_if.so모듈에 대한 전체 문서 는 http://linux.die.net/man/8/pam_succeed_if 에서 찾을 수 있습니다


훌륭한 답변! 내가 이것을 두 번 이상 공표 할 수 있다면 나는 할 것이다.
Aaron Miller

감사! 하지만 - 인증서 로그인을 위해 내가 스푸핑에 내 공개 키를 추가 해요 / authorized_keys에은 (sshd_config에있는 RSAAuthentication 및 PubkeyAuthentication 설정을 사용)과 OTP 코드를 나는 pam_google_authenticator 사용하고 있습니다 - google-authenticator.googlecode.com/hg을 . 어떻게 작동할까요?
Jesse W

@JesseW 이것이 작동하려면 공개 키뿐만 아니라 PAM을 사용하도록 SSHD를 설정해야합니다. 확실하지는 않지만 확실하게 설정 ChallengeResponseAuthentication하고 UsePAM'예'로 설정 한 다음 위의 답변에 자세히 표시된 줄을 /etc/pam.d/sshd 또는 /etc/pam.d/common으로 설정해야합니다. -auth, 모든 로그인에 대해이 작업을 수행할지 아니면 SSH 만 수행할지에 따라 다릅니다. 'pam_certificate_auth.so'필러 줄을 제거하고 결과적으로 [success = <n> 줄을 수정하십시오.
Xenopathic

2

이 게시물을 읽고 멋지게 들렸다 고 생각했습니다. 다음은 3 단계 인증이 작동하는 방법입니다. 나는 그것에 대해 블로그 게시물을 작성한 사람 여기 .

기본적으로 PAM에서 Google OTP와 비밀번호를 설정 한 다음 OpenSSH에서 공개 키 인증을 설정하고 (이 두 가지를 우회) 마지막으로 OpenSSH에서 PAM (마지막 행)을 통해 인증해야합니다.

/ etc / ssh / sshd_conf에서

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

1

Pubkey + GoogleAuth 만 /etc/pam.d/sshd의 맨 위에 추가해야합니다

#auth    requisite    pam_unix.so nullok_secure #if you want password, too :)
auth    requisite    pam_google_authenticator.so
auth    [success=2]  pam_permit.so

OpenSSH> = 6.2이고 sshd_config가 편집되었다고 가정합니다.

더 많은 편집증 보안을 위해 몇 가지 추가 구성을 추가하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.