ulimit -n不更改-值limit.conf不起作用


13

我试图提高ubuntu计算机上所有用户的打开文件描述符最大值。

这个问题是对该问题的后续。

即使需要pam_limits.so,ulimit也不会读取打开文件描述符limits.conf设置

除了我在limits.conf中添加了必需的“ root”条目

这是条目

*               soft    nofile           100000
*               hard    nofile           100000
root            soft    nofile           100000
root            hard    nofile           100000

与相关的行pam_limits.so已在/etc/pam.d/中的所有相关文件中取消注释,并fs.file-max已在/etc/sysctl.conf中正确设置

但是,我仍然看到

abc@machine-2:/etc/pam.d$ ulimit -n
1024

重新启动后。

可能是什么问题呢?

我的默认外壳程序是/ bin / sh,并且我无法使用chsh更改我的默认外壳程序,因为通过某种分布式身份验证方案对计算机上的用户进行了身份验证。


strace -o loglimit su-abc,在该egrep“(limit | open)” loglimit之后,也许您的pam配置错误
c4f4t0r 2014年

@ c4f4t0r,su的-选项仅在最后一个参数时才引起新的登录。我只知道这一点,因为我只是在阅读该手册页。另外,详细来说,普通用户不能跟踪suid根二进制文件。
etherfish 2014年

作为根用户,您需要使用命令strace -o loglimit su-abc
c4f4t0r 2014年

遗憾的垃圾邮件,但我有这种问题的unix.stackexchange.com/questions/200310/...
vladeli

Answers:


5

我有一个类似的问题,但仅使用SSH登录名。本地登录(通过控制台)尊重/etc/security/limits.conf

事实证明,设置时:

UsePrivilegeSeparation yes

/etc/ssh/sshd_config文件中,然后sshd派生一个没有特权的孩子来设置帐户的环境。由于此孩子没有特权,因此pam_limits.so设置上限无效。

我一经设定

UsePrivilegeSeparation no

进入/etc/ssh/sshd_config并启动SSH服务,然后使用SSH登录名来登录limits.conf文件。


2
就我而言,我将sshd-config更改为UsePAM yes。(+1指向我指向sshd-config)
Randall Whitman

4

我怀疑ulimit是由/ etc / profile或〜/ .bashrc应用的。您的系统具有复杂的pam事实,我可以确认有些事情不会出错。

我还要确认/etc/security/limits.d/中没有错误文件,如pam_limits(8)所述被解析。

我将debug参数添加到会话必需的pam_limits.conf行中,然后在登录时观看/var/log/auth.log。

如果软限制为1024,那么硬限制是多少?

su应该使用-l参数使您重新使用su重新登录。

su -l -s / bin / bash

祝好运。


我的硬限制是4096,即ulimit -Hn
Nerrve 2014年

4

在以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告诉您的外壳配置文件


3

我遇到了这样的问题,这就是我所做的。

strace命令将打印该过程与外部库进行的所有交互,因此通过它我们可以查看配置是否已加载。

所以,我愿意,就像上面建议的那样:

root:/etc/pam.d$ strace -o ~/loglimit su - glaudiston
glaudiston:~$ exit
logout
root:/etc/pam.d$ cat ~/loglimit | grep limits.conf

在我的问题中,strace日志(strace -o log su-用户名)没有任何限制文本实例,因此未加载文件limits.conf。

首先,我确保pam_limits.so寻找/etc/security/limits.conf

root:/etc/pam.d$ strings /lib/security/pam_limits.so | grep limits.conf
/etc/security/limits.conf

因此,我确保在验证操作中将模块pam_limits.so加载到位于/etc/pam.d的文件中,例如,在/etc/pam.d/su中,我添加了:

session   required    pam_limits.so

现在,我可以给用户打“ su”,限制将被加载。您可以重做strace步骤以确保确定。

我的Linux是LFS,所以在/etc/pam.d文件中缺少pam_limits.so也是我的错。在其他发行版中,我认为这不是确切的问题。

但是希望这会有所帮助。


1

在我的情况下(Centos 6.10)strace显示,在稍后从/etc/security/limits.conf中设置限制后,在登录过程中,从/etc/security/limits.d/90-nproc.conf中将所有非-root用户:

*          soft    nproc     1024
root       soft    nproc     unlimited
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.