pam_limits.so 为 sudo 制造问题

MSc*_*ltz 7 pam sudo centos

我的 tomcat 服务器在 centos 7 上运行时出现问题。总共有 7 个,设置相同。4 个最近已修补并重新启动,其余 3 个的正常运行时间约为 2 年。

当我做:

sudo -u tomcat ls /tmp
Run Code Online (Sandbox Code Playgroud)

我在新打补丁的服务器上收到错误,说明:

sudo: pam_open_session: Permission denied
sudo: policy plugin failed session initialization
Run Code Online (Sandbox Code Playgroud)

在未打补丁的服务器上,我可以执行命令。

/etc/security/limits 是相同的:

tomcat soft nofile 5000000
tomcat hard nofile 5000000
tomcat soft nproc  5000000
tomcat hard nproc  5000000
Run Code Online (Sandbox Code Playgroud)

我可以通过注释来规避错误:

/etc/pam.d/sudo:

session    required     pam_limits.so
Run Code Online (Sandbox Code Playgroud)

我不明白?

我找对地方了吗?


来自两者的 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 +++"
Run Code Online (Sandbox Code Playgroud)

在职的:

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 +++
Run Code Online (Sandbox Code Playgroud)

pam 工作版本是: pam-1.1.8-12.el7_1.1.x86_64

和非工作: pam-1.1.8-18.el7.x86_64

Ste*_*way 8

这是pam_limits模块中的一个错误,导致身份验证失败。我认为它只影响 RHEL/Centos 7。它影响具有无限或非常高nofiles设置(大于fs.nr_open=1024x1024=1024576)的sudo 用户。

您的选择是:

  • pam_limits从您的 sudo PAM 规则中删除
  • nofiles目标用户(tomcat)的设置为低于fs.nr_open
  • 提高内核设置fs.nr_open(在/etc/sysctl.conf)到高于您的 ulimit
  • 等待修复?

  • @mbrandalero 如果您根本不再具有 root 访问权限,并且没有其他具有 root 访问权限的用户,并且您丢失/忘记了 root 密码,因此无法通过控制台登录,那么您将需要进行密码恢复。从独立媒体启动系统,将包含 /etc 的文件系统挂载到 /mnt,并手动编辑密码文件以设置 root 的已知密码。然后您可以在控制台上以 root 身份登录并修复问题。 (2认同)