pam模块

PAM认证简介

参考: https://sites.google.com/site/linuxxuexi/shi-zhan-gong-cheng-shi-xi-lie/shi-yi-pam-ren-zheng-mo-kuai

参考: https://documentation.suse.com/zh-cn/sles/15-SP2/html/SLES-all/cha-pam.html

PAM(Pluggable Authentication Modules )是由Sun公司提出的一种认证机制。通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开。

使得系统管理员可以灵活地根据需求,给不同的服务配置不同的认证方式,而无需更改服务程序,同时也便于向系统中添加新的认证手段。


PAM模块新闻pam_faillock

https://unix.stackexchange.com/questions/557894/what-is-the-difference-between-pam-faillock-and-pam-tally2

由于 Linux-PAM 1.4.0(2020 年 6 月 8 日)pam_tallypam_tally2 已弃用并引入了 pam_faillock,版本 1.5.0(2020 年 11 月 10 日)删除了 pam_tallypam_tally2, 如果你的发行版提供 pam_faillock,请使用该版本,如果没有,请使用 pam_tally2

来源: https://github.com/linux-pam/linux-pam/tags


安装pam模块

# rhel
dnf install -y yam

# debian
apt install -y pam

pam模块目录

# 列出pam模块
ls /lib64/security/


PAM认证的配置文件

Redhat强烈建议您使用 authconfig 工具配置 PAM,而不是手动编辑 PAM 配置文件。

https://docs.redhat.com/zh_hans/documentation/red_hat_enterprise_linux/7/html/system-level_authentication_guide/pam_configuration_files

文件名称作用解释
/etc/pam.d/system-auth系统级别的认证的核心配置, 包含了所有用户的基本认证和账户管理设置。
/etc/pam.d/password-auth修改密码相关的配置,定义了密码验证和密码策略的具体实现。
/etc/login.defs定义新用户账号和密码的默认配置,例如:是否创建home目录,使用哪种shell,密码默认有效期等
/etc/pam.d/login定义登录认证的模块和策略
/etc/pam.d/passwd配置passwd命令的行为
/etc/pam.d/common-password/etc/pam.d/passwd子配置

/etc/pam.d/system-auth配置样本


模块类型(module-type)

模块作用阶段

参考:https://docs.oracle.com/cd/E19253-01/819-7061/pam-29/index.html

红帽官方翻译为:module_interface 模块用途(接口)

模块类型解释用途
auth验证用户的身份,确保用户是合法用户例如,它请求并验证密码的有效性。带有此接口的模块也可以设置凭据,如组成员资格。
account管理账户有效性及非认证类功能;检查用户的账号是否有效,防止过期或被锁定的账号登录。它会检查用户帐户是否已过期,或者是否允许用户在特定时刻登录。
password密码复杂度检查机制及修改规则。用于加强密码安全性,防止弱密码被破解
session管理用户会话,提供用户登录后的环境,用户会话期资源控制(如最大文件数、进程数限制)。使用此界面的模块还可以执行允许访问所需的其他任务,例如挂载用户的主目录和使用户的邮箱可用。
-<模块类型>缺失时不会加载的模块,且不记录日志,适用于非必装模块。

控制条件(Control)

常用的PAM模块控制标志

控制条件参数优先级行为逻辑
required必要条件模块需返回成功才能通过认证。若失败,继续执行同类型其他模块
requisite一票否决模块失败则立即终止后续同类型模块执行。
sufficient一票通过模块成功则直接通过认证;失败则忽略,优先级高required/requisite
optional可选成功与否不影响认证结果。
include调用其他配置文件中定义的配置信息。

pam配置工具authselect

RHEL8引入了authselect 工具来统一管理 PAM 和 NSS 配置,不要直接编辑 system-auth 或 password-auth!这两个文件是 authselect 的输出结果,会被工具覆盖。

# 查看当前 profile
authselect current

# 使用 profile + 自定义 feature(如启用 faillock、with-sudo 等)
authselect select sssd with-faillock --force

# 自定义策略应放在 /etc/authselect/custom/ 下

pam配置案例

模块类型控制标志模块路径名称模块参数
authsubstacksystem-auth
accountrequiredpam_nologin.so


/etc/pam.d/system-auth密码复杂度配置

/etc/pam.d/system-auth是负责密码复杂度密码锁定策略的配置文件.

# 查看配置文件
cat /etc/pam.d/system-auth

密码策略分为:
● 密码复杂度、
● 口令锁定策略、
● 口令重复次数限制、
● 口令生存期配置,

## 编辑密码复杂度配置文件
vim /etc/pam.d/system-auth

将如下内容添加到配置文件的指定位置。
注:可根据现场实际情况,在ucredit=-1,lcredit=-1,dcredit=-1,ocredit=-1中任选三种参数对密码复杂度进行配置。
ucredit:大写字母个数。
lcredit:小写字母个数。
dcredit:数字个数。
ocredit:特殊字符个数。

# ucredit:大写字母个数
# lcredit:小写字母个数
# dcredit:数字个数
# ocredit:特殊字符个数

# 大写 && 小写 && 数字 && 特殊字符 至少各有一个
password requisite pam_cracklib.so ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
作用阶段模块是否必须模块名模块参数
字段:passwordrequisitepam_cracklib.soucredit=-1 lcredit=-1 dcredit=-1
解释:模块作用阶段: 密码更改时。一票否决PAM 的一个模块,专门用于检查密码的复杂度。+ ucredit=-1 密码中至少1个大写字母。
+ lcredit=-1 密码中至少1个小写字母
+ dcredit=-1 密码中至少1个数字。
+ ocredit=-1 密码中至少一个特殊字符

将代码框中的内容添加到下图中箭头指向的位置,然后保存并退出。


/etc/pam.d/system-auth配置账号锁定时间

# 配置账号锁定时间为300秒
auth required pam_tally2.so deny=5 onerr=fail no_magic_root unlock_time=300
模块类型控制标志模块路径名称模块参数
accountrequiredpam_tally2.sodeny=5 onerr=fail no_magic_root unlock_time=300
作用阶段必要条件+ deny=5 # 最大连续失败次数
+ onerr=fail # 模块异常时拒绝访问
+ no_magic_root # root 用户同样受锁定限制
+ unlock_time=300 # 锁定 5 分钟后自动解锁

注:其中unlock_time的单位为,具体参数数值请根据现场实际情况进行设置。


/etc/pam.d/system-auth配置口令重复次数限制

# 配置口令重复次数为5次
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok remember=5
模块类型控制标志模块路径名称模块参数
passwordsufficientpam_unix.somd5 shadow nullok try_first_pass use_authtok remember=5
一票通过+ md5 使用 MD5 # 加密算法(推荐sha512)
+ shadow \ # 启用影子密码(安全必须)
+ nullok \ # 允许空密码(高风险,建议禁用)
+ try_first_pass \ # 复用认证阶段密码(优化体验)
+ use_authtok \ # 强制使用认证阶段密码(安全必须)
+ remember=5 # 记录最近 5 次密码防复用

注:remember参数为口令重复次数,请根据现场实际情况进行设置。


/etc/login.defs新用户口令安全默认策略配置文件

/etc/login.defs文件定义了系统新用户口令安全默认策略的配置.

密码有效期配置

vim /etc/login.defs

PASS_MAX_DAYS 90        #// 口令最大有效天数 
PASS_MIN_DAYS 0         #// 口令最小有效天数 
PASS_MIN_LEN 8         #// 口令最少字符数 
PASS_WARN_AGE 7         #// 口令过期提前警告天数


/etc/pam.d/login登录失败策略配置文件

# deny=3(登录失败次数3次)
# lock_time=300(锁定300秒)
# even_deny_root root_unlock_time=300(root用户锁定300秒);
auth required pam_tally2.so deny=3 lock_time=300 even_deny_root root_unlock_time=300
模块类型控制标志模块路径名称模块参数
passwordsufficientpam_unix.somd5 shadow nullok try_first_pass use_authtok remember=5
一票通过+ deny=3(登录失败次数3次)
+ lock_time=300(锁定300秒)
+ even_deny_root root_unlock_time=300(root用户锁定300秒);

生产案例:pam安全整改


确认密码重用是否受限制

禁止使用最近用过的x个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面

# 查看密码重用次数是否限制
grep remember /etc/pam.d/system-auth

vim /etc/pam.d/system-auth

变更

password  sufficient  pam_unix.so sha512  shadow nullok try_first_pass use_authtok  remember=5
模块类型控制标志模块路径名称模块参数
passwordsufficientpam_unix.sosha512 shadow nullok try_first_pass use_authtok remember=5
作用阶段: 修改密码时一票通过Unix密码验证模块+ sha512 指定密码的哈希算法为SHA-512
+ shadow 使用shadow密码文件(通常位于/eetc/shadow)来获取加密的密码哈希。
+ nullok 允许用户没有密码(空密码)进行身份验证
+ try_first_pass PAM首先尝试使用用户上次提供的密码进行身份验证,而不是提示用户输入新密码
+ use_authtok PAM使用之前在身份验证过程中输入的密码作为认证令牌(authtok)。
+ remember=5 禁止使用最近用过的5个密码(己使用过的密码会被保存在 /etc/security/opasswd 下面

确认root计算机用户默认组的GID是否为0

# 确认root计算机用户默认组的GID是否为0
id root | grep uid=0 && echo true || echo failes


确认SSH的MaxAuthTries(ssh最大尝试次数)是否配置为小于等于4

# 查看SSH服务器允许的最大认证尝试次数
cat /etc/ssh/sshd_config | grep MaxAuthTries

#MaxAuthTries 6 修改为MaxAuthTries 3


解除Linux进程数和线程数及文件打开数


允许开启的线程数量

# 加大允许开启的线程数量
vm.max_map_count=262144

系统中可同时打开的文件数

# 系统中可同时打开的最大文件数目
fs.file-max=52706963

# 单个进程可分配的最大文件数
fs.nr_open=52706963

# 查看系统中可同时打开的最大文件数
sysctl fs.file-max

# 查看单进程可打开的最大文件数
sysctl fs.nr_open

在这里插入图片描述

在这里插入图片描述


限制用户最大进程数和最大文件打开数限制

参考: limits.conf配置文件说明

软限制用户可以临时提高的,而硬限制管理员设置的上限不能被用户或进程改变

针对用户(*表示所有用户)限制方法限制类型限制的值
* 代表针对所有用户soft: 软限制noproc最大进程数11000
*hard: 硬限制nofile最大文件打开数4100
*-softhard全部限制noproc(最大进程数)1100
*-nofile(最大文件打开数)4100

修改Linux最大文件描述符及ulimit相关使用

osopenfile值,建议加大。
配置文件在/etc/security/limits.conf

# 所有用户最大内存锁定的软限制为未限制
* soft memlock unlimited
# 所有用户最大内存锁定的硬限制为未限制 
* hard memlock unlimited

# 针对所有用户软限制最大进程数
* soft noproc 11000
# 针对所有用户硬限制最大进程数
* hard noproc 11000

# 针对所有用户软限制最大文件打开数
* soft nofile 65535
# 针对所有用户硬限制最大文件打开数
* hard nofile 65535

# 最大核心转储文件的大小为未限制
* soft core unlimited
* hard core unlimited

软硬一起限制—生产示例

# 最大核心转储文件的大小
* - core unlimited

# *代表针对所有用户,-表示软硬都限制,noproc是最大进程数
* - noproc 1000000

# *代表针对所有用户,-表示软硬都限制,nofile是最大文件打开数
* - nofile 1000000

# *代表针对所有用户,-表示软硬都限制,memlock是最大内存锁定 
* - memlock 32000

# 所有用户的消息队列内存上限为 8MB
* - msgqueue 8192000

使配置生效

重启系统或者重新登录用户才会让/etc/security/limits.conf 配置生效;

也可以通过重新加载PAM配置的方法让limits.conf配置热生效
重新加载 PAM 配置可能会导致当前用户会话中断或其他不可预测的结果。

# 重新加载 PAM(Pluggable Authentication Modules)配置,让limits.conf配置热生效
sudo systemctl restart systemd-logind

# 注销用户
logout

# 登录
ssh xxx

在这里插入图片描述

查看配置生效后的限制数量

# 查看所有值
ulimit -n

# 查看用户进程能够打开的最大文件数
ulimit -n

# 查看用户最大进程数
ulimit -u

# 查看虚拟内存大小
ulimit -v

# 查看CPU时间限制
ulimit -t

# 查看最大核心转储文件的大小
ulimit -c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值