当 Solaris Resource Manager 帐户管理 PAM 模块获得控制时:
它就确定是否已安装和启用 Solaris Resource Manager;如果没有,则告诉 PAM 系统忽略该模块。
它就确定是否用户拥有一个 lnode,如果没有,则调用一个管理员可配置的 "no lnode" 脚本。
它就确定是否用户拥有使用所请求的服务和设备的许可。
它就确定是否用户业已超过警告限制;如果是,就拒绝其登录。
它就调用一个管理员可配置的 "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 的信息中得到。
提供给程序的登录名称。已通过在口令映射中检索加以鉴别;如果不存在,帐户管理模块则向 PAM 返回一个错误代码。
正在进行鉴别的用户的 UID。对于更改 UID 的服务(如 su),则是调用服务的用户的 UID;对于设置 UID 的服务(如 login),则是目标 UID(例如,USER 的 UID)。
对于跨网络的访问企图,其中所包含的是作出该企图的主机的名称。否则其值取决于实施过程。
访问服务的名称,例如,rsh、login 和 ftp。
服务被调用时所在的 TTY 的名称。(严格来讲)某些没有控制终端的服务(如 ftp)将使用进程信息填充变量(例如,ftp12345,其中 12345 是 ftpd 的进程识别符 (PID);其它程序则保持其为空或者用服务名称代替。
如果 debug 已在 pam.conf 文件中规定,则 DEBUG 被设置为真;否则,它就被设置为假。不再设置其它环境变量,所以任何脚本都必须根据需要设置自己的 PATH 变量。
缺省的 "no lnode" 脚本在缺省的调度组创建 lnode(如果一个此类的用户在口令映射中存在的话,则为 other;否则,为 root),并向系统管理员发出邮件,提醒其将新的 lnode 移到调度分层结构中的适当的位置。系统管理员寄出一份备忘录, 提醒他把新的 lnode 移动到调度层级结构中的正确位置。如要了解脚本示例,请参阅 缺省 'no lnode' 脚本。
Solaris Resource Manager PAM 模块在设备分层结构中检索终端和服务名称;如果超过限制或者某一设备标志值为 set,就向其调用者返回一个“拒绝许可”信息。
所检查的设备类别为 terminal,指的是终端名称,services 指的是所请求的服务的种类。例如, rlogin 可能会尝试使用网络设备组中的某个文件,因而为该用户所测试的标志为如下所示(假设所有的标志均设置为 group),这些标志的检查顺序为:
terminal.flag.network
terminal.flag.all
services.flag.rlogin
services.flag.netservices
只有其所有的值均为 set 时,才许可访问。另外,还要为相对应的类别检查限制(terminal 和 services)。