1、PAM架构
![图片[1]-配置系统资源限制limits-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-87.png)
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-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-88.png)
修改限制的实现方式:
- 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