“su: cannot set user id: Resource temporarily unavailable”处理及limits.conf说明

“su: cannot set user id: Resource temporarily unavailable”处理及limits.conf说明

一、背景介绍及问题处理

应用报账号不能ssh到主机,首先怀疑是防火墙或hosts.deny限制但查看之下并没有;接着使用其提供的账号密码确实不能登录,怀疑是密码被修改(有个和平时不太一样现像是输入密码后就会提示“Connection to 134.192.232.69 closed by remote host.Connection to 134.192.232.69 closed.”后直接退出,当时没在意现在回头看来是通过验证后主机发现用户资源超出了限制直接强制关闭了连接);其还没回复同意修改密码之前,其反复通过root也不能成功su到用户,提示“su: cannot set user id: Resource temporarily unavailable”,之前已检查过/etc/passwd和/etc/shadow文件用户信息格式正常,文件最后修改日期也已是老早以前,当即判断应该不是用户名密码的问题。

百度“su: cannot set user id: Resource temporarily unavailable”,查看之下大意是说用户资源使用超过了限制,但查看/etc/security/limits.conf和/etc/security/limits.d并没有看到对目标用户的限制,检查用户使用的资源似乎也都不多,判断不出是什么资源出了问题。直接对最常用的文件打开数、进程打开数和堆栈大小在/etc/security/limits.conf末尾追加了对目录用户的限制(之后分析应该是文件打开数问题)(username改为自目标用户):

username    soft    nofile    10240
username    hard    nofile    65536
username    soft    nproc     10000
username    hard    nproc     16384
username    soft    stack     10240
username    hard    stack     32768

追回完后保存不用其他操作,从root su和ssh都已正常。

二、资源限制查看的相关命令

ulimit -a    #查看当前用户资源限制
ps -ef |grep username | wc -l  #统计用户进程开启数
lsof | grep username | wc -l    #统计用户文件打开数

三、limis.conf格式说明

/etc/security/limits.conff配置格式如下:

<domain> <type> <item> <value>

domain代表限制的用户对象,可以是:用户名、@用户组名、*(表示所所有用户的默认配置)、%

type代表限制的资源类型,可以是:

hard--硬限制,受限用户不可自己通过ulimit动态修改此项的值

soft--软限制,用户自己可以自己使用ulimit加资源对应的参数动态修改此项的值(但其范围要在hard限制范围以内不然无效)

- --代表软硬两种限制

说明:所谓动态修改,就是如使徦ulimt -n 10240来将nofile临时修改为10240而不是通过修改limits.conf来修改,当然重启之后配置失效。使用ulimit -a来查看资源限制时有各资源对应的配置选项

item代表限制的具体资源,value代表该资源的限制值:

item 英文全称 中文译名 单位 value(默认值) 备注
core core file size 程序崩溃时产生的内存镜像文件 kb 0(表示不允许生成)  
data data size 数据段大小(?) kb unlimited  
fsize filesize 可打开文件的大小 kb unlimited  
memlock locked-in-memory address space 内存锁(?具体功能不很明白,数据库好像在意这个值) kb 64  
nofile number of open file 可打开文件数 1024  
rss resident set size 常驻内存大小(?) kb   2.4.30版本及以后内核已取消
stack stack size 堆栈段大小 kb 10240  
cpu cpu time 占用cpu时间(?) 分钟 unlimited  
nproc number of processes 可开启的进程数 1024  
as address space 地址空间 kb unlimited  
maxlogins max number of logins 同个用户最大登录数   此项无法限制root用户
maxsyslogins maximum number of all logins on system 系统所有用户登录总数   此项无法限制root用户
priority the priority to run user process with 用户所运行进程的优先级别      
locks locked files 占用文件个数(?) unlimited linux 2.4及之后版本才有
sigpending pending signals 等待信号数 11378 linux 2.6及之后版本才有
msgqueue memory used by POSIX message queues 信息队列 b 819200 linux 2.6及之后版本才有
nice nice priority allowed 谦让度     linux 2.6.12及之后版本才有
rtprio realtime priority 实时优先级(?)     linux 2.6.12及之后版本才有

说明:

1.关于资源限制/etc/security/limits.conf文件本身就有说明,也可查看帮助文件的说明:man limits.conf

2.除了priority和nice,其他项都支持使用-1、unlimited、infinity表示无限制

3.可以看到只有memlock、nofile、stack、nproc、sigpending等几项默认值不是unlimited,所以资源问题一般只关注这几项

4.RHEL6.x版本后引入/etc/security/limits.d/90-nproc.conf用于限制用户打开进程数,与limits.conf的关系是:

5.如果90-nproc.onf与limits.conf存在相同条目的配置那么90-nproc覆盖limits.conf的配置

6.但是如果90-nproc.conf用的是*没有指定用户而limits.conf指定用户那么90-nproc的限制不生效

7.其实90-nproc.conf除了限制nproc其他资源一样可以限制,生效原则与nproc一样

8.其实在/etc/security/limit.d目录下你还可以创建其他任意名字的.conf文件,这些文件中首字母ACSII大的覆盖首字母ASCII小的(首字母一样大的比较第二个字母以此类推)

http://blog.csdn.net/leshami/article/details/38982563

http://blog.csdn.net/taijianyu/article/details/5976319

http://bbs.chinaunix.net/thread-3689299-1-1.html

原文地址:https://www.cnblogs.com/yaoyangding/p/15324213.html