PAM认证

2024-01-04 07:20
文章标签 认证 pam

本文主要是介绍PAM认证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些

动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理

员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于

向系统中添加新的认证手段。自身不做认证

认证库:文本文件、MySQL、NIS、LDAP等

相关文件

包名

pam

模块文件目录

/lib64/security/*.so

特定模块相关的设置文件

/etc/security/

应用程序调用PAM模块的配置文件

  • 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  • 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME

注意:如/etc/pam.d存在,/etc/pam.conf将失效

查看某程序是否支持PAM

ldd:打印程序或者库文件所依赖的共享库列表

有以下类似结果的即支持PAM,无结果显示的即不支持

[root@centos8 ~]#ldd `which sshd` | grep libpamlibpam.so.0 => /lib64/libpam.so.0 (0x00007f15fcd9d000)[root@centos8 ~]#ldd `which passwd` | grep libpamlibpam.so.0 => /lib64/libpam.so.0 (0x00007f0dc8a09000)libpam_misc.so.0 => /lib64/libpam_misc.so.0 (0x00007f0dc8805000)

工作原理

PAM认证一般顺序:Service(服务)→PAM(配置文件)→pam_*.so

PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于 /etc/pam.d 下),最后调用认证文件(位于 /lib64/security 下)进行安全认证

例:以passwd为例

1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

配置文件

专用配置格式

以 /etc/pam.d/sshd 为例

module-type:模块类型,即功能

Auth:账号的认证和授权

Account:帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务
的访问时间,限制用户的位置(例如:root用户只能从控制台登录)

Password:用户修改密码时密码复杂度检查机制等功能

Session:用户会话期间的控制,如:最多打开的文件数,最多的进程数等

-type:表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

control:

required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结
果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应
用程序,即为必要条件。

requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执
行同一type内的任何模块
,而是直接将控制权返回给应用程序。是一个必要条件

sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其
它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的required和requisite

optional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般忽略

include: 调用其他的配置文件中定义的配置信息

module-path:

模块文件所在绝对路径

模块文件所在相对路径:/lib64/security目录下的模块可使用相对路径,如:pam_shells.so、
pam_limits.so

有些模块有自已的专有配置文件,在/etc/security/*.conf目录下

arguments:

debug :该模块应当用syslog( )将调试信息写入到系统日志文件中

no_warn :表明该模块不应把警告信息发送给应用程序

use_first_pass :该模块不能提示用户输入密码,只能从前一个模块得到输入密码

try_first_pass :该模块首先用前一个模块从用户得到密码,如果该密码验证不通过,再提示用户
输入新密码

use_mapped_pass 该模块不能提示用户输入密码,而是使用映射过的密码

expose_account 允许该模块显示用户的帐号名等信息,一般只能在安全的环境下使用,因为泄漏
用户名会对安全造成一定程度的威胁

注意:修改PAM配置文件将立即生效

建议:编辑pam规则时,保持至少打开一个root会话,以防止root身份验证错误

常用PAM模块

pam_nologin.so

完整路径:/lib64/security/pam_nologin.so

功能

如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆。对ssh等登录有效,不影响su登录

现有root和普通用户wang都可正常登录系统,使用pam_nologin.so限制wang登录

查看sshd使用的pam,可知sshd使用pam_nologin.so模块
[root@centos8 ~]#cat /etc/pam.d/sshd
#%PAM-1.0
...
account    required     pam_nologin.so
...创建 /etc/nologin 文件即可
[root@centos8 ~]#touch /etc/nologin
[root@centos8 ~]#echo "今天你被限制登录" > /etc/nologin试图登录wang账号
[root@wenzi ~]#ssh wang@192.168.28.10
wang@192.168.28.10's password:
今天你被限制登录Authentication failed.

pam_limits.so

完整路径:/lib64/security/pam_limits.so

功能

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

修改限制的方法

1、ulimit命令

可以对shell进程及子进程进行资源限制;每个进程都有自己的limits值;使用ulimit修改立即生效;ulimit只影响shell进程及其子进程,用户登出后失效

-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参数,两个参数一起改变

2、修改配置文件

配置文件:/etc/security/limits.conf     /etc/security/limits.d/*.conf

配置文件格式:

  • <domain>
    • username 表示单个用户;
    • @group 表示组内所有用户;
    • * 表示所有用户;
  • <type>
    • Soft 软限制,普通用户自己可以改;
    • Hard 硬限制,由root用户设定,且通过kernel强制生效
    • - 二者同时设定
  • <item>
    • nofile 能同时打开的最大文件数量,默认1024
    • nproc 能同时运行的进程最大数量,默认1024
  • <value> 设定具体值

查看哪些程序使用了pam_limits.so模块,可知有 system-auth:session
[root@centos8 pam.d]#grep limit *
fingerprint-auth:session     required                                     pam_limits.so
password-auth:session     required                                     pam_limits.so
runuser:session         required        pam_limits.so
system-auth:session     required                                     pam_limits.so查看login的pam配置时,可发现具有互相引用的关系session include system-auth
[root@centos8 pam.d]#cat login
#%PAM-1.0
...
account    required     pam_nologin.so
...
session    include      system-auth
...查看当前限制
[root@centos8 pam.d]#ulimit -a
core file size          (blocks, -c) unlimited   表示不限制
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 6972
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) 6972
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited限制wang账号同时最大登录数
修改后查看
[root@centos8 ~]#grep wang /etc/security/limits.conf
wang    -   maxlogins   2
在其它终端登录,查看日志
[root@centos8 ~]#tail -f /var/log/secure

实际运用

vim /etc/security/limits.conf  
*    -   core       unlimited
*    -   nproc       1000000
*    -   nofile      1000000
*    -   memlock     32000
*    -   msgqueue    8192000

这篇关于PAM认证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568575

相关文章

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

【Shiro】Shiro 的学习教程(二)之认证、授权源码分析

目录 1、背景2、相关类图3、解析3.1、加载、解析阶段3.2、认证阶段3.3、授权阶段 1、背景 继上节代码,通过 debug 进行 shiro 源码分析。 2、相关类图 debug 之前,先了解下一些类的结构图: ①:SecurityManager:安全管理器 DefaultSecurityManager: RememberMeManager:实现【记住我】功能

OpenStack离线Train版安装系列—3控制节点-Keystone认证服务组件

本系列文章包含从OpenStack离线源制作到完成OpenStack安装的全部过程。 在本系列教程中使用的OpenStack的安装版本为第20个版本Train(简称T版本),2020年5月13日,OpenStack社区发布了第21个版本Ussuri(简称U版本)。 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版

OpenStack Victoria版——3.控制节点-Keystone认证服务组件

3.控制节点-Keystone认证服务组件 更多步骤:OpenStack Victoria版安装部署系列教程 OpenStack部署系列文章 OpenStack Victoria版 安装部署系列教程 OpenStack Ussuri版 离线安装部署系列教程(全) OpenStack Train版 离线安装部署系列教程(全) 欢迎留言沟通,共同进步。 文章目录 创建key

win10系统下openssl证书生成和单向认证

文章目录 前言一、安装openssl二、创建证书目录和必要文件1、创建sslcertTest文件夹2、创建openssl.cnf文件3、创建必要文件 三、创建密钥和证书1、创建根证书私钥ca.key2、创建根证书请求文件ca.csr3、创建自签根证书ca.crt4、创建服务端私钥server.key5、创建服务端证书请求文件server.csr6、创建自签服务端证书server.crt 四、

亚信安慧AntDB数据库与华为DPA数据保护一体机完成兼容性互认证,共筑数据安全与效率新高地

近日,湖南亚信安慧科技有限公司(简称“亚信安慧”)与华为技术有限公司(简称“华为”)完成了亚信安慧AntDB数据库与华为DPA数据保护一体机兼容性互认证。 图1:华为DPA数据保护一体机兼容性互认证 亚信安慧AntDB数据库作为领先的数据库解决方案提供商,专注于数据库产品的研发与创新,以其卓越的性能和稳定性,服务于超数亿用户,连续十年无故障运行。亚信安慧AntDB数据库的云原生分布式架

强化网络安全:通过802.1X协议保障远程接入设备安全认证

随着远程办公和移动设备的普及,企业网络面临着前所未有的安全挑战。为了确保网络的安全性,同时提供无缝的用户体验,我们的 ASP 身份认证平台引入了先进的 802.1X 认证协议,确保只有经过认证的设备才能接入您的网络。本文档将详细介绍我们的平台如何通过 802.1X 协议实现高效、安全的远程接入认证。 产品亮点 1. 无缝集成 我们的 ASP 身份认证平台支持无缝集成到现有的网络基础设施中

当网工,华为认证哪种适合我?四个维度来解惑

随着网络技术的不断进步,对网工的专业技能要求也越来越高。 在这种背景下,获得权威认证成为了提升个人技能、证明专业能力的重要途径。 华为,作为全球领先的ICT解决方案提供商,其认证项目在业界享有极高的声誉。 华为认证不仅涵盖了网络技术的各个方面,还根据不同的技能水平和职业发展阶段,提供了不同级别的认证,包括HCIA、HCIP、HCIE。 这些认证不仅有助于网络工程师提升自己的技术水平,也是企业在招聘

用户认证中的有状态和无状态

背景         我们在系统设计的时候,用户的认证是最基本也是最重要的功能了。我们常见的方案,就是将用户的认证信息保存到 session 里面。由于近年来微服务的快速兴起,一种 JWT 的认证方式出现在了大众的眼中。在单体服务的时代,很多系统设计的都是有状态的服务。随着微服务的出现,大多数系统设计的时候,都开始考虑无状态服务了。那它们的唯一区别,就是服务端是否会保存客户端的信息。简而言之