温馨提示×

debian ulimit如何针对用户

小樊
42
2026-08-22 12:30:35
栏目: 智能运维

在 Debian(以及大多数 Linux 发行版)中,ulimit 用于限制进程资源使用。针对某个用户配置 ulimit,常见做法有下面几种,按推荐程度说明。


一、推荐方式:通过 /etc/security/limits.conf(最常用)

这是针对用户/用户组设置 ulimit 的标准方法。

1️⃣ 编辑 limits 配置文件

sudo vim /etc/security/limits.conf

2️⃣ 添加配置示例

# 格式:
# <domain> <type> <item> <value>

# 针对用户 testuser
testuser soft nofile 65535
testuser hard nofile 131072

# 针对用户组 dev
@dev soft nproc 4096
@dev hard nproc 8192

常用 item 说明

项目 含义
nofile 最大打开文件数
nproc 最大进程数
stack 栈大小
memlock 锁定内存
core core dump 大小

3️⃣ 确认 PAM 启用(非常重要)

limits.conf 依赖 PAM,否则不生效。

检查以下文件是否包含:

grep pam_limits /etc/pam.d/common-session
grep pam_limits /etc/pam.d/common-session-noninteractive

如果没有,手动添加:

session required pam_limits.so

适用于:

  • 登录用户
  • SSH 登录
  • su - username

二、仅对 systemd 用户生效(Debian 8+)

如果你使用的是 systemd,limits.conf 有时不会完全生效。

1️⃣ 为用户创建 systemd 配置

sudo mkdir -p /etc/systemd/system/user@1000.service.d
sudo vim /etc/systemd/system/user@1000.service.d/limits.conf

1000 是用户的 UID,可用 id -u 用户名 查看

2️⃣ 内容示例

[Service]
LimitNOFILE=65535
LimitNPROC=4096

3️⃣ 重载 systemd

sudo systemctl daemon-reload

适用于:

  • systemd 管理的用户 session
  • 桌面环境 / 某些服务

三、仅对某个服务生效(推荐用于服务用户)

如果是 服务用户(如 www-data、mysql),不要改 limits.conf。

示例:Nginx / 自定义服务

[Service]
LimitNOFILE=100000
LimitNPROC=5000

然后:

sudo systemctl daemon-reload
sudo systemctl restart 服务名

四、临时方式(不推荐长期使用)

只对当前 shell 生效

ulimit -n 65535
ulimit -u 4096

⚠️ 退出登录即失效


五、验证是否生效

切换用户后查看

su - testuser
ulimit -a

单独查看

ulimit -n
ulimit -u

六、常见问题

❓ limits.conf 不生效?

检查:

  1. 是否使用 su - 用户名(不是 su 用户名
  2. 是否启用 pam_limits.so
  3. 是否被 systemd 覆盖
  4. 是否通过 SSH 登录(SSH 可能受 sshd_config 影响)

❓ SSH 登录不生效?

编辑:

sudo vim /etc/ssh/sshd_config

确保:

UsePAM yes

然后:

sudo systemctl restart sshd

七、总结(推荐方案)

场景 推荐方式
普通用户 /etc/security/limits.conf
systemd 用户 systemd override
服务用户 systemd service 配置
临时测试 ulimit 命令

如果你能说明:

  • 普通用户 / 服务用户
  • SSH / 本地 / systemd
  • 想限制 nofile / nproc / 内存

我可以给你一份完全针对你环境的配置示例

0