当一台服务器开始一个PAM交易时, PAM库尝试为 pam_start(3) 调用里规定的服务导入策略. 这个策略指定了怎样处理认证请求, 并且在配置文件中进行了定义。这是在PAM里另一个核心概念: 管理员调整系统安全策略(比这个词更含义更广泛)的可能性,管理员只需简单地编辑一个文本文件。
一个策略包含四个链, 每个链对应四个PAM功能中的一个。每个链是一系列的配置声明, 每个指定一个模块去调用, 一些 (可选) 参数传递给这个模块, 和一个控制标签描述了怎样解释从模块返回的代码。
理解控制标签是理解PAM控制文件的必要条件。 有一系列不同的控制标签:
binding —— 约束
[INDENT]如果一个模块成功并且链中前面的模块没有失败, 这个链马上被终止而请求则会被批准。 如果这个模块失败, 执行链的其余部分, 但请求最终会被拒绝。
这个控制标签最早由Sun引入,使用在Solaris™ 9 (SunOS™ 5.9)上, 而且也被OpenPAM支持.
[/INDENT]required —— 需要
[INDENT]如果这个模块成功, 执行链的其余部分, 除非其它的模块失败否则这个请求将被批准。 如果这个模块失败, 也执行链的其余部分, 但请求最终会被拒绝。
[/INDENT]requisite —— 必须
[INDENT]如果这个模块成功, 执行链的其余部分, 除非其它的模块失败否则这个请求将被批准。 如果这个模块时被, 这个链马上被终止并拒绝请求。
[/INDENT]sufficient —— 充足
[INDENT]如果这个模块成功并且链内前面的模块没有失败, 这个链马上被终止并批准请求。 如果这个模块失败,这个模块被忽略, 执行链的其余部分。
因为这个标签的含义多少有些令人迷惑, 特别是当它被用在链中的组后一个模块时, 我们在这里推荐如果执行过程支持,用 binding 控制标签来代替它。
[/INDENT]optional
[INDENT]执行这个模块, 但其结果被忽略。如果这个链中的所有模块被标记为 optional, 则批准任何请求。
[/INDENT]当一个服务器调用这六个PAM基本要素之一时, PAM为这个要素所属的功能取回这个链, 并且按顺序调用链中的每一个模块, 直至结束, 或者确定不需要更多的进程(无论是因为一个 binding 或 sufficient 模块成功了, 或者因为一个 requisite 模块失败了。) 如果有和仅有一个模块被调用以及所有非选项模块成功时会批准这个请求。
注意这是可能的, 尽管一个模块在同一个链中被列出几次不太常见。 例如, 一个模块在一个目录服务器上寻找用户名和密码,这个模块可能被多次用不同的参数调用而与不同的目录服务器联络。 PAM将同一个链内的同一个模块的不同事件视为由不同,好不相干的模块(所为)。
《NetBSD指南-17.4.3.链和策略》
版主: lionux
在线用户
正浏览此版面之用户: 没有注册用户 和 0 访客