0

0

如何限制用户资源 ulimit系统限制配置

P粉602998670

P粉602998670

发布时间:2025-08-19 13:00:02

|

696人浏览过

|

来源于php中文网

原创

  1. ulimit是linux中用于控制用户或进程资源使用的机制,分为软限制(实际生效)和硬限制(软限制上限,仅root可提升);2. 临时设置通过ulimit命令实现,如ulimit -n 1024设置最大打开文件数,仅当前会话有效;3. 永久配置需修改/etc/security/limits.conf或/etc/security/limits.d/*.conf,格式为ain> ,支持用户、组、通配符配置;4. 配置生效需系统启用pam_limits.so模块,且通过支持的登录方式(如ssh、本地终端)重新登录;5. systemd服务不读取limits.conf,需在服务单元文件中使用limitnofile等参数或修改systemd.conf全局设置;6. 验证可通过ulimit -a查看用户限制,或cat /proc//limits查看具体进程;7. 注意su需使用su - username以触发pam加载,图形界面和容器环境可能不适用limits.conf,应避免盲目设置unlimited以防资源耗尽。合理配置需结合pam、systemd及实际场景,确保系统稳定性与安全性。

如何限制用户资源 ulimit系统限制配置

在 Linux 系统中,

ulimit
是一个用于控制用户或进程资源使用上限的机制。通过合理配置
ulimit
,可以防止某个用户或进程占用过多系统资源(如内存、文件数、CPU 时间等),从而保障系统稳定性和安全性。以下是关于如何配置和限制用户资源的详细说明。


一、ulimit 是什么?软限制与硬限制

ulimit
是 shell 内置命令,用于查看或设置当前 shell 及其派生进程的资源限制。它支持多种资源类型,比如:

  • 打开文件数(
    -n
  • 进程数(
    -u
  • 虚拟内存大小(
    -v
  • 栈大小(
    -s
  • CPU 时间(
    -t
  • 文件大小(
    -f

每个资源有 软限制(soft limit)硬限制(hard limit)

  • 软限制:实际生效的限制,进程不能超过此值。
  • 硬限制:软限制的上限,只有 root 用户可以提升。

普通用户只能降低或在硬限制范围内调整软限制,root 用户可以修改两者。


二、临时设置 ulimit(当前会话有效)

在终端中使用

ulimit
命令可临时修改限制:

# 查看所有限制
ulimit -a

# 设置最大打开文件数为 1024(软限制)
ulimit -n 1024

# 设置硬限制(需 root)
ulimit -Hn 2048

# 设置软限制
ulimit -Sn 1024
⚠️ 注意:这种方式只对当前 shell 及其子进程有效,重启后失效。

三、永久配置 ulimit:使用 /etc/security/limits.conf

要实现永久生效,需修改

/etc/security/limits.conf
文件或
/etc/security/limits.d/*.conf
中的配置文件。

配置格式:

            
  • domain:用户、组(以 @ 开头)、或通配符(*、%)
  • type
    • soft
      :软限制
    • hard
      :硬限制
    • both
      -
      :同时设置软硬限制
  • item:资源类型,如
    nofile
    nproc
  • value:数值或
    unlimited

常见配置示例:

# 用户 alice 最多打开 4096 个文件
alice    soft    nofile    4096
alice    hard    nofile    8192

# 所有用户最大进程数限制
*        soft    nproc     1024
*        hard    nproc     2048

# 组 users 限制内存使用
@users   hard    as        1048576    # 1GB (单位 KB)

# root 用户特殊权限
root     soft    nofile    65536
root     hard    nofile    65536

# 同时设置软硬限制
*        -       memlock   unlimited

支持的 item 类型(常用):

item 含义 单位
@@######@@ 打开文件描述符数
@@######@@ 用户可创建的最大进程数
@@######@@ 地址空间(虚拟内存) KB
@@######@@ 单个文件最大大小 KB
@@######@@ 锁定内存大小 KB
@@######@@ CPU 时间(分钟) 分钟
@@######@@ 栈大小 KB

四、使 limits 配置生效的关键条件

并非所有登录方式都会自动加载

nofile
,需确保以下条件:

  1. PAM 模块启用
    系统必须启用

    nproc
    模块。检查以下文件是否包含:

    as

    应包含一行:

    fsize
  2. 登录方式支持

    新秀B2C商城系统
    新秀B2C商城系统

    新秀B2C商城系统是一款简洁易用PHP商城系统。可免费下载使用,可用于商业用途,没有时效限制,除版权标识外,所有代码都允许修改。后台功能简介:1、商城设置:基本信息,配送方式,配送范围,支付方式,财务管理;2、商品管理:商品列表,添加商品,商品分类,商品品牌,商品属性;3、订单管理:订单列表,缺货登记;4、用户互动:用户管理,留言管理,评论管理,网站公告,在线客服,用户协议;5、文章管理:文章列表

    下载
    • 通过 SSH、本地终端登录通常支持。
    • systemd 服务、docker 容器、su 切换用户等可能不自动加载,需特别配置。
  3. 重启或重新登录生效
    修改后需重新登录用户才能生效(不能仅 source 或新开子 shell)。


五、systemd 服务中的 ulimit 限制

现代系统使用 systemd 时,服务的资源限制由 systemd 控制,不读取

memlock

需在服务单元文件中设置,例如:

cpu

或全局设置

stack

limits.conf

修改后运行:

pam_limits.so

六、验证配置是否生效

  1. 切换到目标用户:

    /etc/pam.d/common-session
    /etc/pam.d/sshd
    /etc/pam.d/login
  2. 查看限制:

    session    required    pam_limits.so
  3. 或查看进程限制(需知道 PID):

    limits.conf

七、常见问题与注意事项

  • su 切换用户可能不生效:建议使用
    [Service]
    LimitNOFILE=8192
    LimitNPROC=4096
    LimitAS=infinity
    LimitSTACK=8192
    (模拟登录 shell)。
  • 图形界面登录可能忽略 limits:取决于显示管理器配置。
  • 容器环境独立限制:Docker/K8s 使用自己的资源控制(如 cgroups),需单独配置。
  • 不要盲目设 unlimited:可能导致资源耗尽,影响系统稳定性。

基本上就这些。合理配置

/etc/systemd/system.conf
能有效防止资源滥用,但需结合 PAM、systemd 和实际使用场景综合设置。关键是理解软/硬限制、配置文件位置和加载机制。

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32768
systemctl daemon-reexec
systemctl daemon-reload
su - username
ulimit -a
cat /proc//limits
su - username
ulimit

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

391

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

li是什么元素
li是什么元素

li是HTML标记语言中的一个元素,用于创建列表。li代表列表项,它是ul或ol的子元素,li标签的作用是定义列表中的每个项目。本专题为大家li元素相关的各种文章、以及下载和课程。

415

2023.08.03

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

249

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

494

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

399

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

437

2024.04.08

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号