linux查看文件句柄
Ⅰ linux文件句柄佔用數量查看與設置
安裝lsof
yum install lsof
查看線程占句柄數
ulimit -a
查看系統打開句柄最大數量
more /proc/sys/fs/file-max
1
查看打開句柄總數
lsof|awk '{print $2}'|wc -l
1
根據打開文件句柄的數量降序排列,其中第二列為進程ID:
lsof|awk '{print $2}'|sort|uniq -c|sort -nr|more
1
根據獲取的進程ID查看進程的詳情
ps -ef |grep
1
修改linux單進程最大文件連接數
修改linux系統參數。vi /etc/security/limits.conf 添加
softnofile65536
hardnofile65536
修改以後保存,注銷當前用戶,重新登錄,執行ulimit -a ,ok ,參數生效了:
Ⅱ 修改linux的最大文件句柄數限制
修改linux的最大文件句柄數限制對於一般的應用來說(象Apache、系統進程)1024完全足夠使用。但是如何象squid、mysql、java等單進程處理大量請求的應用來說就有點捉襟見肘了。如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到too
many
files
open的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本可以幫你查看:1lsof
-n
|awk
'{print
$2}'|sort|uniq
-c
|sort
-nr|more修改linux的最大文件句柄數限制的方法:
1)ulimit
-n
65535
在當前session有效,用戶退出或者系統重新後恢復默認值
2)修改profile文件:在profile文件中添加:ulimit
-n
65535
只對當個用戶有效
3)修改文件:/etc/security/limits.conf,在文件中添加:(立即生效-當前session中運行ulimit
-a命令無法顯示)[html]
*
soft
nofile
32768
#限制單個進程最大文件句柄數(到達此限制時系統報警)
*
hard
nofile
65536
#限制單個進程最大文件句柄數(到達此限制時系統報錯)
4)修改文件:/etc/sysctl.conf。在文件中添加:[html]
fs.file-max=655350
#限制整個系統最大文件句柄數
運行命令:/sbin/sysctl
-p
使配置生效
Ⅲ linux怎麼查看默認的句柄數
您好!很高興能為您解答。
修改文件句柄數在Linux下,我們使用ulimit -n
命令可以看到單個進程能夠打開的最大文件句柄數量(socket連接也算在裡面)。系統默認值1024。
對於一般的應用來說(象Apache、系統進程)1024完全足夠使用。但是如何象squid、mysql、java等單進程處理大量請求的應用來說就有
點捉襟見肘了。如果單個進程打開的文件句柄數量超過了系統定義的值,就會提到「too many files
open」的錯誤提示。如何知道當前進程打開了多少個文件句柄呢?下面一段小腳本可以幫你查看:
1.lsof -n |awk '{print $2}'|sort|uniq -c |sort
-nr|more
在系統訪問高峰時間以root用戶執行上面的腳本,可能出現的結果如下:
1.# lsof -n|awk '{print $2}'|sort|uniq -c |sort
-nr|more
2. 131 24204
3. 57 24244
4. 57 24231
5. 56 24264
其中第一行是打開的文件句柄數量,第二行是進程號。得到進程號後,我們可以通過ps命令得到進程的詳細內容。
1.ps -aef|grep 24204
2.mysql 24204 24162
99 16:15 ? 00:24:25 /usr/sbin/mysqld
哦,原來是mysql進程打開最多文件句柄數量。但是他目前只打開了131個文件句柄數量,遠遠底於系統默認值1024。
但是如果系統並發特別大,尤其是squid伺服器,很有可能會超過1024。這時候就必須要調整系統參數,以適應應用變化。Linux有硬性限制和軟性限制。可以通過ulimit來設定這兩個參數。方法如下,以root用戶運行以下命令:
1.ulimit -HSn 4096
以 上命令中,H指定了硬性大小,S指定了軟性大小,n表示設定單個進程最大的打開文件句柄數量。個人覺得最好不要超過4096,畢竟打開的文件句柄數越多響
應時間肯定會越慢。設定句柄數量後,系統重啟後,又會恢復默認值。如果想永久保存下來,,可以修改 /etc/profile
把上面命令加到最後。(findsun提出的辦法比較合理)
/////////////////////////////////////////////////////////////////////////////
在 Linux下面部署應用的時候,有時候會遇上Socket/File: Can't open so many
files的問題,其實Linux是有文件句柄限制的(就像WinXP?),而且默認不是很高,一般都是1024,作為一台生產伺服器,其實很容易就達到
這個數量,因此我們需要把這個值改大一些。
大概知道ulimit這個命令是相關的,上Google搜索了一下,大多數說的很含糊,也沒有統一說一下,經過兩個小時看了不少文章終於弄清楚ulimit相關的一些配置問題。
我們可以用ulimit -a來查看所有限制值,我只關心文件句柄數量的問題
open files (-n) 1024
這個就是限制數量
這里,有很多ulimit的文章都說的很含糊,究竟這個1024是系統的限制,還是用戶的限制呢。其實,這個是用戶限制來的,完整的說法,應該是當前用戶准備要運行的程序的限制。
1、這個限制是針對單個程序的限制
2、這個限制不會改變之前已經運行了的程序的限制
3、對這個值的修改,退出了當前的shell就會消失
比如說,我先運行了一個程序A,然後通過ulimit修改了限制為2048,然後運行B,然後退出了shell再登錄,然後運行C。那就只有B可以打開2048個句柄。
如果我們需要改變整體的限制值,或者我們運行的程序是系統啟動的,應該怎麼處理呢
其中一個方法,是想ulimit修改命令放入/etc/profile裡面,但是這個做法並不好
正確的做法,應該是修改/etc/security/limits.conf
裡面有很詳細的注釋,比如
* soft nofile 2048
* hard nofile 32768
就可以將文件句柄限制統一改成軟2048,硬32768
這里涉及另外一個問題,什麼是軟限制,什麼是硬限制
硬限制是實際的限制,而軟限制,是warnning限制,只會做出warning
其實ulimit命令本身就有分軟硬設置,加-H就是硬,加-S就是軟
默認顯示的是軟限制,如果修改的時候沒有加上的話,就是兩個一起改
配置文件最前面的一位是domain,設置為星號代表全局,另外你也可以針對不同的用戶做出不同的限制
修改了,重新登錄用ulimit一開就立刻生效了,不過之前啟動過的程序要重新啟動才能使用新的值。我用的是CentOS,似乎有些系統需要重啟才能生效。
ulimit其實就是對單一程序的限制
那系統總限制呢
其實是在這里,/proc/sys/fs/file-max
可以通過cat查看目前的值,echo來立刻修改
另外還有一個,/proc/sys/fs/file-nr
只讀,可以看到整個系統目前使用的文件句柄數量
查找文件句柄問題的時候,還有一個很實用的程序lsof
可以很方便看到某個進程開了那些句柄
也可以看到某個文件/目錄被什麼進程佔用了。
Ⅳ Unix如何查看用戶的最大文件句柄數及使用情況
Linux系統如何查看修改最大打開文件數,這個問題對於很多剛剛學習linux的小夥伴來說覺得有點奇怪。Linux系統和windows不同之處在於更強的多任務多線程,由於文件系統結構的不同linux針對不同進程不同用戶都可以設置最打打開文件數。(如下圖,在設置某些配置文件的時候,會出現下圖提示超過系統最大打開文件數
工具/原料
Centos
Linux文件數打開數
查看當前系統最大的文件打開數,如下圖
在linux終端中輸入ulimit -a
「open files」參數選項後面的數值就是當前系統支持的最大打開文件數
修改linux最大文件打開數
如果要修改linux最大文件打開數,可以通過如下圖參數命令 unlimit -n 後面接需要設置的文件數量。
設置好之後,再次查看 unlimit -a 你會發現已經設置為新的數量了
設置好之後,再次編輯修改重啟設置的服務,已經沒有剛剛那個1024文件數限制的報錯提示
其他修改方法
除此之外,如果針對不同的用戶。也可以通過編輯修改 /etc/rc.local文件設置環境變數,添加 unlimit -n
如下圖,重啟之後一般就自動設置好了
查看系統句柄文件數
當前系統文件句柄的最大數目,只用於查看,不能設置修改
cat /proc/sys/fs/file-max
查看進程打開文件數
如果需要查看所有進程的文件打開數,如下圖命令lsof |wc -l
特別提醒:
對於做伺服器的linux系統來說,適當調整增加文件打開數量。可以加快服務性能,並且提供服務的連接線程數量。咗嚛提醒為了伺服器性能,建議也不要設置太大哈
Ⅳ 伺服器遭受攻擊後的處理流程
伺服器遭受攻擊後的處理流程
安全總是相對的,再安全的伺服器也有可能遭受到攻擊。作為一個安全運維人員,要把握的原則是:盡量做好系統安全防護,修復所有已知的危險行為,同時,在系統遭受攻擊後能夠迅速有效地處理攻擊行為,最大限度地降低攻擊對系統產生的影響。下面是我整理的伺服器遭受攻擊後的處理流程:
一、處理伺服器遭受攻擊的一般思路
系統遭受攻擊並不可怕,可怕的是面對攻擊束手無策,下面就詳細介紹下在伺服器遭受攻擊後的一般處理思路。
1. 切斷網路
所有的攻擊都來自於網路,因此,在得知系統正遭受黑客的攻擊後,首先要做的就是斷開伺服器的網路連接,這樣除了能切斷攻擊源之外,也能保護伺服器所在網路的其他主機。
2. 查找攻擊源
可以通過分析系統日誌或登錄日誌文件,查看可疑信息,同時也要查看系統都打開了哪些埠,運行哪些進程,並通過這些進程分析哪些是可疑的程序。這個過程要根據經驗和綜合判斷能力進行追查和分析。下面的章節會詳細介紹這個過程的處理思路。
3. 分析入侵原因和途徑
既然系統遭到入侵,那麼原因是多方面的,可能是系統漏洞,也可能是程序漏洞,一定要查清楚是哪個原因導致的,並且還要查清楚遭到攻擊的途徑,找到攻擊源,因為只有知道了遭受攻擊的原因和途徑,才能刪除攻擊源同時進行漏洞的修復。
4. 備份用戶數據
在伺服器遭受攻擊後,需要立刻備份伺服器上的用戶數據,同時也要查看這些數據中是否隱藏著攻擊源。如果攻擊源在用戶數據中,一定要徹底刪除,然後將用戶數據備份到一個安全的地方。
5. 重新安裝系統
永遠不要認為自己能徹底清除攻擊源,因為沒有人能比黑客更了解攻擊程序,在伺服器遭到攻擊後,最安全也最簡單的方法就是重新安裝系統,因為大部分攻擊程序都會依附在系統文件或者內核中,所以重新安裝系統才能徹底清除攻擊源。
6. 修復程序或系統漏洞
在發現系統漏洞或者應用程序漏洞後,首先要做的就是修復系統漏洞或者更改程序bug,因為只有將程序的漏洞修復完畢才能正式在伺服器上運行。
7. 恢復數據和連接網路
將備份的數據重新復制到新安裝的伺服器上,然後開啟服務,最後將伺服器開啟網路連接,對外提供服務。
二、檢查並鎖定可疑用戶
當發現伺服器遭受攻擊後,首先要切斷網路連接,但是在有些情況下,比如無法馬上切斷網路連接時,就必須登錄系統查看是否有可疑用戶,如果有可疑用戶登錄了系統,那麼需要馬上將這個用戶鎖定,然後中斷此用戶的遠程連接。
1. 登錄系統查看可疑用戶
通過root用戶登錄,然後執行“w”命令即可列出所有登錄過系統的用戶,如圖1-11所示。
通過這個輸出可以檢查是否有可疑或者不熟悉的用戶登錄,同時還可以根據用戶名以及用戶登錄的源地址和它們正在運行的進程來判斷他們是否為非法用戶。
2. 鎖定可疑用戶
一旦發現可疑用戶,就要馬上將其鎖定,例如上面執行“w”命令後發現nobody用戶應該是個可疑用戶(因為nobody默認情況下是沒有登錄許可權的),於是首先鎖定此用戶,執行如下操作:
[root@server ~]# passwd -l nobody
鎖定之後,有可能此用戶還處於登錄狀態,於是還要將此用戶踢下線,根據上面“w”命令的輸出,即可獲得此用戶登錄進行的pid值,操作如下:
[root@server ~]# ps -ef|grep @pts/3
531 6051 6049 0 19:23 ? 00:00:00 sshd: nobody@pts/3
[root@server ~]# kill -9 6051
這樣就將可疑用戶nobody從線上踢下去了。如果此用戶再次試圖登錄它已經無法登錄了。
3. 通過last命令查看用戶登錄事件
last命令記錄著所有用戶登錄系統的日誌,可以用來查找非授權用戶的登錄事件,而last命令的輸出結果來源於/var/log/wtmp文件,稍有經驗的入侵者都會刪掉/var/log/wtmp以清除自己行蹤,但是還是會露出蛛絲馬跡在此文件中的。
三、查看系統日誌
查看系統日誌是查找攻擊源最好的方法,可查的'系統日誌有/var/log/messages、/var/log/secure等,這兩個日誌文件可以記錄軟體的運行狀態以及遠程用戶的登錄狀態,還可以查看每個用戶目錄下的.bash_history文件,特別是/root目錄下的.bash_history文件,這個文件中記錄著用戶執行的所有歷史命令。
四、檢查並關閉系統可疑進程
檢查可疑進程的命令很多,例如ps、top等,但是有時候只知道進程的名稱無法得知路徑,此時可以通過如下命令查看:
首先通過pidof命令可以查找正在運行的進程PID,例如要查找sshd進程的PID,執行如下命令:
[root@server ~]# pidof sshd
13276 12942 4284
然後進入內存目錄,查看對應PID目錄下exe文件的信息:
[root@server ~]# ls -al /proc/13276/exe
lrwxrwxrwx 1 root root 0 Oct 4 22:09 /proc/13276/exe -> /usr/sbin/sshd
這樣就找到了進程對應的完整執行路徑。如果還有查看文件的句柄,可以查看如下目錄:
[root@server ~]# ls -al /proc/13276/fd
通過這種方式基本可以找到任何進程的完整執行信息,此外還有很多類似的命令可以幫助系統運維人員查找可疑進程。例如,可以通過指定埠或者tcp、udp協議找到進程PID,進而找到相關進程:
[root@server ~]# fuser -n tcp 111
111/tcp: 1579
[root@server ~]# fuser -n tcp 25
25/tcp: 2037
[root@server ~]# ps -ef|grep 2037
root 2037 1 0 Sep23 ? 00:00:05 /usr/libexec/postfix/master
postfix 2046 2037 0 Sep23 ? 00:00:01 qmgr -l -t fifo -u
postfix 9612 2037 0 20:34 ? 00:00:00 pickup -l -t fifo -u
root 14927 12944 0 21:11 pts/1 00:00:00 grep 2037
在有些時候,攻擊者的程序隱藏很深,例如rootkits後門程序,在這種情況下ps、top、netstat等命令也可能已經被替換,如果再通過系統自身的命令去檢查可疑進程就變得毫不可信,此時,就需要藉助於第三方工具來檢查系統可疑程序,例如前面介紹過的chkrootkit、RKHunter等工具,通過這些工具可以很方便的發現系統被替換或篡改的程序。
五、檢查文件系統的完好性
檢查文件屬性是否發生變化是驗證文件系統完好性最簡單、最直接的方法,例如可以檢查被入侵伺服器上/bin/ls文件的大小是否與正常系統上此文件的大小相同,以驗證文件是否被替換,但是這種方法比較低級。此時可以藉助於Linux下rpm這個工具來完成驗證,操作如下:
[root@server ~]# rpm -Va
....L... c /etc/pam.d/system-auth
S.5..... c /etc/security/limits.conf
S.5....T c /etc/sysctl.conf
S.5....T /etc/sgml/docbook-simple.cat
S.5....T c /etc/login.defs
S.5..... c /etc/openldap/ldap.conf
S.5....T c /etc/sudoers
..5....T c /usr/lib64/security/classpath.security
....L... c /etc/pam.d/system-auth
S.5..... c /etc/security/limits.conf
S.5..... c /etc/ldap.conf
S.5....T c /etc/ssh/sshd_config
對於輸出中每個標記的含義介紹如下:
? S 表示文件長度發生了變化
? M 表示文件的訪問許可權或文件類型發生了變化
? 5 表示MD5校驗和發生了變化
? D 表示設備節點的屬性發生了變化
? L 表示文件的符號鏈接發生了變化
? U 表示文件/子目錄/設備節點的owner發生了變化
? G 表示文件/子目錄/設備節點的group發生了變化
? T 表示文件最後一次的修改時間發生了變化
如果在輸出結果中有“M”標記出現,那麼對應的文件可能已經遭到篡改或替換,此時可以通過卸載這個rpm包重新安裝來清除受攻擊的文件。
不過這個命令有個局限性,那就是只能檢查通過rpm包方式安裝的所有文件,對於通過非rpm包方式安裝的文件就無能為力了。同時,如果rpm工具也遭到替換,就不能通過這個方法了,此時可以從正常的系統上復制一個rpm工具進行檢測。
;