6

我正在编写一个 PAM 模块,它将用户名/密码写入文件中,以供其他应用程序进行进一步事务。我只看到了 PAM_AUTHTOK 项目,但我不确定它来自哪个类型。有人知道这个或其他方式来获取明文密码吗?

4

3 回答 3

9

这是一个非常古老的线程,但也有 pam_exec: https ://linux.die.net/man/8/pam_exec

例如,PAM Config 中的内容如下:

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 $?
于 2016-10-01T01:48:41.923 回答
3

您是否阅读过 Linux-PAM 应用程序开发人员指南?在 RHEL 类型的系统上,这将在,或者您可以在网上的各个地方在线/usr/share/doc/pam-devel-<version>/Linux-PAM_ADG.txt找到它。

查看获取 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.
于 2011-10-11T13:39:27.620 回答
0

调试时只打印 PAM_AUTHTOK 的内容怎么样?无论如何,要有意义地使用它,您必须在模块之间建立某种契约或约定。

顺便说一句:将明文密码保存在内存中并尽快从那里删除(或者更好的是:将该区域锁定在 RAM 中,或进行加密交换)和将该明文密码写入磁盘之间是有区别的。后者太不安全了,不要那样做。

于 2011-12-30T17:00:13.650 回答