我正在尝试提高 ubuntu 机器上所有用户的打开文件描述符最大值。
这个问题在某种程度上是对这个问题的后续。
即使需要 pam_limits.so,ulimit 也不会读取打开文件描述符 limits.conf 设置
除了我在 limits.conf 中添加了所需的“root”条目
以下是参赛作品
* soft nofile 100000
* hard nofile 100000
root soft nofile 100000
root hard nofile 100000
/etc/pam.d/ 中所有相关文件中的相关行pam_limits.so
均已取消注释,并fs.file-max
已在 /etc/sysctl.conf 中正确设置
然而,我仍然看到
abc@machine-2:/etc/pam.d$ ulimit -n
1024
重启后。
可能是什么问题呢?
我的默认 shell 是 /bin/sh,并且我不能使用 chsh 来更改我的默认 shell,因为我的机器上的用户是通过某种分布式身份验证方案进行身份验证的。
答案1
我遇到了类似的问题,但仅限于 SSH 登录。本地登录(通过控制台)尊重/etc/security/limits.conf
。
事实证明,当您设置:
UsePrivilegeSeparation yes
在/etc/ssh/sshd_config
文件中,然后 sshd 派生一个无特权的子进程来设置帐户的环境。由于此子进程没有特权,因此 pam_limits.so 设置上限无效。
我一设定
UsePrivilegeSeparation no
并/etc/ssh/sshd_config
重新启动 SSH 服务,然后 limits.conf 文件就会受到 SSH 登录的尊重。
答案2
在以 root 身份登录的 Redhat 服务器上
/etc/security/limits.conf
user01 - nofile 2048
strace 命令以 root 身份记录
strace -o loglimit su - user01
用其他shell打开loglimit
grep "limit" loglimit
open("/lib64/security/pam_limits.so", O_RDONLY) = 6
..........
..........
open("/etc/security/limits.conf", O_RDONLY) = 3
read(3, "# /etc/security/limits.conf\n#\n#E"..., 4096) = 1823
open("/etc/security/limits.d", O_RDONLY|O_NONBLOCK|O_DIRECTORY) = 3
setrlimit(RLIMIT_NOFILE, {rlim_cur=2*1024, rlim_max=2*1024}) = 0
这样我就知道,pam_limits 已加载并且 limits.conf 已读取,如果您的 pam_limits 已加载但您仍然使用 ulimit -n 看到其他值,请按照@etherfish 所说的检查您的 shell 配置文件
答案3
我怀疑 ulimit 是由 /etc/profile 或 ~/.bashrc 应用的。事实上,您的系统有一个复杂的 pam,我想确认一下没有出现问题。
我还要确认 /etc/security/limits.d/ 中没有被解析的错误文件,如 pam_limits(8) 中所述。
我会将调试参数添加到会话所需的 pam_limits.conf 行,然后在您登录时观察 /var/log/auth.log。
如果您的软限制是 1024,那么您的硬限制是多少?
su 应该会让您使用 -l 参数通过 su 获得一个全新的登录。
苏-l-s / bin / bash
祝你好运。
答案4
在我的例子中(Centos 6.10),strace 显示在设置限制后/etc/security/limits.conf在登录过程中,它被重置为/etc/security/limits.d/90-nproc.conf对于所有非 root 用户:
* soft nproc 1024
root soft nproc unlimited