물론 이죠. 그렇게 할 수는 없습니다. 이것은 2FA의 목적을 무너 뜨릴 것이다. 귀하의 서버가 있어야 사용자 자격 증명을 확인하는 방법이 있고,이 정보는 네트워크를 통해 전송해서는 안된다 (예. 당신이 전적으로 client.ovpn 파일을 사용할 수 없습니다).
반드시 유닉스 사용자를 만들 필요는 없지만, 사용자가 자신의 인증 코드를 서버에 설치하도록해야합니다. 이미 발급 된 인증서, 클라이언트 쪽 (상호) 권한이있는 https, CIFS (삼바) 또는 TLS 확장이 포함 된 올바른 오래된 ftp 또는 사용자가 만든 확인 코드를 서버에 알리는 다른 방법을 사용하여 가상 사용자와 함께 sftp를 사용할 수 있습니다. . 통신 채널은 안전해야합니다 (암호화 된 || 로컬).
당연히 사용자가 자신의 파일을 업로드하는 경우 openvpn-otp에서 사용하는 집계 된 파일 기반 자격 증명을 사용할 수 없습니다. 다행히도 Linux의 우수한 보안 모듈 pam을 사용하여 또 다른 (그리고 훨씬 나은) 옵션이 있습니다.
우선, 위에서 언급 한 방법 중 하나를 사용하여 디렉토리에서 google-authenticator로 작성된 사용자 파일을 수집해야합니다. 이 경우에는 / etc / google-auth가됩니다.
당신은 있어야 당신이 실제 사용자가 없기 때문에, 여기에서 모든 파일을 하나의 사용자 ID를 적용합니다. openvpn 이라고하자 . 권한은 0400 (-r --------)이어야합니다. Pam은 월드 / 그룹이 읽을 수있는 자격 증명을 좋아하지 않습니다 (확실히). samba, apache, ftp 또는 cron 탭 (권장되지 않음)을 사용하여 최악의 경우이를 쉽게 시행 할 수 있습니다.
테스트 목적으로 다음을 수행하십시오.
mkdir /etc/google-auth
apt-get install libpam-google-authenticator
google-authenticator
# set up as you wish, save image and/or codes
mv ~/.google_authenticator /etc/google-auth/some_username
chown -R openvpn /etc/google-auth
그런 다음 openvpn에 자체 Google auth 모듈이있는 libpam에 대해 인증하도록 요청하십시오. 이것을 openvpn 서버 파일에 추가하십시오 :
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
이것은 pam auth id openvpn 과 함께 pam 인증 방법을 사용할 것이라고 말합니다 .
이제 openvpn에 대한 pam 설정을 만듭니다. /etc/pam.d/openvpn을 편집하십시오.
auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn
account required pam_permit.so
여기서 Google 인증에 실패하면 즉시 실패합니다 (필수). 기본 $ HOME / .google_authenticator (secret =) 대신 특수 비밀 파일을 사용하고 실제 사용자 ID가 없기 때문에 파일을 openvpn 사용자로 액세스합니다. 우리의 사용자와. 다음 줄에서는 인증 성공 후 모든 사람이 연결할 수 있다고 말합니다. 물론 여기에서 자신의 권한 정책을 구현해야합니다. 각 pam 모듈을 사용하여 파일, mysql db 또는 ldap을 통해 허용 된 사용자를 제어 할 수 있습니다.
이것을 openvpn 클라이언트 파일에 추가하십시오
auth-user-pass
auth-nocache
reneg-sec 0
우리는 auth-user-pass를 사용하여 openvpn 클라이언트가 사용자 이름과 비밀번호를 요청할 수 있도록합니다. 우리는 캐싱을 좋아하지 않으며 ( "비밀번호"가 변경됨) 같은 이유로 주기적 재협상이 우리에게 나쁩니다.
그 후에는 openvpn-otp없이 연결할 수 있어야합니다. 원하는 경우 pam 제어 파일에서 매우 복잡한 규칙을 구현할 수 있으므로이 방법이 훨씬 유연한 방법이라고 생각하십시오. 예를 들어 해당 인증서를 건드리지 않고 mysql 또는 ldap 디렉토리를 기반으로 사용자를 활성화 / 비활성화 할 수 있습니다.