配置系统资源限制limits

1、PAM架构

图片[1]-配置系统资源限制limits-李佳程的个人主页

PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来

2、PAM相关文件

  • 包名: pam
  • 模块文件目录:/lib64/security/*.so
  • 特定模块相关的设置文件:/etc/security/
  • 应用程序调用PAM模块的配置文件
    • 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
    • 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
    • 注意:如/etc/pam.d存在,/etc/pam.conf将失效

3、常用PAM模块

3.1、常用PAM模块

如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆。

# 默认此模块可以对ssh等登录有效,但不影响su登录
[root@centos79-base01 pam.d]# grep pam_nologin *
login:account    required     pam_nologin.so
remote:account    required     pam_nologin.so
sshd:account    required     pam_nologin.so

3.2、pam_limits.so 模块

在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间。

图片[2]-配置系统资源限制limits-李佳程的个人主页

修改限制的实现方式:

  • ulimit命令
    • ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。
    • ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。
    • 使用ulimit进行修改,立即生效。
    • ulimit只影响shell进程及其子进程,用户登出后失效。
    • 可以在profile中加入ulimit的设置,变相的做到永久生效。
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制

查询时,若不加H或S参数,默认显示的是软限制
修改时,若不加H或S参数,两个参数一起改变

# 配置文件
# pam_limits的设定值是基于 per-process 的
/etc/security/limits.conf
/etc/security/limits.d/*.conf

# 配置文件格式
#每行一个定义
<domain>       <type> <item> <value>

# 格式说明
Username    单个用户
@group      组内所有用户
*           所有用户
%         仅用于限制 maxlogins limit , 可以使用 %group 语法. 只用 % 相当于 * 对所
          有用户maxsyslogins limit限制. %group 表示限制此组中的所有用户总的最大登录数

# 限制的类型
Soft   软限制,普通用户自己可以修改
Hard   硬限制,由root用户设定,且通过kernel强制生效
-      二者同时限定

# 指定具体值
# systemd 的service 资源设置需要单独配置

# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
#It does not affect resource limits of the system services.
# 在Centos7以上版本中,使用Systemd替代了之前的SysV。/etc/security/limits.conf文件的配置作用域缩小了。/etc/security/limits.conf的配置,只适用于通过PAM认证登录用户的资源限制,它对systemd的service的资源限制不生效。因此登录用户的限制,通过/etc/security/limits.conf与/etc/security/limits.d下的文件设置即可。

# 对于systemd service的资源设置,则需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同时也会加载两个对应目录中的所有.conf文件/etc/systemd/system.conf.d/*.conf和/etc/systemd/user.conf.d/*.conf。system.conf是系统实例使用的,user.conf是用户实例使用的。

vim /etc/systemd/system.conf
DefaultLimitNOFILE=100000
DefaultLimitNPROC=65535

#或者针对指定的service添加下面行
[Service]
LimitNOFILE=100000
LimitNPROC=65535
# 系统的各种资源的默认值
[root@centos79-base01 pam.d]# 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) 14989
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14989
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
# 查看指定进程的资源限制
[root@centos79-base01 pam.d]# cat /proc/`pidof httpd | xargs -n1 | sort -n|head -1`/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             14989                14989                processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       14989                14989                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us
# ulimit 命令修改用户打开的文件个数
[root@centos79-base01 pam.d]# ulimit -n
1024
[root@centos79-base01 pam.d]# ulimit -n 10240
[root@centos79-base01 pam.d]# 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) 14989
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 10240
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 14989
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
# 限制用户最多打开的文件数和运行进程数,并持久保存
vim /etc/security/limits.conf
#用户test可打开10240个文件
test  - nofile 10240
#用户test不能运行超过20个进程
test hard nproc 10

[test@centos79-base01 ~]$ ulimit -n
10240
[test@centos79-base01 ~]$ 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) 14989
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 10240
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 10
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
# 限制test用户最大的同时登录次数
[root@centos79-base01 ~]# vim /etc/security/limits.conf
test  - maxlogins 2

[root@centos79-base01 ~]# who
root     pts/0        2022-11-13 21:12 (192.168.1.1)
root     pts/1        2022-11-13 21:57 (192.168.1.1)
root     pts/2        2022-11-13 21:57 (192.168.1.1)
test     pts/3        2022-11-13 21:58 (192.168.1.1)
test     pts/4        2022-11-13 21:59 (192.168.1.1)

#新开终端登录test用户,查看日志
[root@centos79-base01 ~]# tail -f /var/log/secure
Nov 13 21:59:01 centos79-base01 sshd[2254]: pam_limits(sshd:session): Too many logins (max 2) for test
Nov 13 21:59:01 centos79-base01 sshd[2254]: pam_unix(sshd:session): session opened for user test by (uid=0)
Nov 13 21:59:01 centos79-base01 sshd[2254]: error: PAM: pam_open_session(): Permission denied
#生产环境一般配置
vim /etc/security/limits.conf
*    -   core       unlimited
*    -   nproc       1000000
*    -   nofile      1000000
*    -   memlock     32000
*    -   msgqueue    8192000

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享