我正在为OpenVPN设置一个PAM服务,这样OpenVPN PAM模块就可以通过使用shell脚本来实现一个外部服务的用户名/密码。
OpenVPN PAM模块大约提供以下文档:
插件openvpn-auth-pam.so“openvpn名称USERNAME密码密码”
虽然“USERNAME”和“PASSWORD”是替代客户端提供的值的特殊string,但也可以将文字值命名为PAM模块查询响应。 例如,假设login模块查询第三个参数“domain”,该参数将以常量值“mydomain.com”回答:
所以现在我在/etc/pam.d/openvpn中创build了一个openvpn PAMconfiguration:
auth required pam_exec.so expose_authtok /tmp/outputenv
哪一个让我尽可能执行一个脚本,并从标准input密码,辉煌,我95%的方式。 但是我没有访问用户名。 我已经检查了环境variables以及任何我能想到的东西,但是我无法弄清楚如何将用户名和密码传递给脚本进行外部authentication。
想法?
这个问题的完整答案张贴在这里:
https://forums.openvpn.net/post13002.html#p13002
基本上,openvpn的PAM模块文档中的例子会让你误入歧途,它使用:
plugin openvpn-auth-pam.so "login login USERNAME password PASSWORD"
但是openvpn的server.config的正确configuration是:
plugin /usr/local/openvpn/sbin/openvpn-auth-pam.so "openvpn"
如果包含文档示例中显示的额外参数,则不会像预期的那样根据pam_exec.so的文档将PAM_USER写入环境variables。