安全运维-云计算系统安全
PAM介绍
PAM(Pluggable Authentication Modules)即可插拔式认证模块。
它是一种高效且灵活的用户级别的认证方式,广泛应用于当前Linux服务器中作为主要的认证机制。
PAM允许系统管理员通过配置不同的认证模块来实现对用户的网段、时间、用户名、密码等多方面的认证。
使用PAM进行身份认证的服务:
本地登录服务:如
login
、gdm
(GNOME显示管理器)、kdm
(KDE显示管理器),这些服务用于本地用户登录。远程登录服务:如
sshd
(SSH守护进程),用于提供安全的远程登录功能。文件传输服务:如
vsftpd
(虚拟安全FTP守护进程),用于文件传输过程中的用户认证。网络共享服务:如
samba
,用于Windows与Linux之间的文件和打印机共享。
不使用PAM进行身份认证的服务:
数据库服务:如
MySQL-Server
,其用户认证通常由自身的权限管理系统处理。监控服务:如
Zabbix
,其认证机制独立于PAM,通常依赖于内置的用户管理和认证功能。
可以通过浏览器查看详细的PAM文档:
firefox /usr/share/doc/pam-1.1.8/html/Linux-PAM_SAG.html
PAM认证流程
PAM认证流程通常包括以下几个步骤:
服务请求:当用户试图访问一个受保护的服务时(如SSH登录),该服务会调用相应的PAM API来启动认证过程。
加载配置文件:服务程序根据其配置文件中的定义加载对应的PAM模块。
每个服务都有自己的PAM配置文件,位于
/etc/pam.d/
目录下。执行认证:PAM按照配置文件中指定的顺序依次调用各个模块进行认证。
这些模块可能涉及密码验证、账户有效期检查、会话设置等多个方面。
返回结果:所有模块执行完毕后,PAM将最终的认证结果(成功或失败)返回给原始的服务程序。
在 PAM 配置文件中(如
/etc/pam.d/sshd
或/etc/pam.d/login
),规则是按顺序从上到下依次执行的,并且它们的作用是 叠加的,但具体是否继续执行、是否认证成功,取决于每个模块的 控制标志(control flag) 和 返回结果。
认证类型
认证类型 | 功能描述 | 作用 | 操作 |
---|---|---|---|
auth | 验证用户身份,如检查用户名和密码是否正确 | 确保用户提供的身份信息是正确的 | 使用pam_unix.so 模块进行传统账号密码认证 |
account | 控制用户访问权限,如账户过期、时间限制等 | 防止过期账户或密码被使用 | 使用pam_access.so 模块基于IP地址限制登录 |
password | 管理密码策略,如复杂度检查、历史密码限制 | 防止暴力破解攻击,提高密码安全性 | 使用pam_cracklib.so 模块强制设置强密码 |
session | 管理会话,如日志记录、资源限制 | 监控用户行为,防止滥用系统资源 | 使用pam_limits.so 模块限制最大进程数 |
流程控制标记
流程控制标记 | 描述 | 特点 | 案例 |
---|---|---|---|
required | 验证失败时仍然继续执行后续模块,但最终返回fail | 用户不会知道具体哪个模块失败 | 在SSH服务中使用pam_access.so 限制特定IP登录 |
requisite | 验证失败时立即结束整个验证过程,返回fail | 效率高,一旦某个关键模块失败则立即终止 | 在登录过程中使用pam_nologin.so 阻止非root用户登录 |
sufficient | 验证成功则立即返回,不再继续执行后续模块;否则忽略结果并继续 | 如果某项条件已经足够证明用户身份,则无需再进行其他验证 | 使用pam_rootok.so 允许root用户直接切换到其他用户 |
optional | 无论验证结果如何均不会影响最终结果 | 常用于session类型,提供额外的信息或功能 | 使用pam_lastlog.so 记录用户的最后登录时间 |
include | 包含另一个配置文件中相同类型的行 | 用于简化配置,避免重复编写相同的模块配置 | 在/etc/pam.d/sshd 中包含password-auth 配置文件 |
substack | 垂直叠加一个模块栈嵌入到另一个模块栈中 | 形成更复杂的认证逻辑 | 在多因素认证中,将多个模块组合在一起进行验证 |