2011-10-11 62 views
4

我正在写一个PAM模块,它将用户名/密码写入文件以供其他应用程序进一步处理。我只看到了PAM_AUTHTOK项目,但我不确定它是哪种类型的。任何人都知道或以其他方式获取明文密码?如何使用PAM以明文方式检索用户密码?

+1

大多数(好)的认证系统不存储明文密码;他们散列或以其他方式加密传入的密码并存储该密码,并将其用于未来的比较。 – Joe

+3

@Joe,这是真的,但你从交易的错误一面来看待这一点。 PAM是提示您输入密码并进行验证的部分;它不会“存储”密码。因此,PAM模块*可以访问明文密码(这可以使许多PAM模块上的use_first_pass选项起作用)。 – larsks

+0

啊谢谢。 – Joe

回答

3

您是否阅读过Linux-PAM Application Developer's Guide?在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. 
0

如何只打印PAM_AUTHTOK的内容,当你正在调试?为了有意义地使用它,你必须在模块之间有某种契约或约定。顺便说一句:在内存中保留一个明文密码并尽快从那里擦除它(或者更好:在RAM中锁定该区域,或者加密交换),并将该明文密码写入磁盘。后者只是没有安全感,不这样做。

3

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

例如像在PAM配置如下:

auth sufficient pam_exec.so expose_authtok /usr/local/bin/myscript-example 

的MyScript,例如内容,呼应所有的瓦尔出来:

#!/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 $? 
+0

那么,这可能是这样,但获得shell脚本编译为C程序会有点困难,除非我错过了一些明显的东西... –

+1

@ DavidC.Rankin pam_exec允许您运行脚本并通过PAM相关的变量(因此$ PAM_USER等)。这有效地允许您使用OS支持的任何语言编写PAM模块。看看链接的文档,你会看到。 – Doug

相关问题