Solaris Resource Manager 1.3 系统管理指南

PAM 子系统

从 Solaris 2.6 版本开始,Solaris 系统可支持可插接鉴别模块(PAM)。无论何时只要某个用户请求涉及该用户身份(例如,登录到系统上,调用 'r'命令如 rcprsh 等命令,使用 ftp 或使用 su)的更改或设置的操作时,就使用一组可配置模块提供鉴别、帐户管理和会话管理。Solaris Resource Manager 为登录会计和修改 su 行为提供了一个 PAM 模块。

被用于请求操作的程序称为一个服务。

PAM 系统的全部内容均在手册页 pam( 3), pam.conf(4), pam_unix(5) 和 pam_srm(5SRM) 中,提供了针对 Solaris Resource Manager 帐户和会话管理模块的所支持变量的完整列表。

在 Solaris Resource Manager 中,PAM 模块提供帐户管理和会话管理功能。PAM 的行为可通过编辑文件 /etc/pam.conf 加以控制。对于正常的 Solaris Resource Manager 行为,则应将 Solaris Resource Manager PAM 模块配置为 requisite(对于会话管理的所有类似登录的服务),和 requisite(对于所有 PAM 服务的帐户管理)。通常,Solaris Resource Manager 模块应被放置在所有其它 requiredrequisite 模块之后,任何其它 sufficientoptional 模块之前。

安装时,Solaris Resource Manager 对 /etc/pam.conf 进行编辑,以提供合适的性能。它为每种会话期间或帐户管理已得到配置的服务插入类似于下面的命令行(其中包括 other):

login account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode
other session requisite pam_srm.so.1
other account requisite pam_srm.so.1 nolnode=/etc/srm/nolnode

第一行限定对于服务 login 来说,模块 pam_share.so.1 被用于提供帐户管理功能,如果要使 login 成功且被赋予变量 nolnode=/etc/srm/nolnode,则它必须允许登录。请参阅 pam.conf(4) ,以获取不同的控制标记(required、requisite、optional sufficient)的解释。

第二行说的是 login 服务将使用 pam_share.so.1 模块进行会话管理。

pam_srm(5SRM) 中提供了针对 Solaris Resource Manager 帐户和会话管理模块的所支持的变量的完整列表。

帐户管理

当 Solaris Resource Manager 帐户管理 PAM 模块获得控制时:

  1. 它就确定是否已安装和启用 Solaris Resource Manager;如果没有,则告诉 PAM 系统忽略该模块。

  2. 它就确定是否用户拥有一个 lnode,如果没有,则调用一个管理员可配置的 "no lnode" 脚本。

  3. 它就确定是否用户拥有使用所请求的服务和设备的许可。

  4. 它就确定是否用户业已超过警告限制;如果是,就拒绝其登录。

  5. 它就调用一个管理员可配置的 "every login" 脚本。

如果上述步骤中有任何一个失败,则剩余的步骤不再执行,且 Solaris Resource Manager 帐户管理 PAM 模块拒绝使用服务。在可能的情况下,会通过服务向用户传递一个解释性的消息。

脚本

缺省的“丢失的 lnode”脚本将为用户创建一个 lnode,并发送电子邮件通知系统管理员已经这样做了。缺省的脚本是 /etc/srm/nolnode,但它可通过编辑文件 /etc/pam.conf 并更改 Solaris Resource Manager 帐户管理模块行上的 nolnode 选项的数值而得到更改。“每次登录”脚本一般不配置。但是,它可通过将 [[everylogin=pathname]] 选项添加到 /etc/pam.conf 中的任何 Solaris Resource Manager 帐户管理模块上而得到配置。脚本是作为 root 用户被调用的。标准输入、输出和错误均被关闭。如果某个脚本以非零状态退出,则登录就被拒绝。所有信息均被作为环境变量被传递,且直接从由服务传递到 PAM 的信息中得到。

USER

提供给程序的登录名称。已通过在口令映射中检索加以鉴别;如果不存在,帐户管理模块则向 PAM 返回一个错误代码。

UID

正在进行鉴别的用户的 UID。对于更改 UID 的服务(如 su),则是调用服务的用户的 UID;对于设置 UID 的服务(如 login),则是目标 UID(例如,USER 的 UID)。

RHOST

对于跨网络的访问企图,其中所包含的是作出该企图的主机的名称。否则其值取决于实施过程。

SERVICE

访问服务的名称,例如,rshloginftp

TTY

服务被调用时所在的 TTY 的名称。(严格来讲)某些没有控制终端的服务(如 ftp)将使用进程信息填充变量(例如,ftp12345,其中 12345ftpd 的进程识别符 (PID);其它程序则保持其为空或者用服务名称代替。

DEBUG

如果 debug 已在 pam.conf 文件中规定,则 DEBUG 被设置为真;否则,它就被设置为假。不再设置其它环境变量,所以任何脚本都必须根据需要设置自己的 PATH 变量。

缺省的 "no lnode" 脚本在缺省的调度组创建 lnode(如果一个此类的用户在口令映射中存在的话,则为 other;否则,为 root),并向系统管理员发出邮件,提醒其将新的 lnode 移到调度分层结构中的适当的位置。系统管理员寄出一份备忘录, 提醒他把新的 lnode 移动到调度层级结构中的正确位置。如要了解脚本示例,请参阅 缺省 'no lnode' 脚本

PAM 与设备组的交互

Solaris Resource Manager PAM 模块在设备分层结构中检索终端和服务名称;如果超过限制或者某一设备标志值为 set,就向其调用者返回一个“拒绝许可”信息。

所检查的设备类别为 terminal,指的是终端名称,services 指的是所请求的服务的种类。例如, rlogin 可能会尝试使用网络设备组中的某个文件,因而为该用户所测试的标志为如下所示(假设所有的标志均设置为 group),这些标志的检查顺序为:

只有其所有的值均为 set 时,才许可访问。另外,还要为相对应的类别检查限制(terminalservices)。

会话管理

对于类似于 login 的服务(即在 utmp 文件中创建一个条目的服务)。如果 PAM 的会话期间管理工具和帐户管理工具两者均在 /etc/pam.conf 中得到配置的话,则全部加以调用。

Solaris Resource Manager 产品的会话期间管理负责设备收费。它查看是否用户业已超过连接时间限制,或者 onelogin 标志值为 set 而已登录;如果是的话,则阻止其登录。

否则,它就会向 limdaemon 进程生成一条消息,将登录以及登录所在的终端的配置费用通知给它。它然后就告知内核,当前的进程是一个登录头目进程,必须告知 limdaemon 进程,当前的进程何时消亡。

limdaemon 进程然后就对连接时间限制进行跟踪,并在其将要被超过时发出警告。