如何限制Linux用戶的進(jìn)程數(shù)呢?
-bash: fork: retry: Resource temporarily unavailable
下面就是一個(gè)最簡(jiǎn)單的 bash fork 炸彈:
。 () { : | : & } ; :
上面幾個(gè)符號(hào)看上去很復(fù)雜,其實(shí)如果寫成下面這個(gè)樣子就好懂了,: 是函數(shù)名,執(zhí)行一個(gè)調(diào)用自己的遞歸并且 pipe 到自己,& 表示后臺(tái)執(zhí)行程序,最后的一個(gè) : 是在函數(shù)外調(diào)用和執(zhí)行 : () 這個(gè)函數(shù)的意思:
。 () {
。 | : &
}; :
如何避免 fork 炸彈呢?方法很簡(jiǎn)單,只要限制每個(gè)用戶可以調(diào)用的進(jìn)程數(shù)就可以避免,這個(gè)可以通過(guò)修改 vi /etc/security/limits.conf 文件來(lái)設(shè)定:
# vi /etc/security/limits.conf
vpsee hard nproc 32
@student hard nproc 32
@faculty hard nproc 64
上面的配置文件意思是說(shuō)限制 vpsee 這個(gè)用戶只能 fork 32 個(gè)進(jìn)程;然后限制 student 這個(gè)用戶組的每個(gè)成員最多能 fork 32 個(gè)進(jìn)程;限制 faculty 這個(gè)用戶組的每個(gè)成員最多能 fork 64 個(gè)進(jìn)程。不過(guò)要事先檢查系統(tǒng)是否有 pam_limits.so 這個(gè)模塊以及是否已經(jīng)加載:
# ls /lib64/security/pam_limits.so
/lib64/security/pam_limits.so
# vi /etc/pam.d/login
session required pam_loginuid.so
如果自己是 Linux 普通用戶,不是 root 用戶不能修改 limits.conf 和重啟系統(tǒng)的話,可以用 ulimit 來(lái)臨時(shí)限制自己允許創(chuàng)建的進(jìn)程數(shù),ulimit 有 Hard 和 Soft 兩種方法限制,用 Hard 的話可以減少最大可用的進(jìn)程數(shù),但是就不能重新增大這個(gè)限制了;用 Soft 的話可以自己自由增大和減小限制(ulimit,-H 和 -S 的詳細(xì)說(shuō)明可以參看 man ulimit)。不同的 Linux 版本對(duì)這個(gè) ulimit -u 的默認(rèn)值不同,在 CentOS 上默認(rèn)情況下最大運(yùn)行進(jìn)程數(shù)是 8256,在 Fedora 上是 1024,所以這個(gè)要看不同的發(fā)行版本,不過(guò)這個(gè)無(wú)所謂,反正可以改,不過(guò)改成32后就不能再改成比32更大的了(比如64),只能再改成比32小的,ulimit 不帶 -H 和 -S 參數(shù)的時(shí)候同時(shí)設(shè)置 Hard 和 Soft:
$ ulimit -u
8256
$ ulimit -u 32
$ ulimit -u 64
-bash: ulimit: max user processes: cannot modify limit: Operation not permitted
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 8256
max locked memory (kbytes, -l) 32
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, -t) unlimited
max user processes (-u) 32
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
新文章:
- CentOS7下圖形配置網(wǎng)絡(luò)的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS單網(wǎng)卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗(yàn)證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網(wǎng)打印機(jī)IP講解
- CentOS7使用hostapd實(shí)現(xiàn)無(wú)AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網(wǎng)絡(luò)重啟出錯(cuò)
- 解決Centos7雙系統(tǒng)后丟失windows啟動(dòng)項(xiàng)
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統(tǒng)有什么不同呢
- Centos 6.6默認(rèn)iptable規(guī)則詳解