如何在 OpenVPN 中实现 auth-user-pass-verify?
How to implement auth-user-pass-verify in OpenVPN?
我想为我的 OpenVPN 用户实施用户名和密码验证。那么会有多个用户,这些用户名和密码都存放在哪里,如何验证呢?
auth-user-pass-verify
的要点是您可以选择要验证用户的任何方式。以下是一些更受欢迎的答案:
- 在安装openvpn (pam) 的系统上使用用户/用户通行证
- 使用 ldap 并连接到 windows 公司域
- 第三方身份验证服务,如 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()
我想为我的 OpenVPN 用户实施用户名和密码验证。那么会有多个用户,这些用户名和密码都存放在哪里,如何验证呢?
auth-user-pass-verify
的要点是您可以选择要验证用户的任何方式。以下是一些更受欢迎的答案:
- 在安装openvpn (pam) 的系统上使用用户/用户通行证
- 使用 ldap 并连接到 windows 公司域
- 第三方身份验证服务,如 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()