我的 tomcat 服务器在 centos 7 上运行时遇到问题。总共有 7 个,设置相似。 4 个最近已修补并重新启动,其余 3 个的正常运行时间约为 2 年。
当我做:
sudo -u tomcat ls /tmp
我在新修补的服务器上收到错误,指出:
sudo: pam_open_session: Permission denied
sudo: policy plugin failed session initialization
在未打补丁的服务器上,我可以执行该命令。
/etc/security/limits
是相同的:
tomcat soft nofile 5000000
tomcat hard nofile 5000000
tomcat soft nproc 5000000
tomcat hard nproc 5000000
我可以通过注释掉该错误来避免该错误:
/etc/pam.d/sudo:
session required pam_limits.so
我不明白?
我正在寻找正确的地方吗?
两者的 strace 看起来像:
失败:
strace -e setrlimit sudo -u tomcat ls /tmp
setrlimit(RLIMIT_NPROC, {rlim_cur=RLIM64_INFINITY, rlim_max=RLIM64_INFINITY}) = 0
setrlimit(RLIMIT_NPROC, {rlim_cur=1031015, rlim_max=1031015}) = 0
setrlimit(RLIMIT_NPROC, {rlim_cur=5000000, rlim_max=5000000}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=5000000, rlim_max=5000000}) = -1 EPERM (Operation not permitted)
sudo: pam_open_session: Permission denied
sudo: policy plugin failed session initialization
+++ exited with 1 +++"
在职的:
strace -e setrlimit sudo -u tomcat ls /tmp
setrlimit(RLIMIT_NPROC, {rlim_cur=5000000, rlim_max=5000000}) = 0
setrlimit(RLIMIT_NOFILE, {rlim_cur=5000000, rlim_max=5000000}) = -1 EPERM (Operation not permitted)
setrlimit(RLIMIT_NPROC, {rlim_cur=RLIM64_INFINITY, rlim_max=RLIM64_INFINITY}) = 0
hs_err_pid13726.log hsperfdata_cron hsperfdata_tokor hsperfdata_tomcat systemd-private-U8GAP7
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=28963, si_status=0, si_utime=0, si_stime=0} ---
+++ exited with 0 +++
pam
工作版本是: pam-1.1.8-12.el7_1.1.x86_64
以及非工作状态:pam-1.1.8-18.el7.x86_64
答案1
这是模块中的错误pam_limits
,导致身份验证失败。我认为它只影响 RHEL/Centos 7。它影响具有无限或非常高nofiles
设置(大于fs.nr_open
=1024x1024=1024576)的 sudo 用户。
您的选择是:
pam_limits
从 sudo PAM 规则中删除- 将目标用户 (tomcat)设置
nofiles
为低于fs.nr_open
- 将内核设置
fs.nr_open
(在 中/etc/sysctl.conf
)提高到高于 ulimit - 等待修复?
答案2
如果您运行的用户的密码已过期,则可能会发生这种情况。在这种情况下,我在 RHEL 7 上遇到了同样的错误。
答案3
我发现如果/etc/security/limits.conf
不存在,我会得到同样的错误。如果我只是创建一个空/etc/security/limits.conf
文件pam_limits
,错误就会消失。