Centos
pam_limits.so 給 sudo 帶來問題
我在 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 上遇到了同樣的錯誤。