pam编程:
1 头文件:
#include <security/pam_misc.h> //提供 misc_conv支持, 编译的时候,要加 -lpam_misc
#include <security/pam_appl.h> //用于 客户端程序
#include <security/pam_modules.h>
#include <security/pam_ext.h> // 这两个是编写 pam_modules时用到的.
2. 概念:
pam: PAM(Pluggable Authentication Modules),可插拔认证模块.
优点:可以任意配置认证方式.比如,用户程序使用的是linux自己的认证方式,对应的模块是pam_unix.so.当想使用apm_ldap.so时,只要在该应用程序使用的配置文件中,使用的模块改为pam_ldap.so就行了.配置文件那块,有很复杂的配置方法.可以实现,多种认证互相结合的方式.
只是用户是否合法性的认证,无用户对应权限的分发.比如,用户a,是不是合法用户可以知道,但用户a是否可以访问某个目录,则无法知道.
3.流程
应用程序 --> 调用pam_**()函数(e.g. pam_authenticate)--> 配置文件(/etc/pam.d/下) ->配置文件中对应pam_**.so -> 调用模块中pam_sm_***()函数
使用pam的应用程序,会调用pam_authenticate等等的函数,然后,pam机制会找到对应的配置文件,从这些配置文件中,找到所调用的模块.然后,pam机制会调用对应模块的pam_sm_authenticate()函数.实现用户与模块间的数据交互.
其中,关于应用程序与模块的数据交流,是通过pam_conv()来实现,它是个回调函数,该函数由用户端来定义并实现.
例如:应用程序的用户与密码信息,会在应用程序所定义的pam_conv函数中所给出,当模块需要用户名与密码信息时,会主动调用该回调函数,通过该回调函数,取得用户与密码信息.然后,完成对应的用户与密码的验证工作.
1 头文件:
#include <security/pam_misc.h> //提供 misc_conv支持, 编译的时候,要加 -lpam_misc
#include <security/pam_appl.h> //用于 客户端程序
#include <security/pam_modules.h>
#include <security/pam_ext.h> // 这两个是编写 pam_modules时用到的.
2. 概念:
pam: PAM(Pluggable Authentication Modules),可插拔认证模块.
优点:可以任意配置认证方式.比如,用户程序使用的是linux自己的认证方式,对应的模块是pam_unix.so.当想使用apm_ldap.so时,只要在该应用程序使用的配置文件中,使用的模块改为pam_ldap.so就行了.配置文件那块,有很复杂的配置方法.可以实现,多种认证互相结合的方式.
只是用户是否合法性的认证,无用户对应权限的分发.比如,用户a,是不是合法用户可以知道,但用户a是否可以访问某个目录,则无法知道.
3.流程
应用程序 --> 调用pam_**()函数(e.g. pam_authenticate)--> 配置文件(/etc/pam.d/下) ->配置文件中对应pam_**.so -> 调用模块中pam_sm_***()函数
使用pam的应用程序,会调用pam_authenticate等等的函数,然后,pam机制会找到对应的配置文件,从这些配置文件中,找到所调用的模块.然后,pam机制会调用对应模块的pam_sm_authenticate()函数.实现用户与模块间的数据交互.
其中,关于应用程序与模块的数据交流,是通过pam_conv()来实现,它是个回调函数,该函数由用户端来定义并实现.
例如:应用程序的用户与密码信息,会在应用程序所定义的pam_conv函数中所给出,当模块需要用户名与密码信息时,会主动调用该回调函数,通过该回调函数,取得用户与密码信息.然后,完成对应的用户与密码的验证工作.
4. 函数: