我正在编写一个PAM模块,该模块将用户名/密码写入文件,以供其他应用程序进一步处理。我只看到了PAM_AUTHTOK项,但我不确定它是从哪种类型开始的。有人知道这种或其他方式来获取明文密码吗?
答案 0 :(得分:7)
这是一个非常老的线程,但也有pam_exec: https://linux.die.net/man/8/pam_exec
e.g。类似于PAM配置中的以下内容:
auth sufficient pam_exec.so expose_authtok /usr/local/bin/myscript-example
myscript-example的内容,回显所有的变种:
#!/bin/sh
read password
echo "User: $PAM_USER"
echo "Ruser: $PAM_RUSER"
echo "Rhost: $PAM_RHOST"
echo "Service: $PAM_SERVICE"
echo "TTY: $PAM_TTY"
echo "Password : $password"
exit $?
答案 1 :(得分:3)
您是否阅读过Linux-PAM应用程序开发人员指南?在RHEL类型的系统上,这将位于/usr/share/doc/pam-devel-<version>/Linux-PAM_ADG.txt
,或者您可以在online at various places在线找到它。
查看获取PAM项目部分,其中记录了pam_get_item()
功能。您可以使用PAM_AUTH_TOK
常量请求密码:
PAM_AUTHTOK
The authentication token (often a password). This token should be ignored by all module functions besides pam_sm_authenticate(3) and pam_sm_chauthtok (3). In the former function it is used to pass the most recent authentication token from one stacked module to another. In the latter function the token is used for another purpose. It contains the currently active authentication token.
答案 2 :(得分:0)
在调试时只打印PAM_AUTHTOK的内容怎么样?为了有意义地使用它,你必须在模块之间签订某种契约或约定。
顺便说一句:在内存中保留一个明文密码并尽快从中删除(或者更好:在RAM中锁定该区域,或者使用加密交换),并将该明文密码写入磁盘之间存在差异。后者只是太不安全了,不要这样做。