Centos

pam_limits.so 給 sudo 帶來問題

  • February 22, 2019

我在 centos 7 上執行的 tomcat 伺服器有問題。總共有 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

這是pam_limits模組中的一個錯誤,導致身份驗證失敗。我認為它只影響 RHEL/Centos 7。它影響具有無限或非常高nofiles設置(大於fs.nr_open=1024x1024=1024576)的 sudo 使用者。

您的選擇是:

  • pam_limits從您的 sudo PAM 規則中刪除
  • nofiles目標使用者 (tomcat) 的值設置為低於fs.nr_open
  • 將核心設置fs.nr_open(in /etc/sysctl.conf) 提高到高於您的 ulimit
  • 等待修復?

如果您正在執行的使用者的密碼已過期,則可能會發生這種情況。在這種情況下,我在 RHEL 7 上遇到了同樣的錯誤。

引用自:https://unix.stackexchange.com/questions/432057