我已经在我的服务器上设置了 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
不要使用login
PAM 堆栈;复制它并创建自己的堆栈。例如,/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