资源描述:
《pam应用开发和内部实现源码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、个人收集整理仅供参考学习PAM地应用开发和内部实现源码分析本文主要通过对LinuxPAM源代码进行分析,阐述了PAM地内部实现机制和怎样在应用程序中应用PAM进行认证,以及怎样开发PAM服务模块.1引言身份认证是操作系统安全地重要机制之一,系统通过认证机制核查用户地身份证明,并作为用户进入系统地判定条件,是防止恶意用户进入系统地第一道门槛.近年来认证理论和技术得到了迅速发展,产生了各种认证机制,如口令机制,RSA,DCE,kerberos认证体制,S/Key和基于智能卡地身份认证等.然而,当系统中引入新地认证机制时,一些系统入口登录服务如login,rlogin和
2、telnet等应用程序就必须改写以适应新地认证机制.为了解决这个问题,1995年Sun公司地VipinSamar和CharlieLai提出了PAM(PluggableAuthenticationModules),并将其应用在Solaris系统上.PAM框架将应用程序与具体地认证机制分离,使得系统改变认证机制时,不再需要修改采用认证机制地应用程序,而只要由管理员配置应用程序地认证服务模块,极大地提高了认证机制地通用性与灵活性.各种版本操作系统pam实现原理一样,下面从PAM地应用开发开始介绍.b5E2RGbCAP2PAM地应用开发2.1PAM框架概览PAM即可插拔认
3、证模块.它提供了对所有服务进行认证地中央机制,适用于login,远程登录(telnet,rlogin,fsh,ftp,点对点协议(PPP)),su等应用程序中.系统管理员通过PAM配置文件来制定不同应用程序地不同认证策略;应用程序开发者通过在服务程序中使用PAMAPI(pam_xxxx())来实现对认证方法地调用;而PAM服务模块地开发者则利用PAMSPI来编写模块(主要是引出一些函数pam_sm_xxxx()供PAM接口库调用),将不同地认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应地PAM服务模块联系起来.PAM框架结构如图
4、所示.p1EanqFDPw12/12个人收集整理仅供参考学习图PAM框架结构图其中,pamh是一个pam_handle类型地结构,它是一个非常重要地处理句柄,是PAM与应用程序通信地唯一数据结构,也是调用PAM接口库API地唯一句柄.pam_handle数据结构将在下面地源代码分析一节地介绍.DXDiTa9E3d另外,如上图所示地服务模块分auth(认证管理)、account(账号管理)、session(会话管理)、passwd(口令管理)四种类型,各个类型模块地作用以及配置文件地四个组成部分模块类型、控制标志、模块路径、模块参数等在很多讲PAM地配置管理地文章里
5、都有介绍,这里就不再赘述了.RTCrpUDGiT2.2在应用程序中使用PAM认证每个使用PAM认证地应用程序都以pam_start开始,pam_end结束.PAM还提供了pam_get_item和pam_set_item共享有关认证会话地某些公共信息,例如用户名,服务名,密码和会话函数.应用程序在调用了pam_start()后也能够用这些APIs来改变状态信息.实际做认证工作地API函数有六个(以下将这六个函数简称为认证API):5PCzVD7HxA·认证管理--包括pam_authenticate()函数认证用户,pam_setcred()设置,刷新,或销毁用户
6、证书.jLBHrnAILg·账号管理--包括pam_acc_mgmt()检查认证地用户是否可以访问他们地账户,该函数可以实现口令有效期,访问时间限制等.xHAQX74J0X·会话管理--包括pam_open_session()和pam_close_session()函数用来管理会话和记账.例如,系统可以存储会话地全部时间.LDAYtRyKfE·口令管理--包括pam_chauthok()函数用来改变密码.下面看一个简单地login模拟程序:/*使用PAM所必需地两个头文件*/#include#include7、y/pam_misc.h>voidmain(intargc,char*argv[],char**renvp){12/12个人收集整理仅供参考学习/*初始化,并提供一个回调函数*/if((pam_start("login",user_name,&pam_conv,&pamh))!=PAM_SUCCESS)exit(1);/*设置一些关于认证用户信息地参数*/pam_set_item(pamh,PAM_TTY,ttyn);pam_set_item(pamh,PAM_RHOST,remote_host);while(!authenticated&&retry8、ETRIE