如何在 OpenVPN 中实现 auth-user-pass-verify?

How to implement auth-user-pass-verify in OpenVPN?

我想为我的 OpenVPN 用户实施用户名和密码验证。那么会有多个用户,这些用户名和密码都存放在哪里,如何验证呢?

auth-user-pass-verify 的要点是您可以选择要验证用户的任何方式。以下是一些更受欢迎的答案:

  1. 在安装openvpn (pam) 的系统上使用用户/用户通行证
  2. 使用 ldap 并连接到 windows 公司域
  3. 第三方身份验证服务,如 Okta 或 google。

编写任何你喜欢的脚本来获取你收到的用户名/密码信息并执行相关的身份验证步骤。

我使用自定义 python 脚本和数据库来验证用户名和密码。

#!/usr/bin/env python3

import sys
import sqlite3
DB_FILE = 'openvpn_dashboard/db.sqlite3'


def main():
    # First arg is a tmp file with 2 lines: username and password
    with open(sys.argv[1], 'r') as tmpfile:
        username = tmpfile.readline().rstrip('\n')
        password = tmpfile.readline().rstrip('\n')

    creds = get_password(username)
    if not creds:
        print(f'>> user {username} not defined.')
        sys.exit(2)

    # Verify password.
    if password != creds[0][1]:
        print(f'>> Bad password provided by user {username}.')
        sys.exit(3)

    sys.exit(0)


def get_password(username):
    db = sqlite3.connect(DB_FILE)
    cursor = db.cursor()
    cursor.execute('''select username, password from openvpn_openvpnuser where username=?''', (username,))
    creds = cursor.fetchall()
    db.close()
    return creds


if __name__ == '__main__':
    main()