复习linux——PAM认证机制

发布时间:2023年12月23日

PAM只关注如何为服务验证用户的API,通过提供一些动态链接库和一套统一的API,将系统提供的服务和该服务的认证方式分开
PAM提供了对所有服务进行认证的中央机制,适用于本地登陆,远程登陆,系统管理员通过PAM配置文件来定制不同应用程序的不同认证策略。

PAM相关文件

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

查看程序是否支持PAM

ldd 'which sshd' | grep libpam

ldd命令

ldd命令全称为list dynamic dependencies(列出动态依赖)。它可以用来显示一个可执行文件或者共享库(动态链接库)所依赖的共享库。
命令格式:ldd [选项] <可执行文件或共享库>
输出:
=> 文件路径:正常找到并链接。
=> not found:未找到该库文件。
=> version mismatch:版本不匹配。
=> incompatible:与可执行文件或其他库不兼容。
=> symbol not found:找不到某个符号。

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)->PAM(配置文件)->pam_*.so
PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件进行安全认证(位于/lib64/security)

PAM配置文件格式说明

配置文件格式

通用配置文件/etc/pam.conf格式,此格式不使用
application??? type??? control???? module-path???? arguments
专用配置文件/etc/pam.d格式
type?? control??? module-path??? arguments
注:修改PAM配置文件将马上生效

说明

application:服务名

type:模块类型

control:PAM该如何处理与该服务相关的PAM模块的成功或失败情况

required:一票否决,表明本模块必须返回成功才能通过认证,若失败则等同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序
requisite:一票否决,该模块必须返回成功才能通过认证,若失败则不再则同一type中所有模块不再执行
sufficient:一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其他模块,但返回失败则忽略,优先于required和requisite
optional:表明模块是可选的,他的成功与否不会对身份认证起关键作用
include:调用其他的配置文件中定义的配置信息

module-path:本模块对应的程序文件的路径名

Auth账号的认证和授权
Account账户的有效性,与账号管理相关的非认证类的功能
Password用户修改密码时密码复杂度检查机制等功能
Session用户会话期间的控制
-type表示因为缺失而不能加载的模块将不记录到系统日志

Arguments:用来传递给模块的参数

debug:该模块应当用syslog将调试信息写入到系统日志文件中
no_warn:表明该模块不应把警告信息发送给应用程序
use_first_pass:该模块不能提示用户输入密码,只能从前一个模块的到输入密码
try_first_pass:该模块首先用一个模块从用户的到密码,如果该密码验证不能通过,再提示用户输入新密码
use_mapped_pass:该模块不能提示用户输入密码,而是使用映射过的密码
expose_account:允许该模块显示用户的账号名等信息,一般只能在安全的环境下使用

常用PAM模块

pam模块文档说明:/usr/share/doc/pam-*

pam_nologin.so模块
功能:如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆
pam_limits.so模块
功能:在用户级别实现对其可使用的资源的限制
pam_google_authenticator模块
功能:实现SSH登陆的两次身份验证,先验证APP的数字码,在验证root用户的密码,都通过才可登陆

ulimit命令

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制
ulimit的设定值是per-process,每个进程有自己的limits值
使用ulimit进行修改,立即生效
ulimit只影响shell进程及其子进程,用户登出后失效,可以在profile中加入ulimit的设置,做到永久生效

配置文件

pam_limit的设定基于per-process的
/etc/security/limits.conf
/etc/security/limits.d/*.conf

配置文件格式
<domain>??? <type>??? <item>???? <value>
说明
应用于对象
Username 单个用户?? @group组内所有用户? *所有用户?? %仅用于限制maxlogins limit

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

限制的资源
nofile 所能够同时打开的最大文件数量
nproc 所能够同时运行的进程的最大数量

文章来源:https://blog.csdn.net/qq_54363472/article/details/135166059
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。