我已经在我的服务器上设置了 OpenVPN 服务,使用用户名和密码身份验证,并且不需要客户端证书。
我已经在/etc/passwd和/etc/shadow中设置了用户名和密码。现在,与 OpenVPN 的特定用户(即client1)连接是可以的,但我尝试过root(linux 用户),也可以连接。
问题是,是否有办法为 OpenVPN 存储这些用户而不是 passwd?我认为这太危险了,或者其他任何组(在 /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/密码
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/影子
root:$y$*:19532:0:99999:7:::
***
nobody:*:19172:0:99999:7:::
***
client1:$y$j9T$K0ubESGFtXD2Imra5pMVJ/$ZUM2HNYn.0X9smrtKEAdgjIclQIdcURbI4xxlTU6tHB:19532:0:99999:7:::
不要使用
login
PAM 堆栈;复制它并创建您自己的。例如,/etc/pam.d/openvpn
. 一旦您拥有与系统登录配置分离的 PAM 堆栈,您就可以通过多种方式对其进行自定义:例如,如果用户不在指定组中,您可以插入 a
pam_succeed_if.so
以避免尝试身份验证尝试;您可以替换
pam_unix.so
(/etc/shadow 检查模块),pam_pwdfile.so
它实际上可以读取单独的密码哈希文件;(注意pam_pwdfile是一个单独安装的模块)您可以保持身份验证部分不变,但修改授权部分,即
account
组,以便拒绝不在指定组中的用户。(
auth
堆栈验证所提供凭据的正确性,account
堆栈验证帐户的有效性以及访问服务的权限。)例如: