以下是一个 PAM 应用配置文件实例:
#%PAM-1.0 auth required pam_securetty.so auth required pam_unix.so nullok auth required pam_nologin.so account required pam_unix.so password required pam_cracklib.so retry=3 password required pam_unix.so shadow nullok use_authtok session required pam_unix.so
第一行是注释行,由该行行首的井字号(#)标示。
第二行到第四行包括了三个用于登录验证的堆积模块。
auth required pam_securetty.so — 这个模块保证:如果用户试图以根用户登录,这个用户所登录的 tty 需要在 /etc/securetty 文件中列出,如果这个文件存在的话。
如果 tty 没有在这个文件中列出,任何以根用户身份登录的企图都会失败,并显示一个 Login incorrect 信息。
auth required pam_unix.so nullok — 这个模块要求用户输入密码,然后使用存储在 /etc/passwd 和 /etc/shadow 文件(如果这个文件存在的话)中的信息来检查用户输入的密码。
auth required pam_nologin.so — 这是验证的最后一步。这一步检查 /etc/nologin 文件是否存在。如果这个文件存在,而用户并不是一个根用户,那么用户身份验证会失败。
在这个例子中,所有三个 auth 都被检查,即使第一个 auth 模块失败。这可以防止用户知道是哪一步导致了验证失败。如果一个恶意的网络用户知道了这个信息,则可以利用这个信息来进行网络攻击。
account required pam_unix.so — 这个模块执行所有需要的帐号验证。例如,如果启用 shadow 密码, pam_unix.so 的帐号接口就会检查这个帐号是否已经过期,或用户在允许的过渡期期间是否已经修改密码。
password required pam_cracklib.so retry=3 — 如果一个密码已经过期,pam_cracklib.so 模块的密码部分会要求输入一个新密码。然后,它会检查新创建的密码是否能够被密码字典破解系统轻易地破解。
retry=3 参数指定如果第一次测试失败,用户会有另外两次机会来创建一个更安全的密码。
password required pam_unix.so shadow nullok use_authtok — 这一行指定如果程序要修改用户的密码,应该使用 pam_unix.so 模块的 password 接口来进行。
shadow 参数告诉模块在更新一个用户的密码时创建 shadow 密码。
nullok 参数告诉模块允许用户把他们的密码 从 空密码改为其它的密码,否则的话,无密码状态会被认为是一个帐号锁。
这一行的最后一个参数 use_authtok 提供了一个很好的实例来说明堆积 PAM 模块时顺序的重要性。这个参数告诉模块不向用户要求输入一个新密码,它会使用前一个密码模块获得的密码。在这种情况下,所有新密码在被接受前都必须通过 pam_cracklib.so 的检查。
session required pam_unix.so — 最后一行告诉 pam_unix.so 模块的会话接口来管理会话。这个模块会在每个会话的开始和结束阶段把用户名和服务类型记录到 /var/log/secure 文件中。这个模块可以和其它会话模块堆积在一起来实现其它的功能。