模块界面命令可以被 堆积(stacked) 或在一个上面堆放另一个,这样多个模块可以被一起使用来实现一个目的。如果一个模块的控制标识值使用 "sufficient" 或 "requisite"(请参阅 第 3.1.3.2 节 “控制标识旗(Control Flag)” 来获得详细信息),那么模块排列的顺序对用户身份验证的过程就非常重要。
系统管理员要求先有特定的条件存在才允许用户进行身份验证,堆积命令可以使这个过程更容易。例如,reboot 命令通常使用一组堆积模块,请看下面的 PAM 配置文件:
[root@MyServer ~]# cat /etc/pam.d/reboot #%PAM-1.0 auth sufficient pam_rootok.so auth required pam_console.so #auth include system-auth account required pam_permit.so
第一行是注释行,不会被处理。
auth sufficient pam_rootok.so — 这一行使用 pam_rootok.so 模块来检查当前用户是否是根用户,检查它们的 UID 是否为 0。如果通过了这个检查,将不再咨询其它模块命令就会被执行。如果不能通过检查,将咨询下一个模块。
auth required pam_console.so — 这一行使用 pam_console.so 模块来对用户身份进行验证。如果这个用户已经通过终端登录,pam_console.so 会检查在 /etc/security/console.apps/ 目录下是否有和这个服务名 (reboot) 相同名称的文件。如果有这个文件,验证就会成功,控制权会被传递到下一个模块。
#auth include system-auth — 这是一个注释行,不会被处理。
account required pam_permit.so — 这一行使用 pam_permit.so 模块来允许根用户或在这个控制台登录的任何用户重新启动这个系统。