使用PAM只是为了授权,无需authentication

在那里,

我在这里有一个我无法解决的情况。 我在两台电脑之间build立了一个pptp连接。 一个充当服务器,另一个充当客户端。

连线是我打来的

pon my_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 

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

Folliwing教程,我已经在服务器和客户端上设置chap_secrets文件。

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

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

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

/ 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,但仅用于未经身份validation的授权。 也就是说,我想通过chap_secrets文件保留到现在为止的授权,并且只是在每次连接更改时向数据库表写入身份validation模块(当连接用户的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 

希望在成功的连接上创build一个文件(/ home / user / log_file)。 但是,没有创build文件。 之后,我炒了/etc/pam.d/ppp希望得到任何错误的国王,至less会证实pppd使用PAM。 然而,一切都像以前一样。

我的pppd被编译为使用pam。

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

任何想法下一步开始? TNX

似乎所有需要做的事情都是用login参数运行pppd。 这可以在/ etc / ppp / options中设置。 即使它说它只能用于PAP。

我想这是有效的,因为我们没有尝试使用PAP和CHAP进行身份validation,身份validation通过chap_secret文件,然后传递给PAM。

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

下面是我的PAM文件(在/etc/pam.d/ppp服务器上)的样子:auth sufficient pam_permit.so
足够的帐户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 

可以看到身份validation通过了CHAP,然后传递给了PAM。