更安全的方式来存储 openvpn 的用户名和密码

更安全的方式来存储 openvpn 的用户名和密码

我已经在我的服务器上设置了 OpenVPN 服务,使用用户名和密码验证,不需要客户端证书。

我已经在 /etc/passwd 和 /etc/shadow 中设置了用户名和密码。现在,可以使用特定用户连接 OpenVPN(即客户端1),但我试过了(linux用户)连接也是可以的。

问题是,有没有办法存储 OpenVPN 的用户而不是密码?我认为这太危险了,或者还有其他组(在 /etc/gourp 中为 OpenVPN 创建一个组)来限制它们?

服务器配置文件

port 20487
proto udp
dev tun
;dev-node MyTap
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.0.0.1"
push "dhcp-option DNS 1.1.1.1"
duplicate-cn
keepalive 10 120
tls-crypt ta.key 0 # This file is secret
data-ciphers AES-256-GCM
data-ciphers-fallback AES-256-GCM
max-clients 24
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log         /var/log/openvpn/openvpn.log
verb 5


explicit-exit-notify 1

plugin openvpn-plugin-auth-pam.so login
verify-client-cert none
username-as-common-name
script-security 2

客户端.ovpn

client
dev tun
proto udp
remote [destnation] 20487
auth-user-pass
#verify-client-cert none
#username-as-common-name
data-ciphers-fallback AES-256-GCM
data-ciphers AES-256-GCM
<ca>
-----BEGIN CERTIFICATE-----
ca.crt
-----END CERTIFICATE-----
</ca>
<tls-crypt>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
ta.key
-----END OpenVPN Static key V1-----
</tls-crypt>

密码文件 /etc/passwd

root:x:0:0:root:/root:/bin/bash
***
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
***
client1:x:1001:65534::/nonexistent:/usr/sbin/nologin

/etc/shadow

root:$y$*:19532:0:99999:7:::
***
nobody:*:19172:0:99999:7:::
***
client1:$y$j9T$K0ubESGFtXD2Imra5pMVJ/$ZUM2HNYn.0X9smrtKEAdgjIclQIdcURbI4xxlTU6tHB:19532:0:99999:7:::

答案1

不要使用loginPAM 堆栈;复制它并创建自己的堆栈。例如,/etc/pam.d/openvpn。一旦您拥有与系统登录配置分开的 PAM 堆栈,您就可以通过各种方式对其进行自定义:

  • 例如,你可以插入一个pam_succeed_if.so以避免如果用户不在指定组内,则尝试进行身份验证;

  • 您可以替换pam_unix.so(/etc/shadow 检查模块),pam_pwdfile.so它实际上可以读取单独的密码哈希文件;(请注意,pam_pwdfile 是一个单独安装的模块)

  • 您可以保留身份验证部分,但修改授权部分,即account组,以便拒绝不属于指定组的用户。

    auth堆栈验证所提供的凭证的正确性,堆栈account验证帐户的有效性和访问服务的权限。)

例如:

auth requisite pam_succeed_if.so user ingroup vpnusers
auth requisite pam_unix.so

相关内容