Pam_limits资源调优限制
pam_limits 资源限制模块(提供的管理组:session)
为使用此模块, 系统管理员必须首先建立一个 root只读的文件(默认是/etc/security/limits.conf). 这文件描述了superuser想强迫用户和用户组的资源限制. uid=0的帐号不会受限制.
以下参数可以用来改变此模块的行为:
*debug - 往syslog(3)写入冗长的记录.
*conf=/path/to/file.conf - 指定一个替换的limits设定档.
设定档的每一行描述了一个用户的限制,以下面的格式:
<domain> <type> <item><value>
上面列出的栏位可以填下面的值:...
<domain> 可以是:
*一个用户名
*一个组名,语法是@group
*通配符*, 定义默认条目
<type> 可以有一下两个值:
*hard 为施行硬资源限制. 这些限制由superuser设定,由Linux内核施行. 用户不能提升他对资源的需求到大于此值.
*soft 为施行软资源限制. 用户的限制能在软硬限制之间上下浮动. 这种限制在普通用法下可以看成是默认值.
<item> 可以是以下之一:
*core - 限制core文件的大小(KB)
*data - 最大的资料大小 (KB)
*fsize - 最大的文件尺寸 (KB)
*memlock - 最大能锁定的内存空间(KB)
*nofile - 最多能打开的文件
*rss - 最大的驻留程序大小(KB)
*stack - 最大的堆栈尺寸(KB)
*cpu - 最大的CPU 时间(分钟)
*nproc - 最多的进程数
*as - 地址空间的限制
*maxlogins - 用户的最多登录数
*priority - 用户进程执行时的优先级
要完全不限制用户(或组), 可以用一个(-)(例如: ``bin -'',``@admin -''). 注意,个体的限制比组限制的优先级高, 所以如果你设定admin组不受限制, 但是组中的某个成员被设定档中某行限制, 那么此用户就会依据这样被限制.还应该注意, 所有的限制设定只是每个登录的设定. 他们既不是全局的,也不是永久的 ; 之存在于会话期间.
pam_limits 模块会通过syslog(3)报告它从设定档中找到的问题.
下面配置文件实例:
# EXAMPLE /etc/security/limits.conf file:
# =======================================
# <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
注意, 对同一个资源的软限制和硬限制 - 这建立了用户可以从指定服务会话中得到的默认和最大允许的资源数.
限制用户登录次数
/etc/security/limits.conf
# vim /etc/pam.d/login
session required pam_limits.so
# vim /etc/security/limits.conf
hulk hard maxlogins 2
限制用户打开进程数
# vim /etc/security/limits.conf
hulk hard nproc 3
# useradd hulk
# echo "123456" | passwd --stdinhulk
# su - hulk
$ sleep 3000 &
[1] 4650
$ sleep 3000 &
[2] 4651
$ sleep 3000 &
-bash: fork: retry: Resource temporarilyunavailable
限制用户使用CPU时间
# vim /etc/security/limits.conf
hulk hard cpu 1
$ ./a.sh 脚本执行1分钟后
Killed
限制用户创建文件大小
# vim /etc/security/limits.conf
hulk hard fsize 500
# su - hulk
$ dd if=/dev/zero of=file1 bs=1M count=1
File size limit exceeded (core dumped)