RHEL 6.1(64ビット版)のシステムで、コンソール(tty1)に直接ログインしようとすると、ユーザー名とパスワードを入力後、再度ログインプロンプトに戻ってしまう現象が発生しました。しかし、SSH経由でのログインは正常に成功します。
まず、システムログを確認します。/var/log/secure を監視すると、PAM(Pluggable Authentication Modules)関連のエラーが表示されていることがわかります。
[root@localhost ~]# tail -f /var/log/secure
Feb 6 09:21:13 localhost login: PAM adding faulty module: /lib/security/pam_limits.so
Feb 6 09:21:16 localhost login: pam_unix(login:session): session opened for user oracle by LOGIN(uid=0)
Feb 6 09:21:16 localhost login: Module is unknown
Feb 6 09:34:25 localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Feb 6 09:34:25 localhost login: ROOT LOGIN ON tty1
Feb 6 09:39:27 localhost login: pam_unix(login:session): session closed for user root
Feb 6 09:40:30 localhost login: PAM unable to dlopen(/lib/security/pam_limits.so): /lib/security/pam_limits.so: cannot open shared object file: No such file or directory
Feb 6 09:40:30 localhost login: PAM adding faulty module: /lib/security/pam_limits.so
Feb 6 09:40:32 localhost login: pam_unix(login:session): session opened for user root by LOGIN(uid=0)
Feb 6 09:40:32 localhost login: Module is unknown
ログの最後の行が重要です。システムは /lib/security/pam_limits.so というファイルを開こうとして失敗しています。このファイルが存在しないことが原因のようです。
64ビットのLinuxシステムでは、セキュリティモジュールは通常 /lib64/security/ ディレクトリに配置されます。そこで、PAM設定ファイル /etc/pam.d/login を編集し、モジュールのパスを正しいものに修正します。
編集前のファイル内容は以下の通りです。
[root@localhost ~]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
#session required /lib/security/pam_limits.so
session required /lib64/security/pam_limits.so
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
-session optional pam_ck_connector.so
このファイルの session セクションにある、コメントアウトされた行 #session required /lib/security/pam_limits.so を有効にし、正しいパスに修正します。修正後のファイルは以下のようになります。
[root@localhost ~]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required /lib64/security/pam_limits.so
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
-session optional pam_ck_connector.so
設定ファイルを保存し、コンソールに再度ログインを試みると、正常にログインできるようになります。