“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 sussh都已正常。

 

二、資源限制查看的相關命令

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.onflimits.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM