Natürlich kannst du das nicht. Dies würde den eigentlichen Zweck von 2FA zunichte machen. Ihr Server muss über eine Möglichkeit verfügen, die Benutzeranmeldeinformationen zu überprüfen, und diese Informationen sollten nicht über das Netzwerk gesendet werden (dh Sie können nicht nur die Datei client.ovpn verwenden).
Sie müssen zwar nicht unbedingt Unix-Benutzer erstellen, aber Sie müssen Ihre Benutzer ihre Bestätigungscodes auf dem Server installieren lassen. Sie können SFTP mit virtuellen Benutzern verwenden, indem Sie deren bereits ausgestelltes Zertifikat, https mit clientseitiger (gegenseitiger) Autorisierung, CIFS (Samba) oder gutes altes FTP mit TLS-Erweiterung oder auf andere Weise verwenden, um den Server über die von den Benutzern erstellten Bestätigungscodes zu informieren . Der Kommunikationskanal sollte sicher sein (verschlüsselt || lokal).
Wenn Ihre Benutzer ihre eigenen Dateien hochladen, können Sie natürlich nicht die aggregierten dateibasierten Anmeldeinformationen verwenden, die von openvpn-otp verwendet werden. Glücklicherweise haben wir eine andere (und viel bessere) Option, indem wir Linux exzellentes Sicherheitsmodul pam verwenden.
Zunächst müssen Sie die von Google-Authenticator erstellten Benutzerdateien mit einer der oben genannten Methoden in einem Verzeichnis sammeln. In unserem Fall ist es / etc / google-auth.
Sie müssen hier eine einzelne Benutzer-ID für alle Dateien erzwingen, da Sie keine echten Benutzer haben. Lass es offen sein . Die Berechtigungen müssen 0400 (-r --------) sein. Pam mag keine welt- / gruppenlesbaren Anmeldeinformationen (sicherlich). Sie können dies einfach mit Samba, Apache, FTP oder im schlimmsten Fall mit einem Cron-Tab erzwingen (nicht empfohlen).
Führen Sie zu Testzwecken einfach Folgendes aus:
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
Danach bitten Sie openvpn, sich bei libpam zu authentifizieren, das über ein eigenes Google Auth-Modul verfügt. Hängen Sie dies an Ihre openvpn-Serverdatei an:
plugin /usr/lib/openvpn/openvpn-plugin-auth-pam.so openvpn
Dies besagt, dass wir die Pam-Authentifizierungsmethode mit der Pam-Auth-ID openvpn verwenden werden .
Erstellen Sie nun das Pam-Setup für openvpn. Bearbeiten Sie /etc/pam.d/openvpn:
auth requisite /lib/security/pam_google_authenticator.so secret=/etc/google-auth/${USER} user=openvpn
account required pam_permit.so
Hier sagen wir, dass wir ohne erfolgreiche Google-Authentifizierung sofort fehlschlagen (erforderlich), eine spezielle geheime Datei anstelle der Standardeinstellung $ HOME / .google_authenticator (secret =) verwenden und als Benutzer openvpn auf die Dateien zugreifen, da keine echte Benutzer-ID zugeordnet ist mit unseren Nutzern. In der nächsten Zeile sagen wir nur, dass jeder nach erfolgreicher Authentifizierung eine Verbindung herstellen kann. Natürlich sollten Sie hier Ihre eigene Berechtigungsrichtlinie implementieren. Sie können zulässige Benutzer mit den entsprechenden Pam-Modulen per Datei, MySQL-Datenbank oder LDAP steuern.
Hängen Sie dies an Ihre openvpn-Client-Datei an
auth-user-pass
auth-nocache
reneg-sec 0
Wir verwenden auth-user-pass, damit der openvpn-Client nach Benutzername und Passwort fragt. Wir mögen kein Caching ("Passwort" ändert sich) und regelmäßige Neuverhandlungen sind aus dem gleichen Grund schlecht für uns.
Danach sollten Sie in der Lage sein, eine Verbindung ohne openvpn-otp herzustellen. Bitte beachten Sie, dass dies eine viel flexiblere Methode ist, da Sie auf Wunsch sehr komplexe Regeln in Pam-Steuerdateien implementieren können. Sie können Benutzer basierend auf Ihrem MySQL- oder LDAP-Verzeichnis aktivieren / deaktivieren, ohne beispielsweise diese Zertifikate zu berühren.