基于LDAP的SIP服务器PAM认证的解决方案

来源 :计算机时代 | 被引量 : 0次 | 上传用户:july1126
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:SIP协议是应用层会话控制协议,具有简单、可扩展和分布式的特点。LDAP目录作为一种非关系型数据库,可以简化查询的步骤,PAM就是在应用程序和下层的认证模块之间加入一个抽象层,使得上层应用和底层认证相互独立。文章提出了通过LDAP目录与PAM结合来实现SIP服务器的认证方案,并利用pam_ldap模块实现了SIP服务器的LDAP认证。
  关键词:SIP;PAM;LINUX;LDAP
  
  0引言
  
  SIP(Session Inidation Protoc01)是1ETF制定的面向Intemet会议和电话的信令协议。该协议是一个基于文本的、用于多方多媒体通信的应用层控制协议,独立于底层传输协议TCP/UDP/SCTP,用于建立、修改和终止IP网上的双方或多方多媒体会话。SIP系统由用户代理、SIP代理服务器、重定向服务器、SIP注册服务器等4部分组成。在设计SIP服务器中,对于SIP用户代理的认证和管理是一个非常重要的问题。目前,通用的解决办法是在SIP代理服务器端采用数据库来专门存储用户数据。SIP服务器需要DBMS的支持,因此需要对每一个数据库服务器进行单独的设计,难以与现有用户资料库进行整合,从而增大了管理成本。在基于SIP的远程医疗系统中,为了解决这一问题,提出了LDAP来进行认证的机制。
  
  1 LDAP目录数据库与PAM认证模块及其系统框架
  
  LDAP(Lightweight Directory Access Protoc01)——轻量级目录访问协议是一种基于X.500标准的、跨平台的目录服务,得到了业界的广泛认可。LDAP目录是一种非关系型数据库,可以存储各种类型的数据:电子邮件地址、邮件路由信息、人力资源数据、公用密匙、联系人列表等。把LDAP目录作为系统集成中的一个重要环节,可以简化查询,甚至连主要的数据源都可以放在任何地方。
  PAM(P1uggable Authentication Modules.)——可插入式认证模块,最初是Sun公司为其Solaris操作系统开发的安全认证架构,该模块采用一种用于将各种底层认证模块与上层应用无缝集成的安全机制。PAM的核心就是在应用程序和下层的认证模块之间加入一个抽象层,使得上层应用独立于底层认证。这种与上层平台和算法的独立性使得我们可以部署各种各样的安全机制,而不需要修改任何应用层代码。该模块具有认证管理、账号管理、会话管理和密码管理等功能。PAM通过提供一些DLL和API,将应用程序和所需的认证方式分开,使管理员能够灵活选择认证方式而无需更改应用程序。
  


  本系统主要由SIP用户代理、SIP服务器和LDAP服务器等3部分组成。SIP服务器具有双重功能,一是通过SIP协议实现SIP客户端间的通信,二是实现LDAP客户端与LDAP服务器端的通信(执行实际的认证工作)。该系统的工作机制如图l所示。
  
  2认证系统实现方案
  
  2.1配置LDAP服务器
  LDAP服务器用于存储用户的各种信息,是LDAP认证系统中的重要元素。OpenLDAP是最通用的一种LDAP服务器软件。openLDAP服务器的配置文件如下:
  (1)建立Linux用户账号
  使用UltraEdit建立一个文本文件,文件名称myusers.1ist内容如下:
  userl 1111111
  user2 1111111
  l
  userl0 1111111
  注意:第一个字段为使用者名称;第二个字段为预设密码,中间必须用空格隔开。然后使用文本编辑建立另外一个文本文件,文件名称add_users.sh,内容如下:
  #t/bin/bash
  for i jn’awk‘{print$1)t users.Iist、do
  useradd$i
  grep"\<$i\>"users.1ist I awk'f.print$2)。Ipasswd-stdin$i
  done
  建立Linux用户账号:
  #chmod 775 add-usem.sh
  #./add-usem.sh
  (2)修改缺省配置文件:/etc/openladp/slapd.conf
  database baogxm
  suffix"dc=fulingshiyuan,dc=com”一条记录所属区域
  rootdn“cn=Admin,dc=fulingshiyuan,dc=com”
  rootpw 6666666#定义LDAP根管理员的密码
  (3)将原有Linux账号转为LDIF文件
  原有Linux服务器上有userl-userl0这些使用者账号,密码均为]llllll。下面是转换的步骤:
  #cdlusdsharel fulingshiyuan/migmtion#转换文件的目录#
  #vi migrate_common.ph
  $DEFAULT_MAIL_DOMAIN=“fulingshiyuan.com”:
  Default base
  $DEFAULT_BASE=“dc=fulingshiyuan。dc=COrn”:
  #./migmte_passwd.plletclpasswd>1worktmp/user.Id.f
  #./migrate_group.plletclgroup>1worktmp/group.Idif
  (4)建立fulingshiyuan.1dif,ou_people.1dif,ou_group.Idif三个文件
  #cat e fulingshiyuan.Idif
  dn:dc=fulingshiyuan,dc=com
  dc:fulingshiyuan
  objectClass:dcObject
  objectClass:organizationalUnit
  ou:fulingshiyuan.com
  #cat ou_people.ldif
  dn:ou=people,dc=fulingshiyuan,dc=com
  objectclass:organizationalunit
  ou:people
  #cat ou_group.1dif
  dn:ou=group,dc=fulingshiyuan,dc=com
  objectclass:organizationalunit
  ou:group
  (5)转换原有Linux账号至OpenLDAP服务器上
  #slapadd-vl fulingshiyuan.Idif
  added:"dc=fulingshiyuan,dc=corn"(.00000001)
  #slapadd-vl ou_people.Idif
  added:"ou。people,dc=fulingshiyuan,dc=com"(、00000002)   #Slapaddwl ou_group.1dif
  added:"ou=group,dc=fulingshiyuan,dc=com"(、00000043)
  #slapadd-vl user.ldif
  #slapaddovl group.Idif
  (6)启动本地LDAP服务器
  在RedHat9下,该命令为/etc/rc.d/init.d/ldap start。
  (7)初始化LDAP数据库
  若以上配置文件正确无误,则可使用命令/etc/rc.d/init.d/Idap或/etchnit.d/ldap启动LDAP服务器。之后,就可以向LDAP数据库中添加用户数据了。
  2.2配置PAM_LDAP模块
  虽然多数的Linux中自带了PAM,但为了让PAM能够更好地支持LDAP认证,必须下载软件包PAM_LDAP。PAM库可通过本地的系统配置文件/etc/pam.conf目录下的一些配置文件来设置,而模块则以动态可加载目标文件的形式保存在/usr/lib/security目录中。具体配置如下:
  (1)在/etc/pam.conf文件中配置如下:
  siD auth requiredlusdliblsecuritylpam_ldap.so
  siD account requiredlusrlliblsecuritylpam_ldap.so
  sip代表服务的名称;auth和account分别代表认证模块和记账模块;控制标志required表明当某个模块返回—个失败响应时,认证失败,但是PAM将继续处理其他模块;pam_ldap.so指定了可插入认证模块的路径。
  (2)编辑/etc/openldap/ldap.conf配置文件,使LDAP客户端能够读该文件的内容,并与服务器端进行联系。在/etc/openldap/ldap.conf文件中配置如下:
  host 210.41.35.200
  //定义LDAP服务器,可以用主机名或IP地址
  base=dc:fulingshiyuan.dc=edu
  //定义要查询的目录的根
  
  2.3 SIP服务器的PAM认证实现方案
  PAM框架提供了一系列接口与上层应用程序通信。具体接口如下:
  管理性接口每组PAM事务从pam_start()开始,结束于pam_end()函数。接口pam_get_item()和pam set item()用来读写与PAM事务有关的状态信息。pam_auth()用来进行认证。pam_acct_mgmt()检查受鉴别的用户所持账户是否有权登录系统,以及该账户是否已过期等。同时,pam_str()可用于输出PAM接口的出错信息。
  程序与模块间的通讯接口在应用程序初始化期间,某些诸如用户名之类的数据可以通过pare_start()将其存放在PAM接口层中,以备将来底层模块使用。另外,底层模块还可以使用pam_putenv()向应用程序传递特定的环境变量,应用程序利用pam_getenv()和pam_getenvlist()读取这些变量。
  用户与模块间的通讯接口pam_start()函数可以通过会话式的回调函数,让底层模块通过它们读写模块相关的认证信息,比如以应用程序所规定的方式提示用户输入口令。
  模块间通讯接口尽管各模块是独立的,但是它们仍然能够通过pare_get_item()和pam_set_item0接口共享某些与认证会话有关的公用信息,诸如用户名、服务名、口令等。此外,这些API还可以用于在调用pam_start()后,让应用程序修改状态信息。
  读写模块状态信息的接口接口pam_g~dma()和pam set_data()用以按照PAM句柄要求访问和更新特定模块的信息。此外,还可以在这些模块后附加一个清除数据函数,以便当调用pam_end()时清除现场。
  具体流程如下:
  (1)程序开始。
  (2)如果pam_start()调用成功,则转向第3步,否则第6步。
  (3)如果pam_auth()调用成功,则转向第4步,否则第6步。
  (4)如果pam_acct_mgnt()调用成功,则转向第5步,否则第6步。
  (5)如果pam_end()调用成功,则执行retval=0,否则第7步。
  (6)retval=l
  (7)返回,程序结束。
  部分核心代码如下:
  struct pam_conv convstn={
  misc_conv,/*built in conversation function*/
  NULL}:
  lnl Authenticate(const char*uname){
  pam_handlej*hPAM=NULL;/*Handle for use with a¨PAM
  functions*/
  intrslt=0:
  inl retval=-1:
  rslt=pam_start(”sip",uname,&convstn,&hPAM);
  /*The first parameter is the service name used in pam.conf*/
  if(rslt!=PAM_SUCCESS){retumretval;)
  rslt=pam_auth(hPAM,0);/*authenticate the user*/
  if(rslt!=PAM_SUCCESS){return retval;)
  rslt=pam_acct_mgmt(hPAM,0);/*does the user have access*/
  if(rslt!=PAM_SUCCESS){return renal;)
  if(pam_end(hPAM,rslt)!=PAM_SUCCESS)(
  printf(“PAM cleanup failed.”);
  return retval;
  }
  return O:
  }
  
  3结束语
  
  构建SIP服务器是利用SIP协议实现可视化远程医疗会诊系统的第一步,目前已实现,在此基础上利用PAM提供的接口函数,使用pam_ldap模块实现了SIP服务器的LDAP认证M。实践证明,该方法与现有用户资料库整合,极大地降低了系统的管理成本,具有很好的可扩展性。
  (注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。)
其他文献
摘 要:介绍一种基于串口通信的焦化三车连锁控制系统。该方案采用VC++6.0编程实现串口通信,用于远程控制焦化三车:推焦车、拦焦车、熄焦车的相互通信、炉号对位和推焦动作联锁,实验证明,方案实际可行。  关键词: 串口通信;同步;异步;API函数
期刊
摘 要:LIDS是一种基于Linux内核的入侵检测系统。文章简单介绍了入侵检测系统,详细介绍了LIDS的概念、主要功能及其原理。  关键词:入侵;入侵检测系统;安全;LIDS
期刊
摘要:利用GPRS网络作为无线智能监控的信息传输平台是一种非常有效的方法,其原理简单,安全保密性高,不需要组建专用网络。GPRS网络覆盖面广,可实现全球无缝覆盖,与传统的监控系统相比有着独特的优势。文章给出了基于GPRS网络的机房智能监控系统的硬件结构组成和软件工作流程。整个系统主要由终端采集系统和GPRS模块构成。用于无人监守的通信机房远程监控。  关键词:通信机房智能监控;MC35;GPRS;
期刊
摘要:提升处理器时钟频率和二级缓存的大小是提升CPU效率的方法。文章在对AMD Athlon 64实际测试的基础上,概要地从理论上分别阐述了时钟频率和二级缓存对CPU效率影响的原理,侧重分析了在不同应用环境中二级缓存和时钟频率的大小对CPU效率产生不同影响的原因,并提出了二级缓存对CPU效率影响的最佳容量的概念,可使大家对CPU的效率有一个更清楚的认识。  关键词:时钟频率;二级缓存;CPU效能;
期刊
摘要:在编写Java程序时,数组是常用的一种数据类型,然而在实际使用时有许多不便之处。为此,文章讨论了代替Java传统数组的动态数组的设计及实现过程,并举例说明了动态数组类的使用方法。  关键词:Java;动态数组;类;方法    O引言    熟悉Java编程的人员都知道,在创建Java数组时,必须用表达式指定其大小(如:int a[]=new int[3])或通过初始化(如:int a[]={
期刊
摘要:在ERP采购管理系统中采用DM与DB/DW紧耦合方式设计了一个开放集成的数据挖掘系统DMSPM。使用基于约束的交互式数据挖掘技术,以提高挖掘效率和灵活性;将计算模型和工具分离,形成一个模型求解的工具箱,便于使用和维护;通过人机界面和知识推理接受用户决策需求并输出决策结果,提供良好的交互性,从而形成一个拥有强大决策功能的ERP采购系统。  关键词:数据挖掘;ERP;决策支持;采购管理    O
期刊
摘要:介绍了Java ME的Web服务规范,比较了该规范定义的可选包与kXML和kSOAP之间的不同,指出了JavaME的JAX-RPC与Java SE/EE平台上的JAX-RPC 1.1之间的差异,并给出了这些差异给Java ME程序设计者带来的影响,为开发者提供了一些有价值的参考。  关键词:Java ME;Web服务;JSR 172;JAX-RPC    O引言    在有线网络环境中,We
期刊
摘要:根据Web日志中的浏览时间、服务器发送字节数信息和统计所得的页面浏览频度计算页面兴趣度,并结合模糊理论,生成模糊关联规则,提出了一个预测用户浏览兴趣的方法。实验表明,该方法是可行的并且具有较好的效果。  关键词:Web日志挖掘;模糊集;关联规则;页面兴趣度    0引言    自20世纪90年代互联网开始迅速发展以来,Web已成为人们获取信息的一个重要途径,搜索引擎在人们的日常生活和学习中发
期刊
摘要:利用Authorware外部扩展函数,对Authorware中的菜单进行改进,在Authorware中实现了多级菜单和右键弹出菜单。  关键词:Authorware;外部扩展函数;多级菜单;弹出菜单    0引言    Authorware提供了"Pull-Down Menu”这种交互方式,利用它可以制作出菜单。不过,与常见的多级Windows标准菜单相比,它的菜单大为逊色,而右键弹出菜单就
期刊
摘要:分布式拒绝服务(DDoS)攻击是目前黑客经常采用而难以防范的攻击手段。文章从DDoS的概念、攻击原理、攻击过程、攻击方法四个方面对DDoS加以说明。最后,介绍了一个局域网内的攻击实例。  关键词:DDoS;TCP/IP;TCP连接洪水;TCP SYN洪水;Smurf攻击    0引言    DDoS(分布式拒绝服务),其全称为Distributed Denial ofService,它是一种
期刊