我正在写一个PAM模块,它将用户名/密码写入文件以供其他应用程序进一步处理。我只看到了PAM_AUTHTOK项目,但我不确定它是哪种类型的。任何人都知道或以其他方式获取明文密码?如何使用PAM以明文方式检索用户密码?
回答
您是否阅读过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.
如何只打印PAM_AUTHTOK的内容,当你正在调试?为了有意义地使用它,你必须在模块之间有某种契约或约定。顺便说一句:在内存中保留一个明文密码并尽快从那里擦除它(或者更好:在RAM中锁定该区域,或者加密交换),并将该明文密码写入磁盘。后者只是没有安全感,不这样做。
这是一个非常古老的线程,但也有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 $?
那么,这可能是这样,但获得shell脚本编译为C程序会有点困难,除非我错过了一些明显的东西... –
@ DavidC.Rankin pam_exec允许您运行脚本并通过PAM相关的变量(因此$ PAM_USER等)。这有效地允许您使用OS支持的任何语言编写PAM模块。看看链接的文档,你会看到。 – Doug
- 1. PHP/PAM更改用户密码?
- 2. 使用crypt值检索用户密码
- 3. 如何使用ECDH密码明文?
- 4. 如何以编程方式检查用户密码是否正确?
- 5. 使用用户名/密码以编程方式登录到Facebook
- 6. 如何让LDAP搜索使用Kerberos票证以避免明文密码
- 7. 使用加密算法来存储和检索用户名和用户密码
- 8. 使用对话框以图形方式检索用户输入
- 9. 用于ssh的PAM模块:如何知道用户是使用密钥还是密码进行身份验证
- 10. 如何检查用户名和密码
- 11. 如何检查用户名和密码?
- 12. 在检索当前密码时更改asp.net用户密码
- 13. 使用声明式验证设置用户密码
- 14. 登录使用休眠来检索用户名和密码
- 15. 使用javascript从浏览器中检索用户名/密码
- 16. 如何检查用户名和密码的文本文件
- 17. 如何以编程方式使用Python从客户端OAuth流中检索access_token?
- 18. 使用rest框架检索密码JWT
- 19. 检索知道htaccess用户和密码的文件列表
- 20. 使用boto3,如何检查AWS IAM用户是否有密码?
- 21. 如何使用Twitter API检查用户/密码是否有效?
- 22. 如何使用PHP检查用户名和密码
- 23. WSO2身份服务器:存储用户密码以明文形式
- 24. 以编程方式检查连接字符串的用户名/密码?
- 25. 用法:“EncryptUtil encrypt”密码密码:要加密的明文密码
- 26. 如何手动检查ldap用户的用户名和密码
- 27. 如何使用password_verify()从数据库中检索密码?
- 28. 用户名密码使用API的最佳方式是什么?
- 29. 以编程方式设置代理用户名和密码Android
- 30. Oracle数据库以编程方式更改用户密码
大多数(好)的认证系统不存储明文密码;他们散列或以其他方式加密传入的密码并存储该密码,并将其用于未来的比较。 – Joe
@Joe,这是真的,但你从交易的错误一面来看待这一点。 PAM是提示您输入密码并进行验证的部分;它不会“存储”密码。因此,PAM模块*可以访问明文密码(这可以使许多PAM模块上的use_first_pass选项起作用)。 – larsks
啊谢谢。 – Joe