PAM(3)

来源:互联网 发布:如何查mac地址值那个大 编辑:程序博客网 时间:2024/06/05 10:09
 写到这一篇才发现自己了解的远没有预期的多..

上一次说了对话函数,对话函数是PAM模块与使用PAM进行认证的应用程序进行信息交互的桥梁,通过对话函数PAM模块可以获得用户的输入信息(明文、密文),

还有两套很重要的函数

pam_set_data(pam_handle_t *pamh, const char *pname, void *pdata, void (*freefunc)(pam_handle_t *pamh, void *pbuf, int status)),

pam_get_data(pam_handle_t *pamh, const char *pname, (void **)precvbuf)

这两个函数用来通一个PAM模块中不同的PAM SPI之间进行信息交流

PAM SPI有这么几种(就是一个特定功能模块需要实现的接口)

关于认证的 pam_sm_authenticate pam_sm_setcred(),密码管理的 session操作的,就不一一说了,这是基本的内容,很多地方讲的,使用上面的两个函数实现不同接口之间的信息交互(当然只能按着顺序,如pam_sm_authenticate总是比pam_sm_setcred先调用,因此可以在pam_sm_authenticate 中设置一个数据内容用于标记认证的结果,在pam_sm_setcred中通过判断pam_sm_authenticate中设置的数据内容来判断认证结果),这里说一下freefunc这个函数,这个函数用来实现pdata的释放。

 

pam_set_item(pam_handle_t *pamh, int itemtype, (void *)pbuf);

pam_get_item(pam_handle_t *pamh, int itemtype, (void **)pbuf);

这两个函数是用来进行模块之间信息交互的,itemtype的种类是约定好的,不需要自己定义.

 

有了这些知识就可以写一个最为简单的认证模块了,下一篇将给出一个简单但是完整的PAM模块的例子.

0 0
原创粉丝点击