Solaris Resource Manager 帐户管理 PAM 模块获得控制时,就:
确定是否已安装和启用 Solaris Resource Manager;如果没有,就告诉 PAM 系统忽略该模块,
确定是否用户拥有一个 lnode,如果没有,就调用一个管理员可配置的 "no lnode"正文,
确定是否用户拥有使用所请求的服务和设备的许可,
确定是否用户业已超过警告限制;如果是,就拒绝其登录,
调用一个管理员可配置的"every login"正文。
如果上述步骤中有任何一个失败,则其余的步骤就不再执行,且 Solaris Resource Manager 帐户管理 PAM 模块拒绝使用服务。在可能的情况下,会通过服务向用户传递一个解释性的消息。
默认的"missing lnode"正文将为用户创建一个 lnode,并发出邮件,将此动作通知给系统管理员。默认的正文为/etc/srm/nolnode,但可以对此进行更改,方法是编辑 /etc/pam.conf 文件,以及改变 Solaris Resource Manager 帐户管理模块行上的 nolnode 选项的值。通常没有配置"every login"正文。可以通过向/etc/pam.conf 中的任意 Solaris Resource Manager 帐户管理模块添加一个 everylogin=pathname 选项来对此进行配置。正文是作为根用户而调用的。标准输入、输出和错误被关闭。如果某个正文以非零状态退出,则访问将遭到拒绝。所有的信息均作为环境变量而得到传递,这些变量可以直接从服务传递给 PAM 的信息推导得出:
提供给程序的登录名称。业已通过在口令映射中检索加以鉴别;如果不存在,帐户管理模块则向 PAM 返回一个错误代码。
正在进行鉴别的用户的 UID。对于更改 UID 的服务(诸如 su),则是调用服务的用户的 UID;对于设置 UID 的服务(诸如 login),则是目标 UID(例如,USER 的 UID)。
对于跨网络的访问企图,其中所包含的是作出该企图的主机的名称。否则其值取决于实现过程。
访问服务的名称,例如,rsh、login、ftp。等等。
服务被调用时所在的 TTY 的名称。(严格来讲)某些没有控制终端的服务(诸如ftp),将用一些意思含糊的内容填充该变量(例如,ftp12345,其中12345是 ftpd 的进程识别符(PID));其它程序则保持其为空或者用服务名称代替。
如果在 pam.conf 文件中指定了 debug,则 DEBUG 设置为真;否则设置为假。没有设置任何其它的环境变量,所有任何正文必须根据需要设置其自己的 PATH 变量。
默认的"no lnode"正文在默认的调度组创建 lnode(other,如果一个此类的用户在口令映射中存在的话;否则,root),并向系统管理员发出邮件,提醒其将新的 lnode 移到调度分层结构中的适当的位置。如要了解正文示例,请参阅 "默认 "no lnode" 正文"。
Solaris Resource Manager PAM 模块在设备分层结构中检索终端和服务名称;如果超过显示或者某一设备标志值为"set",就向其调用者返回一个"permission denied"(拒绝许可)。
所检查的设备类别为 terminal,指的是终端名称,以及 services 指的是所请求的服务的种类。例如,某一登录企图可能会尝试使用网络设备组中的某个文件,因而为该用户所测试的标志为如下所示(假设所有的标志均设置为 group)。这些标志的检查顺序为:
terminal.flag.network
terminal.flag.all
services.flag.rlogin
services.flag.netservices
如果其所有的值均为"set",则许可访问;另外,还要为相对应的类别检查限制(terminal 和 services)。
对于类似于 login 的服务(即在 utmp 文件中创建一个条目的服务),如果 PAM 的会话期间管理工具和帐户管理工具两者均在 /etc/pam.conf 中得到配置的话,就全部加以调用。
Solaris Resource Manager 产品的会话期间管理负责设备收费。它查看是否用户业已超过连接时间限制,或者 onelogin 标志值为 set而业已登录;如果是的话,则阻止其登录。
否则,会向 limdaemon 进程生成一条消息,将登录以及登录所在的终端的配置费用通知给它。然后就告知核心,当前的进程是一个"login header process"(登录头目进程),必须告知 limdaemon 进程,当前的进程何时消亡。
limdaemon 进程然后就对连接时间限制进行跟踪,并在其将要被超过时发出警告。