跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris 11.1 管理:安全服务 Oracle Solaris 11.1 Information Library (简体中文) |
使用 PAM 服务的系统应用程序(如 ssh)是在 PAM 配置文件中配置的。有关更多信息,请参见 pam.conf(4) 手册页。这些配置文件包括 /etc/pam.conf 文件以及放置在 /etc/pam.d 中的服务特定文件。对这些文件所做的更改将影响系统上的所有用户。服务特定的 PAM 配置文件是用于配置 PAM 的首选机制,因为其粒度意味着文件中的错误仅影响该服务。另外,添加新的 PAM 服务可简化为通过复制一个文件来实现。通过服务特定的文件可实现与其他跨平台 PAM 应用程序的更好的互操作性,因为 /etc/pam.d 是大多数 PAM 实现中的缺省配置。
此外,PAM 策略文件可用于为单个服务创建验证策略并根据需要将这些策略指定给个人、组或所有用户。缺省的 PAM 策略文件位于 /etc/security/pam_policy 中。PAM 策略文件提供了以安全可靠的方式为一个或多个用户设置或更改验证策略的功能。
PAM 配置文件由系统管理员进行管理。如果这些文件中的项顺序有误,则会导致无法预料的负面影响。例如,如果文件配置错误,则会将多个用户锁定在外,这样必须采用单用户模式才能进行修复。有关设置顺序的说明,请参见PAM 栈工作原理。
PAM 库按以下顺序收集 PAM 配置文件中的 PAM 配置信息:
在 /etc/pam.conf 中查找服务名称。
检查 /etc/pam.d/service。
在 /etc/pam.conf 中检查服务名称 other。
检查文件 /etc/pam.d/other。
此顺序允许现有的 /etc/pam.conf 文件使用位于 /etc/pam.d 中的每服务 PAM 配置文件。
/etc/pam.conf 文件和 PAM 策略文件使用与服务特定文件不同的语法。这些文件中每个文件的语法如下所述。
/etc/pam.conf 或 PAM 策略文件中的项为以下格式之一:
service-name module-type control-flag module-path module-options
service-name module-type include path-to-included-PAM-configuration
服务的名称(不区分大小写),例如 login 或 passwd。应用程序可以针对其提供的各服务使用不同的服务名。例如,Oracle Solaris 安全 shell 守护进程使用以下服务名:sshd-none、sshd-password、sshd-kbdint、sshd-pubkey 以及 sshd-hostbased。
服务名 other 是用作通配符服务名的预定义名称。如果在配置文件中未找到特定的服务名,则会使用 other 的配置。
服务类型,即 auth、account、session 或 password。
用于指明在确定服务的集成成败值过程中模块所起的作用。有效的控制标志包括 binding、definitive、include、optional、required、requisite 和 sufficient。有关这些标志用法的信息,请参见PAM 栈工作原理。
用于实现服务的库对象的路径。如果路径名不是绝对路径名,则认为路径名相对于 /usr/lib/security/$ISA/。通过使用与体系结构有关的宏 $ISA,libpam 可查看应用程序特定体系结构的目录。
传递给服务模块的选项。模块的手册页介绍了相应模块可接受的选项。典型的模块选项包括 nowarn 和 debug。
指定单独的 PAM 配置文件的完整路径或相对于 /usr/lib/security 目录的路径名。
位于 /etc/pam.d 中的每服务配置文件使用与 pam.conf 相同的语法,但未包括服务名称。使用每服务配置文件时,文件的名称就是服务名称。例如,/etc/pam.d/cron 包括 cron 命令的 PAM 配置。
pam_user_policy PAM 模块允许系统管理员为每个用户指定 PAM 配置。用户的 pam_policy 项需要提供特定于用户的 PAM 配置文件的路径。有关更多信息,请参见 pam_user_policy(5) 手册页。
以下是建立每用户验证策略的一些方法:
为用户创建一个新的 PAM 策略文件,然后使用 usermod 命令将策略指定给用户。如何将定制的 PAM 策略指定给用户中介绍了此过程。
使用 usermod 命令将预定义的策略指定给用户。
使用 usermod 命令及其 -P 选项将包括 pam_policy 项的权限配置文件指定给用户。
通过将包括 pam_policy 项的权限配置文件添加到 /etc/security/policy.conf 中的 PROFS_GRANTED 项来将其指定给所有用户。如何将新的权限策略指定给所有用户中介绍了此过程
当应用程序调用以下函数之一时,libpam 将读取 PAM 配置文件来确定哪些模块将参与该服务的操作:
如果对于该服务的操作(如验证或帐户管理),配置文件仅包含一个模块,则该模块的结果将确定操作的结果。例如,passwd 应用程序的缺省验证操作包含一个模块,即 pam_passwd_auth.so.1:
passwd auth required pam_passwd_auth.so.1
另一方面,如果为服务操作定义了多个模块,那么这些模块就会堆叠起来,即,对于该服务存在一个 PAM 栈。例如,请考虑 /etc/pam.d/login 包含以下项的情况:
auth definitive pam_user_policy.so.1 auth requisite pam_authtok_get.so.1 auth required pam_unix_auth.so.1 auth required pam_dhkeys.so.1 auth required pam_unix_cred.so.1 auth required pam_dial_auth.so.1
这些项表示 login 服务的一个 auth 栈样例。要确定此栈的结果,各个模块的结果代码需要进行集成处理。在集成处理过程中,模块按照文件中指定的顺序执行。每个成功/失败代码都会根据模块的控制标志集成到整体结果中。控制标志可能会导致栈很早就终止。例如,requisite 或 definitive 模块可能会失败,而 sufficient、definitive 或 binding 模块则可能会成功。处理栈之后,各个结果会组合成一个整体结果,传送给应用程序。
控制标志指明了 PAM 模块在确定对服务的访问权限时所扮演的角色。控制标志及其作用如下所述:
Binding-如果前面必需的模块都没有失败,则成功满足绑定模块的要求后,会向应用程序立即返回成功信息。如果满足这些条件,则不会进一步执行模块。如果失败,则会记录必需的失败信息并继续处理模块。
Definitive-如果前面必需的模块都没有失败,则成功满足限定模块的要求后,会向应用程序立即返回成功信息。如果前面的必需模块失败,则会立即将该失败返回到应用程序,而不会进一步执行模块。如果失败,则会立即返回错误信息,而不会进一步执行模块。
Include-添加单独的 PAM 配置文件中的行,以便在 PAM 栈中的此点使用。此标志不控制成功或失败行为。读取一个新文件时,PAM include 栈值会递增。当新文件中的栈检查完成时,include 栈值会递减。如果到达文件末尾,并且 PAM include 栈值为 0,则栈处理结束。PAM include 栈的最大数为 32。
Required-必须成功满足必需模块的要求才能使用服务。如果失败,则执行该服务的其余模块后会返回错误信息。仅当绑定模块或必需模块均没有报告失败的情况下,才会返回该服务最终成功的信息。
Requisite-必须成功满足必备模块的要求才能使用服务。如果失败,则会立即返回错误信息,而不会进一步执行模块。只有一个服务的所有必备模块都返回成功信息,函数才能向应用程序返回成功信息。
Sufficient-如果前面的必需模块的要求都成功满足,则成功满足控制标志为 sufficient 的模块的要求后将向应用程序立即返回成功信息,而不会进一步执行模块。如果失败,则会记录可选的失败信息。
下面的两个图说明了在集成处理过程中如何确定访问权限。第一个图说明如何为每种类型的控制标志记录成败信息。第二个图说明如何确定集成值。
图 14-2 PAM 栈:控制标志的作用
图 14-3 PAM 栈:如何确定集成值
此示例显示了 /etc/pam.d/other 文件中的验证管理缺省定义:如果未配置特定于服务的定义,则将使用这些缺省定义。
# # Default definitions for Authentication management # Used when service name is not explicitly mentioned for authentication # auth definitive pam_user_policy.so.1 auth requisite pam_authtok_get.so.1 auth required pam_dhkeys.so.1 auth required pam_unix_auth.so.1 auth required pam_unix_cred.so.1
首先,使用 pam_user_policy 模块检查用户的安全策略。definitive 控制标志指定如果安全策略的评估成功,则该服务将向应用程序返回成功,因为此时未检查其他模块。如果请求失败,则会向应用程序发送一条失败消息,而不会进行进一步检查。如果没有为用户设置策略,则将执行下一个模块。
如果没有为该用户指定每用户 PAM 策略,则将执行 pam_authtok_get 模块。此模块的控制标志将设置为 requisite。如果 pam_authtok_get 失败,则验证过程将结束并向服务返回失败信息。
如果 pam_authtok_get 没有失败,则将执行接下来的三个模块。这些模块配置有 required 控制标志,因此无论是否返回了某个失败消息,处理过程都将继续进行。执行 pam_unix_cred 后,不再执行剩余的任何模块。此时,如果所有模块都成功,用户将被授予访问权限。如果 pam_dhkeys、pam_unix_auth 或 pam_unix_cred 返回失败消息,则会拒绝用户进行访问。