工作类别(type)、流程栈(stack)和控制模式(control)

Linux-PAM 工作的“类别”(type)

PAM 的具体工作主要有以下四种类别(type):account,auth,password 以及 session。这里,我们用非定义化的语言来简单解释一下这四种类别。

  • account:在用户能不能使用某服务上具有发言权,但不负责身份认证。比如,account 这个 type 可以检查用户能不能在一天的某个时间段登录系统、这个用户有没有过期、以及当前的登录用户数是否已经饱和等等。通常情况下,在登录系统时,如果你连 account 这个条件都没满足的话,即便有密码也还是进不去系统的。

  • auth:验证“你的确是你”的 type 。一般来说,询问你密码的就是这个 type。假如你的验证方式有很多,比如一次性密码、指纹、虹膜等等,都应该添加在 auth 下。auth 做的另外一件事情是权限授予,比如赋给用户某个组的组员身份等等。

  • password:主要负责和密码有关的工作。修改密码的时候有时会提示“密码不够长”、“密码是个常用单词”之类的,就是在这里设置的。在这里还设置了保存密码时使用了哪种加密方式(比如现在常用的 SHA-512)。请注意,这里的密码不局限于 /etc/shadow 中的密码,有关认证 token 的管理都应该在此设置:如果你使用指纹登录 Linux,在设置新指纹时,如果希望首先验证这是人的指纹而不是狗的指纹,也应该放在这里。

  • session:一个“忙前忙后”的 type,它要在某个服务提供给用户之前和之后做各种工作。比如用户登录之前要将用户家目录准备好,或者在用户登录之后输出 motd 等等。

请注意:PAM 不仅仅在用户登录时才发挥作用,sudo命令,su命令,passwd命令都会用到 PAM。前文中所有提及“登录”的地方都仅仅是举例,您完全可以用其他需要用户认证的服务(或者命令)去举例,从而更全面地理解 PAM。

PAM 的流程栈(stack)概念:它是认证时执行步骤和规则的堆叠。在某个服务的配置文件中,它体现在了配置文件中的自上而下的执行顺序中。栈是可以被引用的,即在一个栈(或者流程)中嵌入另一个栈。我们之后和它会有更多的接触。

第二列为控制模式(control),用于定义各个认证模块在给出各种结果时 PAM 的行为,或者调用在别的配置文件中定义的认证流程栈。该列有两种形式,一种是比较常见的“关键字”模式,另一种则是用方括号([])包含的“返回值=行为”模式。

“关键字”模式下,有以下几种控制模式:

  • required:如果本条目没有被满足,那最终本次认证一定失败,但认证过程不因此打断。整个栈运行完毕之后才会返回(已经注定了的)“认证失败”信号。

  • requisite:如果本条目没有被满足,那本次认证一定失败,而且整个栈立即中止并返回错误信号。

  • sufficient:如果本条目的条件被满足,且本条目之前没有任何required条目失败,则立即返回“认证成功”信号;如果对本条目的验证失败,不对结果造成影响。

  • optional:该条目仅在整个栈中只有这一个条目时才有决定性作用,否则无论该条验证成功与否都和最终结果无关。

  • include:将其他配置文件中的流程栈包含在当前的位置,就好像将其他配置文件中的内容复制粘贴到这里一样。

  • substack:运行其他配置文件中的流程,并将整个运行结果作为该行的结果进行输出。该模式和 include 的不同点在于认证结果的作用域:如果某个流程栈 include 了一个带 requisite 的栈,这个 requisite 失败将直接导致认证失败,同时退出栈;而某个流程栈 substack 了同样的栈时,requisite 的失败只会导致这个子栈返回失败信号,母栈并不会在此退出。

“返回值=行为”模式则更为复杂,其格式如下:

[value1=action1 value2=action2 ...]

其中,valueN 的值是各个认证模块执行之后的返回值。有 success、user_unknown、new_authtok_reqd、default 等等数十种。其中,default 代表其他所有没有明确说明的返回值。返回值结果清单可以在 /usr/include/security/_pam_types.h 中找到,也可以查询 pam(3) 获取详细描述。

流程栈中很可能有多个验证规则,每条验证的返回值可能不尽相同,那么到底哪一个验证规则能作为最终的结果呢?这就需要 actionN 的值来决定了。actionN 的值有以下几种:

  • ignore:在一个栈中有多个认证条目的情况下,如果标记 ignore 的返回值被命中,那么这条返回值不会对最终的认证结果产生影响。

  • bad:标记 bad 的返回值被命中时,最终的认证结果注定会失败。此外,如果这条 bad 的返回值是整个栈的第一个失败项,那么整个栈的返回值一定是这个返回值,后面的认证无论结果怎样都改变不了现状了。

  • die:标记 die 的返回值被命中时,马上退出栈并宣告失败。整个返回值为这个 die 的返回值。

  • ok:在一个栈的运行过程中,如果 ok 前面没有返回值,或者前面的返回值为 PAM_SUCCESS,那么这个标记了 ok 的返回值将覆盖前面的返回值。但如果前面执行过的验证中有最终将导致失败的返回值,那 ok 标记的值将不会起作用。

  • done:在前面没有 bad 值被命中的情况下,done 值被命中之后将马上被返回,并退出整个栈。

  • N(一个自然数):功效和 ok 类似,并且会跳过接下来的 N 个验证步骤。如果 N = 0 则和 ok 完全相同。

  • reset:清空之前生效的返回值,并且从下面的验证起重新开始。

我们在前文中已经介绍了控制模式(contro)的“关键字”模式。实际上,“关键字”模式可以等效地用“返回值=行为”模式来表示。具体的对应如下:

  • required:
    [success=ok new_authtok_reqd=ok ignore=ignore default=bad]

  • requisite:
    [success=ok new_authtok_reqd=ok ignore=ignore default=die]

  • sufficient:
    [success=done new_authtok_reqd=done default=ignore]

  • optional:
    [success=ok new_authtok_reqd=ok default=ignore]

linux pam 控制模式的更多相关文章

  1. [更新]跨平台物联网通讯框架 ServerSuperIO v1.2(SSIO),增加数据分发控制模式

    1.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO) 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.C#工业 ...

  2. Linux PAM&&PAM后门

    Linux PAM&&PAM后门 我是壮丁 · 2014/03/24 11:08 0x00 PAM简介 PAM (Pluggable Authentication Modules )是 ...

  3. Linux下NAT模式和桥接模式的网络配置

        Linux下NAT模式和桥接模式的网络配置 最近在配置linux虚拟机的时候发现有很多坑,现在记录下来以防日后又跳到坑里. 我的运行环境是:主机 windows 7  虚拟机 Virtualb ...

  4. 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。

    ###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...

  5. linux磁盘分区模式

    linux磁盘分区模式 模式一:MBR 1)主分区不超过四个 2)单个分区容量最大2TB 模式二:GPT 1)主分区个数"几乎"没有限制(原因:在GPT的分区表中最多可以支持128 ...

  6. VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程

    VMware Workstation虚拟机中的Linux通过NAT模式共享上网配置教程 在VMware Workstation虚拟机下面,Linux虚机要上网,一般是桥接模式,但我自己的电脑上网的环境 ...

  7. wpa_supplicant 移植及 linux 命令行模式配置无线上网

    本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...

  8. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  9. linux 终端控制-- 多彩输出 格式排版

    linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...

随机推荐

  1. 《java编程思想》读书笔记(一)开篇&第五章(1)

    2017 ---新篇章  今天终于找到阅读<java编程思想>这本书方法了,表示打开了一个新世界. 第一章:对象导论 内容不多但也有20页,主要是对整本书的一个概括.因为已经有过完整JAV ...

  2. MFC编程 | 非模态对话框的定义

    因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST ...

  3. CSS布局奇技淫巧:各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  4. statsd+graphite

    一些观点: Statsd:一个nodejs的客户端,用于向graphite的收集器发送数据,使用各类编程语言的客户端响起发送timer,counter等统计数据后,其通过udp定时向graphite发 ...

  5. nginx入门篇----功能特性

    1.nginx功能特性 可以作为http服务器或者反向代理服务器 能够快速响应静态页面(html)的请求 支持FastCGI.SSL.Virtual Host.URL Rewrite.HTTP.Gzi ...

  6. 使用keytool 生成证书

    keytool 工具介绍 keytool 是java 用于管理密钥和证书的工具,其功能包括: 1 创建并管理密钥 2 创建并管理证书 3 作为CA 为证书授权 4 导入导出证书 keytool 采用k ...

  7. Process的Waitfor() 引起代码死锁

    Java用process调用c#的exe后,process.waitfor(). exe执行会停在某处.据说是waitfor引起的exe子线程死锁. 先存一个链接 http://yearsaaaa12 ...

  8. 为毛无法创建文本文件COM1.txt

    是的,windows系统下,右键,新建文本文件,将文件名编辑为COM1.txt,确认,保存……THEN....你会发现无论如何也无法创建一个文本文件,名为COM1.txt. 猜是COM1被作为了IO设 ...

  9. -Three.js开发指南---用three.js创建你的第一个三维场景(第一章)

    本章主要做了下面的工作 1 生成一个简单的场景,该场景的物体只有平面和坐标轴 2 在第一个demo的基础上添加光源和方块物体,并生成阴影 3 在第二个demo的基础上,增加动画,使得方块进行旋转 4 ...

  10. 【SFTP】使用Jsch实现Sftp文件下载-支持断点续传和进程监控

    参考上篇文章: <[SFTP]使用Jsch实现Sftp文件下载-支持断点续传和进程监控>:http://www.cnblogs.com/ssslinppp/p/6248763.html  ...