Linux 如何创建pam模块?

Linux 如何创建pam模块?,linux,pam,Linux,Pam,谁能告诉我这件事。。。 我想创建一个pam模块,类似于/etc/pam.d中的登录模块。如果您在登录期间寻找基于pam的面部身份验证,则需要编写一个模块,为您执行此操作,并将其插入/etc/pam.d/login的登录配置文件中 在直接进入本文之前,我建议您编写一些简单的模块,以了解PAM和配置文件的流程、工作方式,比如开始使用sshd PAM配置文件,并尝试插入一些可用的PAM模块示例。我觉得这些文章很有帮助: 仅供参考:Rohan Anil在opensuse下的GSOC08期间开发了pa

谁能告诉我这件事。。。
我想创建一个pam模块,类似于/etc/pam.d中的登录模块。如果您在登录期间寻找基于pam的面部身份验证,则需要编写一个模块,为您执行此操作,并将其插入/etc/pam.d/login的登录配置文件中

在直接进入本文之前,我建议您编写一些简单的模块,以了解PAM和配置文件的流程、工作方式,比如开始使用sshd PAM配置文件,并尝试插入一些可用的PAM模块示例。我觉得这些文章很有帮助:


仅供参考:Rohan Anil在opensuse下的GSOC08期间开发了pam face authentication,托管在code.google.com/p/pam face authentication/

编写pam模块的最佳资源之一是文档 本身:


不过,我同意您首先要确保了解PAM的工作原理。

因为这里要写的答案实在太长了,我可以将我的PAM教程链接给您: 和

在开始编写模块之前,我建议您先阅读配置教程,在其中您可以了解模块的功能

总之,当应用程序想要进行身份验证时,模块是PAM加载的共享对象。每次应用程序触发“阶段”(身份验证、帐户、会话、密码)时,相应的函数都会在模块中调用。因此,您的模块应提供以下功能:

PAM\u EXTERN int PAM\u sm\u身份验证(PAM\u handle\u t*handle、int标志、int argc、const char**argv){
/*在这个函数中,我们将使用pam_get_user()询问用户名和密码
*和pam_get_authtok()。然后我们将决定用户是否经过身份验证*/
}
PAM_EXTERN int PAM_sm_acct_mgmt(PAM_handle_t*pamh,int flags,int argc,const char**argv){
/*在这个函数中,我们检查用户是否被允许进入系统。我们已经知道了
*他是经过认证的,但我们可以根据当天的时间进行限制,
*系统中的资源等*/
}
PAM_EXTERN int PAM_sm_setcred(PAM_handle_t*pamh,int flags,int argc,const char**argv){
/*除了密码和用户名之外,我们还可以获得更多的用户信息。
*这些是凭证。例如,kerberos票证。在这里我们建立这些凭证
*并使它们对应用程序可见*/
}
PAM_EXTERN int PAM_sm_open_session(PAM_handle_t*pamh,int flags,int argc,const char**argv){
/*当应用程序想要打开会话时,调用此函数
*构建用户环境(设置环境变量、装载目录等)*/
}
PAM_EXTERN int PAM_sm_close_session(PAM_handle_t*pamh,int flags,int argc,const char**argv){
/*在这里,我们破坏了我们在上面创造的环境*/
}
PAM_EXTERN int PAM_sm_chauthtok(PAM_handle_t*pamh,int flags,int argc,const char**argv){
/*调用此函数以更改身份验证令牌。这里我们应该,
*例如,使用新密码更改用户密码*/
}

在此函数中,您将使用PAM函数从应用程序检索用户名和密码。这是通过必须在应用程序中定义的对话函数实现的(请参阅)。在每个函数结束时,必须返回确定结果的PAM返回代码(有关PAM错误代码,请参阅和模块)。

第一个链接没有给出任何关于模块开发的想法。