PAM 配置文件 pam.conf 确定要使用的验证服务模块,以及这些模块的使用顺序。可以修改此文件来为每个系统登录应用程序选择验证模块。
PAM 配置文件所包含项的语法如下:
service-name module-type control-flag module-path module-options |
系统登录服务的名称,例如 ftp 、login、telnet。
服务的模块类型。有关更多信息,请参见PAM 模块类型。
确定模块的延续行为或失败行为。
指定实现安全策略的库对象的路径。
指定传送到服务模块的选项。
通过以 #(井号)开始行,可以向 pam.conf 文件中添加注释。可以使用空格或制表符来分隔字段。
如果在 PAM 配置文件的项中发现错误,则会生成 syslog 错误消息。如果此错误是请求服务的项,则此服务可能会返回一个错误。
每项服务的特定服务名称应该在该服务的手册页中进行介绍。例如,sshd(1M) 手册页列出 sshd 命令的所有 PAM 服务名称。
您需要了解 PAM 模块类型,因为这些类型定义模块的接口。以下是 PAM 模块的类型:
帐户模块,检查口令生命期、帐户到期日期和访问限制。通过验证模块对用户身份进行验证之后,帐户模块会确定是否应授予该用户对系统的访问权限。
验证模块,为用户提供验证。此类模块还允许设置、刷新或销毁凭证。
口令模块,允许对用户口令进行更改。
会话模块,管理登录会话的打开与关闭。这些模块还可以记录活动,或在会话结束后进行清除。
使用 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 文件。
每个 PAM 模块都可实现一种特定的功能。设置 PAM 验证时,需要指定模块和模块类型,后者定义模块执行的操作。一个模块可以实现多个模块类型,例如 auth、account、session 或 password。
每个模块的路径由已安装的 Solaris 发行版中提供的指令集确定。对于 32 位模块,模块路径为 /usr/lib/security。对于 64 位模块,路径为 /usr/lib/security/ $ISA。有关更多信息,请参见 isalist(5) 手册页。
Solaris PAM 模块的完整列表位于 /usr/lib/security/$ISA 中。每个模块都有关联的手册页,其中介绍了应用的模块类型以及所有的特殊选项。
出于安全原因,这些模块文件必须由 root 拥有,并且禁止使用 group 或 other 权限写入。如果文件并非由 root 拥有,则 PAM 不会装入模块。
login auth requisite pam_authtok_get.so.1 login auth required pam_dhkeys.so.1 login auth required pam_unix_cred.so.1 login auth required pam_unix_auth.so.1 login auth required pam_dial_auth.so.1 |
运行 login 命令时,必须针对 pam_authtok_get、pam_dhkeys、pam_auth_cred、pam_auth_unix 和 pam_dial_auth 模块成功执行验证。pam_authtok_get 项中的 requisite 标志表示,如果此模块响应失败,则不再检查任何其他模块。但是,如果此模块响应成功,则会继续检查其余模块。如果针对所有模块的验证都失败,则验证请求也会失败。
rlogin auth sufficient pam_rhosts_auth.so.1 rlogin auth requisite pam_authtok_get.so.1 rlogin auth required pam_dhkeys.so.1 rlogin auth required pam_unix_cred.so.1 rlogin auth required pam_unix_auth.so.1 |
对于 rlogin 命令,sufficient 控制标志表示通过 pam_rhosts_auth 模块进行的验证足以使验证请求成功。无需执行任何其他检查。如果通过 pam_rhosts_auth 进行的验证失败,则通过 pam_authtok_get、pam_dhkeys、pam_auth_cred 和 pam_unix_auth 模块进行的验证必须成功。虽然其他模块中的失败信息会阻止成功验证,但是 pam_rhosts_auth 模块中的失败信息不会。此外,与 login 中的项相同,pam_authtok_get 项中的 requisite 控制标志表示如果此模块响应失败,则验证请求失败,并且不再检查任何其他模块。
other session required pam_unix_session.so.1 |
使用 other 服务名称,可以为 pam.conf 文件中未包括的任何其他命令设置缺省服务。other 服务名称简化了文件管理,因为只需一个项就可涵盖使用同一模块的许多服务。此外,other 服务名称用作“全面管理功能”时,可以确保每个访问都由一个模块来表示。
module-path 的项是“相对于根目录的”。如果为 module-path 指定的文件名未以斜杠 (/) 开始,则文件名前面为路径 /usr/lib/security/$ISA。必须对位于其他目录中的模块使用全路径名。可以在每个模块的手册页中找到 module-options 的值。