本文阐述了 Linux-PAM 的概念,同时还与读者一道分析了 Linux-PAM 的体系结构,作者希望籍此以加深读者对 Linux-PAM 的理解,以便对其有更深层的把握。

一、什么是Linux-PAM

为安全起见,计算机系统只有经过授权的合法用户才能访问,在这里如何正确鉴别用户的真实身份是一个关键的问题。所谓用户鉴别,就是用户向系统以一种安全的方式提交自己的×××明,然后由系统确认用户的身份是否属实的过程。换句话说,用户鉴别是系统的门户,每个用户进入到系统中都必须经过鉴别这一道关。

最初,Linux系统的用户鉴别过程就像各种Unix系统的一样:系统管理员为用户建立一个帐号并为其指定一个口令,用户用此指定的口令登录后重新设置自己的口令,这样用户就具有了一个只有他自己知道的秘密口令。一般情况下,用户的口令经过加密处理后存放于 /etc/passwd 文件中。用户登录时,登录服务程序提示用户输入其用户名和口令,然后将口令加密并与 /etc/passwd 文件中对应帐号的加密口令进行比较,如果口令相匹配,说明用户的身份属实并允许此用户访问系统。这种思想基于只有用户自己知道他的口令,所以输入的口令是正确的话,那么系统就认定他是所声称的那个人。

后来,还采用了许多其他的鉴别用户的方法,如用于网络环境的 Kerberos 以及基于智能卡的鉴别系统等。但是这些鉴别方案有一个通病:实现鉴别功能的代码通常作为应用程序的一部分而一起编译,这样问题就来了------如果发现所用算法存在某些缺陷或想采用另一种鉴别方法时,用户不得不重写(修改或替换)然后重新编译原程序。很明显,我们原先的鉴别方案缺乏灵活性,这里的牵一发而动全身的情形很是让人恼火。

鉴于以上原因,人们开始寻找一种更佳的替代方案:一方面,将鉴别功能从应用中独立出来,单独进行模块化设计,实现和维护;另一方面,为这些鉴别模块建立标准 API,以便各应用程序能方便的使用它们提供的各种功能;同时,鉴别机制对其上层用户(包括应用程序和最终用户)是透明的。直到 1995 年,SUN 的研究人员提出了一种满足以上需求的方案--插件式鉴别模块(PAM)机制并首次在其操作系统 Solaris 2.3 上部分实现。插件式鉴别模块(PAM)机制采用模块化设计和插件功能,使得我们可以轻易地在应用程序中插入新的鉴别模块或替换原先的组件,而不必对应用程序做任何修改,从而使软件的定制、维持和升级更加轻松--因为鉴别机制与应用程序之间相对独立。应用程序可以通过 PAM API 方便的使用 PAM 提供的各种鉴别功能,而不必了解太多的底层细节。此外,PAM的易用性也较强,主要表现在它对上层屏蔽了鉴别的具体细节,所以用户不必被迫学习各种各样的鉴别方式,也不必记住多个口令;又由于它实现了多鉴别机制的集成问题,所以单个程序可以轻易集成多种鉴别机制如 Kerberos 鉴别机制和 Diffie - Hellman 鉴别机制等,但用户仍可以用同一个口令登录而感觉不到采取了各种不同鉴别方法。

在广大开发人员的努力下,各版本的 UNIX 系统陆续提供对 PAM 的支持。其中,Linux-PAM 是专门为 Linux 机器实现的,包括 Caldera 1.3、2.2、Debian 2.2、Turbo Linux 3.6、Red Hat 5.0 以及 SuSE 6.2 及它们的后续版本都提供对 PAM 的支持。FreeBSD 从 3.1 版开始支持 PAM。需要注意的是,除了具体实现不同外,各种版本 Unix 系统上的 PAM 的框架是相同的,所以我们在这里介绍的 Linux-PAM 框架知识具有普遍性。因此在下文介绍其框架的过程中可以看到,我们并没有刻意区分 PAM 与 Linux-PAM 这两个术语。

二、PAM 的分层体系结构

PAM 为了实现其插件功能和易用性,它采取了分层设计思想:让各鉴别模块从应用程序中独立出来,然后通过PAM API作为两者联系的纽带,这样应用程序就可以根据需要灵活地在其中"插入"所需鉴别功能模块,从而真正实现了"鉴别功能,随需应变"。实际上,这一思路非常符合软件设计中的"高内聚,低耦合"这一重要思想,PAM 的体系如下简图所示:

图1 PAM体系结构

从上图可以看出,PAM API 起着承上启下的作用,它是应用程序和鉴别模块之间联系的纽带:当应用程序调用 PAM API 时,应用接口层按照配置文件 pam.conf 的规定,加载相应的鉴别模块。然后把请求(即从应用程序那里得到的参数)传递给底层的鉴别模块,这时鉴别模块就可以根据要求执行具体的鉴别操作了。当鉴别模块执行完相应操作后,将结果返回给应用接口层,然后由接口层根据配置的具体情况将来自鉴别模块的应答返回给应用程序。

上面描述了 PAM 的各个组成部分,以及它们作为整体的运作机理。下面将对 PAM 的关键的低二层分别加以介绍。

三、第一层:模块层

模块层处于整个结构的最底层,它向上为接口层提供用户鉴别等服务,也就是说所有具体的鉴别工作都是由该层的模块来完成的。对于应用程序,有些不但需要验证用户的口令,还可能要求验证用户的帐户是否已经过期。此外,有些应用程序也许还会要求记录当前会话的有关信息或改变口令等,所以 PAM 在模块层除了提供鉴别模块外,同时提供了支持帐户管理、会话管理以及口令管理功能的模块。当然,这四种模块并不是所有应用程序所必需的,而是根据需要灵活取舍,比如虽然 login 可能要求访问所有四种模块,但是 su 可能仅仅需要使用鉴别组件即可。至于如何取舍则涉及到接口层的 PAM API和配置文件,这部分内容将在下文中加以介绍。

linux oracle pam,Linux技术之深入Linux PAM 体系结构(一)相关推荐

  1. linux oracle查看服务,技术|如何查看 Linux 中所有正在运行的服务

    有许多方法和工具可以查看 Linux 中所有正在运行的服务.大多数管理员会在 System V(SysV)初始化系统中使用 service service-name status 或 /etc/ini ...

  2. linux oracle 删除为空的dbf,Linux上Oracle误删除一个没有用的dbf表空间文件

    在Linux下面安装好Oracle只有,Linux 下面就会有一个Oracle用户,Linux上Oracle误删除一个没有用的dbf表空间文件,导致数据库连接 在Linux下面安装好Oracle只有, ...

  3. linux exfat分区格式化,技术|如何在 Linux 上将 USB 盘格式化为 exFAT

    本教程教你如何在 Linux 系统上以 exFAT 格式格式化 USB 盘.同时包括 GUI 和命令行两种方法. 长期以来,FAT 是用于格式化磁盘文件系统的默认选择.它与几乎所有主要操作系统兼容. ...

  4. linux usb 重启电脑,技术|如何在 Linux 中创建 USB 启动盘来拯救 Windows 用户

    WoeUSB 可以在 Linux 中制作 Windows 启动盘,并帮助你的朋友解锁他们罢工的机器. 人们经常要求我帮助他们恢复被锁死或损坏的 Windows 电脑.有时,我可以使用 Linux US ...

  5. linux 嵌入式 快照_技术|定制嵌入式 Linux 发行版

    便宜的物联网板的普及意味着它不仅会控制应用程序,还会控制整个软件平台. 那么,如何构建一个针对特定用途的交叉编译应用程序的自定义发行版呢? 正如 Michael J. Hammel 在这里解释的那样, ...

  6. Linux初始化内存盘黑屏,详解linux内存磁盘初始化技术.doc

    详解linux内存磁盘初始化技术 详解linux内存磁盘初始化技术 /5502266.html 关键词: HYPERLINK "/tag/initrd" \n _blankinit ...

  7. linux oracle pam,Linux下安装Oracle11g软、硬件环境检测和修改

    Linux下安装Oracle 11g 软.硬件环境检测和修改 Linux安装Oracle 11G 系统硬件要求: 1. 内存::必须高于1G的物理内存 检查内存大小:grep MemTotal /pr ...

  8. linux+Oracle集群课程全面升级

    作为国内最早从事开源架构师级课程研发的公司,从2006年10月开始,荣新稳步提升,将互联网运维作为主导就业方向,并将Linux集群架构课程发展成为国内最顶级.覆盖技术最全面的Linux课程,作为荣新I ...

  9. linux下dds软件,【数据库】Linux 单实例环境下实现Oracle数据库和DDS软件的开机自动重启...

    Linux 单实例环境下实现Oracle数据库和DDS软件的开机自动重启1.修改/etc/oratab# vi /etc/orataboradb:/opt/ora10/product/10.2 首页 ...

  10. linux oracle开启监听服务器,linux服务器启动oracle监听端口

    oracle监听 原理 客户端向服务器端发送连接请求,监听器监听到客户端德连接请求 监听器监听到客户端德连接请求后,把客户端德连接请求交给数据库服务器处理 客户端和服务器端建立连接,连接建立后,服务器 ...

最新文章

  1. asp.net mvc3 Razor引擎中@使用规则小记
  2. internet 协议入门
  3. Linux内核中max()宏的奥妙何在?(二)——大神Linus对这个宏怎么看?
  4. hdu 5396 Expression
  5. 台式电脑计算机无法启动 启动修复,遇到计算机无法启动时,该怎么修复?
  6. VS2010下的多线程窗口
  7. Spring Security使用Hibernate实现自定义UserDetails
  8. 台式计算机主机组成图,台式电脑主板的各部分组成及详细说明,还有各种连...-卓优商学问答...
  9. mysql 开启用户远程登录
  10. 2020广西电子设计竞赛题目
  11. 板绘新手sai入门基础教程,非常详细全面!
  12. MySQL数据备份恢复太慢解决办法
  13. Linux 脚本部署应用宝,应用宝新版继续整合资源,腾讯移动分发再加力
  14. 三部门禁止对新能源车限购 专家:京沪情况复杂,政策仍不明朗
  15. 关于tv app的一些想法
  16. 机器学习(十一) 迁移学习
  17. 每月一书(202112):《王阳明心学》
  18. Ubuntu 20.04 grub更换windows10为默认启动项
  19. 《汇编语言》学习笔记
  20. 来聊一聊那个很牛逼的极光推送

热门文章

  1. 大数据分析常见的几种方法
  2. 使用大数据可视化平台有什么好处
  3. AcWing 836. 合并集合
  4. like mybatis 用法_Mybaits中Like 的使用方式以及一些注意点
  5. Sql根据不同条件统计总数
  6. 笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧)
  7. DataNode 运行状况
  8. 以太坊智能合约开发,Web3.js API 中文文档 ethereum web3.js入门说明
  9. iOS Crash常规跟踪方法及Bugly集成运用
  10. LSTM网络(Long Short-Term Memory )