使用 pam 仅进行授权,无需身份验证

使用 pam 仅进行授权,无需身份验证

你好,

我遇到了一个无法解决的情况。我在两台计算机之间建立了 pptp 连接。一台充当服务器,另一台充当客户端。

连接是我的使命

在我的VPN上

其中 my_vpn 是 /etc/ppp/peers 中的一个文件,由以下内容组成。

pty "pptp 192.168.12.1 --nolaunchpppd"
name virtual_1
remotename my_vpn
require-mppe-128
file /etc/ppp/options.pptp
ipparam my_vpn

这将创建服务器和客户端之间的连接并启动 ppp 接口。

按照教程,我在服务器和客户端上都设置了 chap_secrets 文件。

客户端 chap_secrets:# 使用 CHAP 进行身份验证的秘密 # 客户端服务器秘密 IP 地址 virtual_2 * pass *

服务器 chap_secrets:# 使用 CHAP 进行身份验证的秘密 # 客户端服务器秘密 IP 地址 virtual_1 virtual_3 pass * virtual_2 virtual_3 pass *

当在客户端 (virtual_2) 上启动 pon my_vpn 时,输出

/var/log/syslog | grep ppp命令

在服务器(称为 virtual_3)上

Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0xcd787d11> <pcomp> <accomp>]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [LCP EchoReq id=0x0 magic=0xcd787d11]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [CHAP Challenge id=0xf <33b8dc04d3db8014f82e8d95eef3d3a2>, name = "virtual_3"]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [LCP EchoReq id=0x0 magic=0xa40d7c64]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [LCP EchoRep id=0x0 magic=0xcd787d11]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [LCP EchoRep id=0x0 magic=0xa40d7c64]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [CHAP Response id=0xf <a323c3ddf060ae2845fc14b09034e64a000000000000000049fb952c5de9ec86cf872c0f05cea9f245fd6cf585a64eff00>, name = "virtual_2"]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [CHAP Success id=0xf "S=2F3C33E3676ADE634FBD3F3406BA1091EC04763A M=Access granted"]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [CCP ConfReq id=0x1 <mppe +H -M +S -L -D -C>]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [CCP ConfAck id=0x1 <mppe +H -M +S -L -D -C>]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [CCP ConfAck id=0x1 <mppe +H -M +S -L -D -C>]
Jul 24 07:11:56 virtual3 pppd[3323]: MPPE 128-bit stateless compression enabled
Jul 24 07:11:56 virtual3 pppd[3323]: sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 10.8.10.1>]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0>]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [IPCP ConfNak id=0x1 <addr 10.8.10.3>]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [IPCP ConfAck id=0x1 <compress VJ 0f 01> <addr 10.8.10.1>]
Jul 24 07:11:56 virtual3 pppd[3323]: rcvd [IPCP ConfReq id=0x2 <compress VJ 0f 01> <addr 10.8.10.3>]
Jul 24 07:11:56 virtual3 pppd[3323]: sent [IPCP ConfAck id=0x2 <compress VJ 0f 01> <addr 10.8.10.3>]
Jul 24 07:11:56 virtual3 pppd[3323]: Cannot determine ethernet address for proxy ARP
Jul 24 07:11:56 virtual3 pppd[3323]: local  IP address 10.8.10.1
Jul 24 07:11:56 virtual3 pppd[3323]: remote IP address 10.8.10.3
Jul 24 07:11:56 virtual3 pppd[3323]: pptpd-logwtmp.so ip-up ppp1 virtual_2 192.168.11.100
Jul 24 07:11:56 virtual3 pppd[3323]: Script /etc/ppp/ip-up started (pid 3326)
Jul 24 07:11:57 virtual3 pppd[3323]: Script /etc/ppp/ip-up finished (pid 3326), status = 0x0

我接下来想要实现的是在服务器端使用 PAM,但仅用于授权而不进行身份验证。也就是说,我希望通过 chap_secrets 文件保留授权,并只添加身份验证模块,该模块将在每次连接更改时写入数据库表(当建立 ppp 连接时,连接的用户将写入数据库,而当连接丢失时,该列将从数据库中删除)。

在设置数据库之前,我尝试做一些简单的事情来检查 pppd 是否与 PAM 配合使用。因此我编辑了 /etc/pam.d/ppp 文件,如下所示:

#%PAM-1.0
# Information for the PPPD process with the 'login' option.

account sufficient pam_exec /bin/echo "Succesful log" > /home/user/log_file
auth    required        pam_nologin.so
@include common-auth
@include common-account
@include common-session

希望成功连接后会创建一个文件 (/home/user/log_file)。但是,没有创建任何文件。之后,我打乱了 /etc/pam.d/ppp,希望得到任何错误,至少可以确认 pppd 正在使用 PAM。但是,一切如常。

我的 pppd 被编译为使用 pam。

root@virtual3:/etc/ppp# ldd /usr/sbin/pppd
...
libpam.so.0 => /lib/libpam.so.0 (0xb76e8000)
...

有什么想法下一步该从哪里开始吗?谢谢

答案1

似乎只需使用 login 参数运行 pppd 即可。该参数可在 /etc/ppp/options 中设置。尽管它说它只能与 PAP 一起使用。

我认为它之所以有效是因为我们不是尝试使用 PAP 和 CHAP 进行身份验证,身份验证是通过 chap_secret 文件进行的,然后将其传递给 PAM。

当 PAM 接管控制时,我们可以将其设置为始终通过身份验证并根据需要使用授权。

以下是我的 PAM 文件(在服务器 /etc/pam.d/ppp 上):auth adequate pam_permit.so
account adequate pam_permit.so

目前,我还没有为该帐户设置任何具体内容。我计划运行一个将信息写入数据库的模块。

查看 /var/log/syslog:

Jul 24 11:32:02 virtual3 pptpd[6100]: GRE: Bad checksum from pppd.
Jul 24 11:32:02 virtual3 pppd[6101]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <auth chap MS-v2> <magic 0xbfa95b1b> <pcomp> <accomp>]
Jul 24 11:32:02 virtual3 pppd[6101]: sent [LCP EchoReq id=0x0 magic=0xbfa95b1b]
Jul 24 11:32:02 virtual3 pppd[6101]: sent [CHAP Challenge id=0x72 <bd6de330bce960fd3c015f4c05271084>, name = "virtual_3"]
Jul 24 11:32:02 virtual3 pppd[6101]: rcvd [LCP EchoReq id=0x0 magic=0x26f8d72a]
Jul 24 11:32:02 virtual3 pppd[6101]: sent [LCP EchoRep id=0x0 magic=0xbfa95b1b]
Jul 24 11:32:02 virtual3 pppd[6101]: rcvd [LCP EchoRep id=0x0 magic=0x26f8d72a]
Jul 24 11:32:02 virtual3 pppd[6101]: rcvd [CHAP Response id=0x72 <37493f89d9ab654ebd597c25a4a6b0c000000000000000007452936c00f1efa80034f8a65f1f33a7c5b0cf8b4ca6b3f600>, name = "virtual_2"]
Jul 24 11:32:02 virtual3 pppd[6101]: sent [CHAP Success id=0x72 "S=8BA14BF6728FFEF9BAC466B0B7ACD5B6273E8B38 M=Access granted"]
Jul 24 11:32:02 virtual3 pppd[6101]: Initializing PAM (2) for user virtual_2
Jul 24 11:32:02 virtual3 pppd[6101]: ---> PAM INIT Result = 0
Jul 24 11:32:02 virtual3 pppd[6101]: Attempting PAM account checks
Jul 24 11:32:02 virtual3 pppd[6101]: PAM Account OK for virtual_2
Jul 24 11:32:02 virtual3 pppd[6101]: PAM Session opened for user virtual_2
Jul 24 11:32:02 virtual3 pppd[6101]: user virtual_2 logged in on tty pts/3 intf ppp0
Jul 24 11:32:02 virtual3 pppd[6101]: MPPE 128-bit stateless compression enabled
Jul 24 11:32:02 virtual3 pppd[6101]: Cannot determine ethernet address for proxy ARP
Jul 24 11:32:02 virtual3 pppd[6101]: local  IP address 10.8.10.1
Jul 24 11:32:02 virtual3 pppd[6101]: remote IP address 10.8.10.2
Jul 24 11:32:02 virtual3 pppd[6101]: pptpd-logwtmp.so ip-up ppp0 virtual_2 192.168.11.100

可以看出身份验证通过 CHAP 然后传递给 PAM。

相关内容