我正在研究如何将PAM模块设计为我自己的JAAS LoginModule的指导方针。令我惊讶的一件事是,尽管用于访问散列密码的方法与散列方法本身大部分是正交的,但我无法找到任何可以很好地利用此属性的PAM模块。是因为我忽略了一些安全问题,还是仅仅是因为还没有探索到的问题?
为了更多地解释我的意思,假设我们有3种不同的方法来访问散列密码(LDAP,SQL,纯文本文件)和2种散列方法(MD5,SHA1)。目前,每个访问方法都有一个或多个PAM模块,每个模块都实现了这些散列方法中的一个或多个。添加新的散列方法(比如BCrypt)意味着所有这些访问方法都需要修改以支持新的散列类型。更好的设计是为每个访问方法提供一个PAM模块,该模块只使用用户名检索散列密码,然后使用一组单独的PAM模块执行散列验证,并在模块之间共享散列值(就像密码一样)。因此,如果我使用数据库存储我的密码,并使用MD5验证密码,我的配置将如下所示:
password required pam_sql.so
password required pam_md5.so在此配置中,pam_sql从数据库检索散列密码(如果用户名不存在,则失败)。然后,pam_md5将哈希密码与要测试的密码进行比较,如果它们不匹配,则会失败。在使用Bcrypt的不同配置中,我只需将pam_md5替换为pam_bcrypt,而不必等待pam_sql的开发人员为新的散列方法更新它。
发布于 2012-06-10 23:22:24
PAM不了解密码散列或比较密码的方法(无论是否散列)。PAM为模块提供了与用户进行“对话”的工具,即向他们提问并从他们那里获得答案。当然,常见的问题是“您的用户名是什么?”和“你的密码是什么?”,但它们不是必须的。对于所有PAM关心的问题,一些模块可以在决定身份验证过程的结果之前询问用户5个问题或什么也不问。
您所要求的是比PAM更低层的抽象,它为处理散列密码的PAM模块子集提供公共服务。
你的问题是什么?您想实现这样的抽象并将其作为标准来推广吗?
https://stackoverflow.com/questions/10961937
复制相似问题