pam@pam_limits.so
在 Linux 系统中,pam_limits.so 是 PAM(Pluggable Authentication Modules)框架中的一个模块,用于在用户登录时应用资源限制。它通过读取 /etc/security/limits.conf 文件或 /etc/security/limits.d/ 目录下的配置文件,设置用户或组的系统资源使用限制,例如最大进程数、内存使用量、打开文件数等。
- /etc/security/limits.conf
- /etc/security/limits.d/xxx.conf
1. 模块功能
pam_limits.so 属于 session 模块类型,主要在用户会话建立时生效。它通过调用 setrlimit() 系统调用,限制用户的资源使用。这些限制可以防止单个用户或进程过度消耗系统资源,确保系统稳定性。
2. 配置文件
pam_limits.so 的限制规则通常定义在以下文件中:
- 主配置文件:
/etc/security/limits.conf - 扩展配置文件目录:
/etc/security/limits.d/*.conf(优先级高于主配置文件)
配置文件中的每行规则格式如下:
<domain> <type> <item> <value>
- **
<domain>**:应用限制的目标,可以是用户名、组名(以@开头,如@group)、或通配符*。 - **
<type>**:限制类型:soft:软限制,用户可以超过但会收到警告。hard:硬限制,用户无法超过。-:同时设置软硬限制。
- **
<item>**:限制的资源类型(见下表)。 - **
<value>**:限制的具体数值(可以是数字或unlimited)。
常用资源类型(<item>)
<item> |
说明 | 示例值 |
|---|---|---|
core |
核心转储文件大小 (KB) | 0, unlimited |
data |
数据段大小 (KB) | 102400 |
fsize |
最大文件大小 (KB) | 204800 |
memlock |
锁定内存大小 (KB) | 65536 |
nofile |
最大打开文件数 | 1024 |
rss |
驻留集大小 (KB) | 8192 |
stack |
栈大小 (KB) | 8192 |
cpu |
CPU 时间 (分钟) | 60 |
nproc |
最大进程数 | 50 |
as |
地址空间大小 (KB) | unlimited |
maxlogins |
最大登录会话数 | 4 |
priority |
进程优先级 | -10 |
示例配置(/etc/security/limits.conf)
# 限制用户 "testuser" 的最大进程数为 50
testuser hard nproc 50
# 限制 "students" 组的最大打开文件数为 1024
@students soft nofile 1024
@students hard nofile 1024
# or
#@students - nofile 1024
# 限制所有用户(除 root)的最大登录会话数为 4
* hard maxlogins 4
# 设置用户 "dev" 的栈大小为 8MB
dev - stack 8192
3. 在 PAM 中启用 pam_limits.so
要让 pam_limits.so 生效,需要在相关服务的 PAM 配置文件中添加调用。通常在 /etc/pam.d/ 或 /etc/pam.conf 中配置。
示例 1:针对特定服务(如 sshd)
编辑 /etc/pam.d/sshd:
session required pam_limits.so
这表示每次通过 SSH 登录时,pam_limits.so 都会加载并应用 /etc/security/limits.conf 中的限制。
示例 2:全局生效
编辑 /etc/pam.d/common-session(适用于 Debian/Ubuntu 系统):
session required pam_limits.so
或编辑 /etc/pam.conf(适用于基于全局配置的系统):
session required pam_limits.so
参数选项
pam_limits.so 支持一些可选参数,例如:
conf=/path/to/file:指定自定义限制配置文件路径。debug:启用调试模式,输出详细信息到日志。utmp_early:提前处理用户会话记录。
示例:
session required pam_limits.so conf=/etc/custom_limits.conf debug
4. 验证配置
配置完成后,可以通过以下方式验证限制是否生效:
登录测试:
- 以目标用户登录(如
su - testuser或通过 SSH)。 - 检查资源限制是否生效。
- 以目标用户登录(如
使用
ulimit命令:- 在用户会话中运行
ulimit -a,查看当前限制。
示例输出:
$ ulimit -a core file size (blocks, -c) 0 max locked memory (kbytes, -l) 65536 open files (-n) 1024 max user processes (-u) 50- 在用户会话中运行
ulimit参数
- 检查日志:
- 查看
/var/log/auth.log或/var/log/secure,确认是否有错误或调试信息。
- 查看
5. 注意事项
- root 用户例外:默认情况下,
pam_limits.so对root用户的限制无效,除非明确配置。 - 优先级:
/etc/security/limits.d/*.conf中的规则会覆盖/etc/security/limits.conf。 - 服务重启:修改配置后,可能需要重启相关服务(如
sshd)或重新登录才能生效。 - 系统默认值:如果未配置
pam_limits.so,系统会使用内核默认限制(如/proc/sys/kernel/pid_max)。
6. 实际应用场景
- 限制普通用户资源:防止用户运行过多进程或占用过多内存。
- 服务器安全:限制每个用户的登录会话数,防止暴力破解或资源滥用。
- 开发环境:为特定用户设置更高的文件描述符限制以支持开发需求。
示例:限制 SSH 用户的最大进程数
- 编辑
/etc/security/limits.conf:
@sshusers hard nproc 20 - 编辑
/etc/pam.d/sshd:
session required pam_limits.so - 重启 SSH 服务:
systemctl restart sshd - 测试:以
@sshusers组的用户登录,尝试运行超过 20 个进程,应被阻止。