一台oracle数据库服务器有故障,用vcenter登录后发现,用任意用户登录系统第一次不显示任何提示,直接跳回到登录屏,第二次登录直接报login incorrect,确认用户名密码是正确的,重启进入单用户模式重置root密码也无法登录,试了好多次都不行。总之,各种方法都无法从本地登录,就差重做系统了。怀疑是ssh有问题,重启进入单用户模式开放了iptables(之前公司换了ip,被防火墙限制了),本地还是不行,但是竟然从远程成功登录,马上查看了日志,在 /var/log/secure 中发现有大量的authentication failure 日志

oracle login: FAILED LOGIN 3 FROM (null) FOR root,
Authentication failure
oracle login: PAM unable to dlopen(/lib/security/pam_limits.so)
oracle login: PAM [error: /lib/security/pam_limits.so: wrong ELF class: ELFCLASS32] Jul
oracle login: PAM adding faulty module:/lib/security/pam_limits.so
oracle login:pam_unix(login:auth): check pass; user unknown
oracle login: pam_unix(login:auth): authentication failure; logname= uid=0 euid=0 tty=tty2 ruser= rhost=

centos 5 系统中ssh默认并没有配置pam,打开/etc/pam.d/login一看,果然有配置:
session required pam_limits.so 类似这样的配置
果断注释掉重启sshd, 成功登录!

由于这台服务器从系统安装到出问题,只装了oracle 11g r2,所以可以肯定是oracle在安装时添加的配置,不清楚是自动安装的还是手动配置的,这台Oralce服务器不是DBA安装的。看网上相关的oracle安装文档也会提到要设置/etc/security/limits.conf和/etc/pam.d/login来限制oracle服务器最大打开的文件数、进程数等资源的限制,会在/etc/pam.d/login 文件中添加session required pam_limits.so来实现/etc/security/limits.conf中定义的各项限制,此时可能会出现问题(设置不当,32位64位差异等)。
还有就是如果centos 系统限制最大打开的文件数、进程数等资源时,直接在/etc/security/limits.conf中配置即可生效,尽管可能不规范,但总比导致灵异事件好的多,而且据我所知oracle的dba设置最大打开文件数时也是直接设置的,不会在/etc/pam.d/login中添加。