Linux系統最佳化加固
本文Linux系統:
[root@xxxxxx~]# cat /etc/issue
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
[root@xxxxxx ~]# uname -a
Linux xxxxxx 2.6.18-308.el5 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
最佳化一、/etc/security/limits.conf
最佳化二、/etc/sysctl.conf
1、/etc/security/limits.conf
limits.conf的後端是這樣工作的:limits.conf是pam_limits.so的設定檔,然後/etc/pam.d/下的應用程式調 用pam_***.so模組。譬如說,當使用者訪問伺服器,服務程式將請求發送到PAM模組,PAM模組根據服務名稱在/etc/pam.d目錄下選擇一個 對應的服務檔案,然後根據服務檔案的內容選擇具體的PAM模組進行處理。
Tips:當使用者登入主機,會調用pam_limits.so
cat /etc/pam.d/login
session required /lib64/security/pam_limits.so
1.1、
pam_limits.so模組的主要功能是限制使用者會話過程中對各種系統資源的使用方式。預設情況下該模組的設定檔是/etc/security/limits.conf。而該設定檔的基本格式實際上是由4個欄位組成的表,其中具體限制格式:
username|@groupname type resource limit
username|@groupname:設定需要被限制的使用者名稱,組名前面加@和使用者名稱區別。也可以用萬用字元*來做所有使用者的限制。
type:有 soft,hard 和 -,
soft 指的是當前系統生效的設定值。
hard 表明系統中所能設定的最大值。
soft 的限制不能比har 限制高。
用 - 就表明同時設定了 soft 和 hard 的值。
resource:
- core - 限制核心檔案的大小
- date - 最大資料大小
- fsize - 最大檔案大小
- memlock - 最大鎖定記憶體位址空間
- nofile - 開啟檔案的最大數目
- rss - 最大持久設定大小
- stack - 最大棧大小
- cpu - 以分鐘為單位的最多 CPU 時間
- noproc - 進程的最大數目
- as - 地址空間限制
- maxlogins - 此使用者允許登入的最大數目
- maxsyslogins - 使用者登入最大數目
- priority - 使用者進程優先順序(負數值)
- locks - 最大locks檔案最值
- sigpending - 最大數量的等待訊號
- msgqueue - postfix訊息佇列最大記憶體使用量空間
- nice - 允許使用最大“好心值”
- rtprio - 無特權進程中最大實際優及級
Tips:
要使 limits.conf 檔案配置生效,必須要確保 pam_limits.so 檔案被加入到開機檔案中。
查看 /etc/pam.d/login 檔案中有:
session required /lib/security/pam_limits.so
1.2、主機參考配置:
#<domain> <type> <item> <value>
#
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4
* soft core unlimited
* hard core unlimited
* soft fsize unlimited
* hard fsize unlimited
* soft data unlimited
* hard data unlimited
* soft nproc 1048756
* hard nproc 1048756
* soft stack unlimited
* hard stack unlimited
* soft nofile 1048576
* hard nofile 1048576
* hard sigpending 1056639
* soft sigpending 1056639
# End of file
1.2、
Ulimit命令
設定限制 可以把命令加到profile檔案裡,也可以在/etc/security/limits.conf檔案中定義
限制。
命令參數
-a 顯示所有限制
-c core檔案大小的上限
-d 進程資料區段大小的上限
-f shell所能建立的檔案大小的上限
-m 駐留記憶體大小的上限
-s 堆棧大小的上限
-t 每秒可佔用的CPU時間上限
-p 管道大小
-n 開啟檔案數的上限
-u 進程數的上限
-v 虛擬記憶體的上限
2、/etc/sysctl.conf
Sysctl是一個允許您改變正在運行中的Linux系統的介面。它包含一些 TCP/IP 堆棧和虛擬記憶體系統的進階選項, 這可以讓有經驗的管理員提高令人信服的系統效能。用sysctl可以讀取設定超過五百個系統變數。基於這點,sysctl(8) 提供兩個功能:讀取和修改系統設定。
調優的核心變數存在兩種主要介面:sysctl命令和/proc檔案系統;二者是相對應的關係;
proc中與進程無關的所有資訊都被移植到sysfs中。
IPV4協議棧的 sysctl參數主要是sysctl.net.core、sysctl.net.ipv4,對應的/proc檔案系統是/proc/sys/net /ipv4和/proc/sys/net/core。只有核心在編譯時間包含了特定的屬性,該參數才會出現在核心中。
對於核心參數應該謹慎調節,這些參數通常會影響到系統的整體效能。核心在啟動時會根據系統的資源情況來初始化特定的變數,這種初始化的調節一般會滿足通常的效能需求。
應用程式通過socket系統調用和遠程主機進行通訊,每一個socket都有一個讀寫緩衝區。讀緩衝區儲存了遠程主機發送過來的資料,如果緩衝區已滿, 則資料會被丟棄,寫緩衝期儲存了要發送到遠程主機的資料,如果寫緩衝區已慢,則系統的應用程式在寫入資料時會阻塞。可知,緩衝區是有大小的。
socket緩衝區預設大小:
/proc/sys/net/core/rmem_default 對應net.core.rmem_default
/proc/sys/net/core/wmem_default 對應net.core.wmem_default
上面是各種類型socket的預設讀寫緩衝區大小,然而對於特定類型的socket則可以設定獨立的值覆蓋預設值大小。例如tcp類型的socket就可以用/proc/sys/net/ipv4/tcp_rmem和tcp_wmem來覆蓋。
socket緩衝區最大值:
/proc/sys/net/core/rmem_max 對應net.core.rmem_max
/proc/sys/net/core/wmem_max 對應net.core.wmem_max
/proc/sys/net/core/netdev_max_backlog 對應 net.core.netdev_max_backlog
該參數定義了當介面收到包的速率大於核心處理包的速率時,裝置的輸入隊列中的最大報文數。
/proc/sys/net/core/somaxconn 對應 net.core.somaxconn
通過listen系統調用可以指定的最大accept隊列backlog,當排隊的請求串連大於該值時,後續進來的請求串連會被丟棄。
/proc/sys/net/core/optmem_max 對應 net.core.optmem_max
每個socket的副緩衝區大小。
TCP/IPV4核心參數:
在建立socket的時候會指定socke協議和地址類型。TCP socket緩衝區大小是他自己控制而不是由core核心緩衝區控制。
/proc/sys/net/ipv4/tcp_rmem 對應net.ipv4.tcp_rmem
/proc/sys/net/ipv4/tcp_wmem 對應net.ipv4.tcp_wmem
以上是TCP socket的讀寫緩衝區的設定,每一項裡面都有三個值,第一個值是緩衝區最小值,中間值是緩衝區的預設值,最後一個是緩衝區的最大值,雖然緩衝區的值不受core緩衝區的值的限制,但是緩衝區的最大值仍舊受限於core的最大值。
/proc/sys/net/ipv4/tcp_mem
該核心參數也是包括三個值,用來定義記憶體管理的範圍,第一個值的意思是當page數低於該值時,TCP並不認為他為記憶體壓力,第二個值是進入記憶體的壓力區 域時所達到的頁數,第三個值是所有TCP sockets所允許使用的最大page數,超過該值後,會丟棄後續報文。page是以頁面為單位的,為系統中socket全域分配的記憶體容量。
/proc/sys/net/ipv4/tcp_window_scaling 對應net.ipv4.tcp_window_scaling
管理TCP的視窗縮放特性,因為在tcp頭部中聲明接收緩衝區的長度為26位,因此視窗不能大於64K,如果大於64K,就要開啟視窗縮放。
/proc/sys/net/ipv4/tcp_sack 對應net.ipv4.tcp_sack
管理TCP的選擇性應答,允許接收端向發送端傳遞關於位元組流中丟失的序號,減少了段丟失時需要重傳的段數目,當段丟失頻繁時,sack是很有益的。
/proc/sys/net/ipv4/tcp_dsack 對應net.ipv4.tcp_dsack
是對sack的改進,能夠檢測不必要的重傳。
/proc/sys/net/ipv4/tcp_fack 對應net.ipv4.tcp_fack
對sack協議加以完善,改進tcp的擁塞控制機制。
TCP的串連管理:
/proc/sys/net/ipv4/tcp_max_syn_backlog 對應net.ipv4.tcp_max_syn_backlog
每一個串連請求(SYN報文)都需要排隊,直至本機伺服器接收,該變數就是控制每個連接埠的 TCP SYN隊列長度的。如果串連請求多餘該值,則請求會被丟棄。
/proc/sys/net/ipv4/tcp_syn_retries 對應net.ipv4.tcp_syn_retries
控制核心向某個輸入的SYN/ACK段重新發送相應的次數,低值可以更好的檢測到遠程主機的串連失敗。可以修改為3
/proc/sys/net/ipv4/tcp_retries1 對應net.ipv4.tcp_retries1
該變數設定放棄回應一個tcp串連請求前,需要進行多少次重試。
/proc/sys/net/ipv4/tcp_retries2 對應net.ipv4.tcp_retries2
控制核心向已經建立串連的遠程主機重新發送資料的次數,低值可以更早的檢測到與遠程主機失效的串連,因此伺服器可以更快的釋放該串連,可以修改為5
TCP串連的保持:
/proc/sys/net/ipv4/tcp_keepalive_time 對應net.ipv4.tcp_keepalive_time
如果在該參數指定的秒數內串連始終處於空閑狀態,則核心向用戶端發起對該主機的探測
/proc/sys/net/ipv4/tcp_keepalive_intvl 對應net.ipv4.tcp_keepalive_intvl
該參數以秒為單位,規定核心向遠程主機發送探測指標的時間間隔
/proc/sys/net/ipv4/tcp_keepalive_probes 對應net.ipv4.tcp_keepalive_probes
該參數規定核心為了檢測遠程主機的存活而發送的探測指標的數量,如果探測指標的數量已經使用完畢仍舊沒有得到用戶端的響應,即斷定用戶端不可達,關閉與該用戶端的串連,釋放相關資源。
/proc/sys/net/ipv4/ip_local_port_range 對應net.ipv4.ip_local_port_range
規定了tcp/udp可用的本地連接埠的範圍。
更多詳情見請繼續閱讀下一頁的精彩內容: