使用 PAM 服务模块的请求返回以下三种状态之一:
成功-满足安全策略
失败-未满足安全策略
忽略-此请求未参与策略请求
栈中的每个模块都可以确定请求的成功或失败。要确定模块的延续行为或失败行为,必须为 PAM 配置文件中的每个项选择一个控制标志。
延续行为定义是否检查后面的所有模块。根据特定模块的响应,可以决定跳过所有其他模块。
失败行为定义如何记录或报告错误消息。失败信息既可以是可选信息,也可以是必需信息。必需的失败信息会导致此请求失败,即使其他模块成功也是如此。可选的失败信息不会始终导致此请求失败。
binding-使用此控制标志,如果模块响应成功,并且先前带有 required 标志的模块都没有失败,则 PAM 会跳过其余模块并返回成功信息。如果返回失败信息,则 PAM 会记录必需的失败信息,然后继续处理栈。
除模块响应成功情况下不再检查任何其他模块以外,binding 控制标志类似于 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。如果先前的必需模块都响应成功,则使用此标志的模块中的成功信息会使请求成功。
required-使用此控制标志,如果模块响应成功,则 PAM 会记录必需的成功信息并继续检查后面的所有模块。如果此模块响应失败,并且此失败信息是第一个必需的失败信息,则 PAM 会保存错误消息并继续检查栈。如果此失败信息不是第一个失败信息,则 PAM 只会继续检查栈。此标志允许处理整个序列,从而不会泄露可帮助攻击者进行攻击的信息。攻击者可找出的所有信息就是请求失败。
如果某特定模块必须响应成功才能使请求成功,则应使用 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。使用此标志的模块中的成功信息并不表示请求成功。栈中带有 required、requisite 或 binding 控制标志的其他模块必须都响应成功,请求才会成功。
requisite-使用此控制标志,如果模块响应成功,则 PAM 会记录必需的成功信息并继续检查后面的所有模块。如果此模块响应失败,则 PAM 会记录必需的失败信息,返回第一个必需失败信息的错误消息,然后跳过任何其他检查。
除模块响应失败情况下不再检查任何其他模块以外,requisite 控制标志类似于 required 控制标志。无论其他模块如何响应,使用此标志的模块中的失败信息会阻止请求成功。使用此标志的模块中的成功信息并不表示请求成功。栈中带有 required、requisite 或 binding 控制标志的其他模块必须都响应成功,请求才会成功。
optional-使用此控制标志,如果模块响应成功,则 PAM 会记录可选的成功信息并继续检查栈。如果此模块响应失败,则 PAM 会记录可选的失败信息并继续检查栈。
当栈中的成功验证足以对用户进行验证时,应使用 optional 控制标志。仅当此特定服务无需成功执行时才应使用此标志。请求的成功或失败由必需的失败信息或成功信息确定。
如果用户需要具有与特定服务关联的权限才能完成其工作,则不应将模块标记为 optional。
sufficient-使用此控制标志,如果模块响应成功,并且先前带有 required 标志的模块都没有失败,则 PAM 会跳过其余模块并返回成功信息。如果此模块响应失败,则 PAM 会记录可选的失败信息并继续检查栈。
除模块响应成功情况下不再检查任何其他模块以外,sufficient 控制标志类似于 optional 控制标志。如果先前的 required 模块都响应成功,则使用此标志的模块中的成功信息会使请求成功。如果其他模块都响应失败,则使用此标志的模块中的失败信息会导致请求失败。
有关这些控制标志的更多信息,请参见下一节,其中介绍了通用 /etc/pam.conf 文件。