ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux – 没有PAM验证用户的正确方法是什么?

2019-08-17 01:52:53  阅读:257  来源: 互联网

标签:linux authentication shadow pam password


因为我的相关问题似乎没有太多的爱,这里是另一个:
现在在Linux中通过用户名/密码提示验证用户的正确方法是什么?

原则上,我想我必须从/ etc / shadow获取用户名和密码,读取相应用户的salt和hash.然后我会计算给定密码的哈希值和存储的盐,并检查结果是否与存储在/ etc / shadow中的哈希相匹配.

通常,我可以简单地通过PAM(例如pam_unix)进行身份验证,它已经完成了所有这些,但我的应用程序是一个自定义PAM模块,我找不到从另一个调用一个PAM模块的方法.如果这可能以某种方式,我很乐意寻求这个解决方案.

到目前为止,我发现这真的是从1996年的http://www.tldp.org/HOWTO/Shadow-Password-HOWTO-8.html教程开始,显然,影子支持尚未构建到libc中.它提到pw_auth并且作为身份验证的辅助函数有效.我尝试将这些植入我的代码并链接到影子工具的libshadow.a但是我得到pw_auth的“未解决的外部引用”错误并且有效.代码看起来像这样:

if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
     && pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
    || !valid (passwd, pw)) {
    return (UPAP_AUTHNAK);
}

我没有进一步检查,但无论如何这不是一个首选的解决方案,因为每次更新shadow-utils时我都必须更新我的代码.

我更愿意链接到一个提供针对/ etc / shadow的身份验证的库(不是PAM).有没有这样的事情,我还没找到呢?或其他一些解决方案?

解决方法:

你害怕更新shadow-utils是IMO没有根据的. HOWTO中描述的例程可以在我的Ubuntu 12.04和Mint 17系统上使用,而无需安装任何特殊的东西.

在C程序中读取/ etc / shadow信息的结构可以在/usr/include/shadow.h中找到,并且可以使用man 5 shadow和你需要查找的函数,例如: /usr/include/shadow.h中定义的按名称的影子密码条目是getspnam,它将为您提供一个手册页(man getspnam),描述该函数和所有相关函数.

基于此,您应该能够获得任何给定名称的哈希密码条目.散列密码应该有多个’$’标记,切除包括散列密码中最后一个’$’后的所有内容,并将其作为salt to crypt(),glibc版本(根据man 3 crypt)应该能够处理指示SHA512条目的“扩展”盐,现在更常见.

标签:linux,authentication,shadow,pam,password
来源: https://codeday.me/bug/20190817/1673146.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有