RHEL4からREHL5にバージョンアップを考えているので設定を確認しています。

ログインに三回失敗するとアカウントロックされる設定で少し悩みました。というのは、RHEL4のpamモジュールとRHEL5のモジュールでバージョンが異なり、使い方が変更されているのです。

ログインの失敗回数を数えるにはpam_tally.soモジュールを使用します。

RHEL4では失敗の許容回数を指定する"deny="オプションをaccountで指定していたのですが、RHEL5になってからはauthで指定するように変更になっています("deny="だけでなく、ほとんどがauthに移動されています)。

また、今まであまり気にしなかった各行の順番でも動作が変わるのです(ここは勉強しないといけないですね。モジュール間で値をやりとりしているのでしょう)。

何気なくpam_tally.soの行をauthの最後に付け加えていたのですが、ここでは何度ログインに失敗しようとも、正しいパスワードを入力すればログインできてしまいます(失敗カウントは増えていきます)。
正しくはpam_unix.soの前に記述する必要があります。

"
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth       required pam_env.so
auth       required pam_tally.so onerr=fail deny=3
auth       sufficient pam_unix.so nullok try_first_pass
auth       requisite pam_succeed_if.so uid >= 500 quiet
auth       required pam_deny.so

account    required pam_unix.so
account    sufficient pam_succeed_if.so uid < 500 quiet
account    required pam_permit.so

password  requisite pam_cracklib.so try_first_pass retry=3
password  sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password  required pam_deny.so

session   optional pam_keyinit.so revoke
session   required pam_limits.so
session   [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session   required pam_unix.so
"

RHEL5で確認

ちなみにRHEL3/4での設定では下記の通りになります。"deby="オプションの行はpam_unix.soの前に記述されていなくても有効になります(こっちではaccountで設定)。

とはいえ、RHEL5ではpam_unix.soの前でしか有効にならなかったし、Securing and Hardening Red Hat Linux Production Systemsというドキュメント内のLocking User Accounts After Too Many Login Failuresセクションで示されている例でもpam_unix.soの前に記述されているのでそのように設定しています。

RHEL3(LDAPが入っているのでちょっと異なる)
"
]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        required      /lib/security/$ISA/pam_tally.so onerr=fail no_magic_root
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        sufficient    /lib/security/$ISA/pam_ldap.so use_first_pass
auth        required      /lib/security/$ISA/pam_deny.so

account     required      /lib/security/$ISA/pam_unix.so
account     [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore] /lib/security/$ISA/pam_ldap.so
account     required      /lib/security/$ISA/pam_tally.so deny=2 no_magic_root reset

password    required      /lib/security/$ISA/pam_cracklib.so retry=3 type=
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow
password    sufficient    /lib/security/$ISA/pam_ldap.so use_authtok
password    required      /lib/security/$ISA/pam_deny.so

session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
session     optional      /lib/security/$ISA/pam_ldap.so
"

RHEL4
"
]# cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      /lib/security/$ISA/pam_env.so
auth        required      /lib/security/$ISA/pam_tally.so onerr=fail no_magic_root
auth        sufficient    /lib/security/$ISA/pam_unix.so likeauth nullok
auth        required      /lib/security/$ISA/pam_deny.so

account     required      /lib/security/$ISA/pam_unix.so
account     required      /lib/security/$ISA/pam_tally.so deny=3 no_magic_root reset
password    required      /lib/security/$ISA/pam_cracklib.so retry=3 type= difok=3 minlen=8 dcredit=-1 lcredit=-1
password    sufficient    /lib/security/$ISA/pam_unix.so nullok use_authtok md5 shadow remember=12
password    required      /lib/security/$ISA/pam_deny.so

session     required      /lib/security/$ISA/pam_limits.so
session     required      /lib/security/$ISA/pam_unix.so
"

RHEL3/4/5で確認

P.S.
複数スペースが入る場合の書き方が難しいです。スペースが複数個あるとNucleusが自動的に一つに集約してくれてしまいます・・・