一、背景介紹及問題處理
應用報賬號不能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