CentOS 6 系统资源配额管理配置
1. 限制用户 CPU 使用时间
在 CentOS 6 系统中,可通过 PAM 模块控制用户的资源使用量。核心配置文件位于:
/etc/security/limits.conf—— 主配置文件/etc/security/limits.d/—— 子模块配置目录
创建新用户并检查默认资源限制:
[root@reddhat6_155_201 ~]# useradd admin
[root@reddhat6_155_201 ~]# su - admin -c '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) 30471
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 65535
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) 30471
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
编辑 /etc/security/limits.conf 为 admin 用户设置 CPU 时间上限:
admin soft cpu 60
admin hard cpu 120
说明:软限制(soft)触发警告,硬限制(hard)直接终止进程,且重启后计时重置。
切换至该用户查看更新后的限制:
[root@reddhat6_155_200 ~]# su - admin
[admin@reddhat6_155_200 ~]$ ulimit -a | grep "cpu time"
cpu time (seconds, -t) 60
使用 dd 命令测试超时行为(超过 60 秒将被强制终止):
[admin@reddhat6_155_200 ~]$ dd if=/dev/zero of=/dev/null &
观察 top 命令中进程的 TIME 列变化,确认运行时间达到 60 秒后被中断。
尝试手动调整 ulimit 超过软限制会失败,但可临时提升至硬限制上限(即 120 秒),超出则立即终止。
支持的格式示例:
username soft cpu 1 # 用户最多运行 1 分钟
username hard cpu 2 # 超过 2 分钟强制终止
UID soft cpu 5 # UID 为 5 的用户限制
500: hard cpu 10 # UID ≥ 500 的用户上限
@groupname hard cpu 20 # 属于指定组的用户统一限制
2. 控制用户内存占用
内存相关限制包括两个参数:
rss:驻留集大小(实际物理内存使用量,对应top中的 RES 列)as:地址空间上限(虚拟内存大小,对应top中的 VIRT 列)
注意:当前 CentOS 6 的 pam_limits 模块不支持 rss 限制,仅可通过 as 实现控制。
为 admin 用户设置最大虚拟内存为 256MB(262144 KB):
[root@reddhat6_155_200 ~]# echo 'admin hard as 262144' >> /etc/security/limits.conf
切换用户验证设置是否生效:
[admin@reddhat6_155_200 ~]$ ulimit -v
262144
3. 限制用户可启动进程数量
系统默认通过 /etc/security/limits.d/90-nproc.conf 限制普通用户最大进程数:
* soft nproc 1024
root soft nproc unlimited
切换到 admin 用户验证限制:
[root@reddhat6_155_200 ~]# su - admin
[admin@reddhat6_155_200 ~]$ ulimit -u
1024
使用 shell fork bomb 测试限制效果:
[admin@reddhat6_155_200 ~]$ :(){ :|:& };:
[1] 749
-bash: fork: retry: 资源暂时不可用
当进程数达到 1024 后,系统无法再创建新进程,阻止了资源耗尽攻击。