城市介绍网站模板,西安网站制作培训,分析苏宁易购网站内容建设,环球贸易网官网Linux安全认证隐匿插件#xff1a;PAM配置探秘
初遇PAM#xff1a;踏入未知领域
案例#xff1a;
现网环境升级总是报错端口已被占用#xff0c;原因是执行升级包中的一条命令时#xff0c;返回多了一条日志打印#xff0c;导致升级包中解析命令执行结果错误 当时是第…Linux安全认证隐匿插件PAM配置探秘
初遇PAM踏入未知领域
案例
现网环境升级总是报错端口已被占用原因是执行升级包中的一条命令时返回多了一条日志打印导致升级包中解析命令执行结果错误 当时是第一次遇到这个问题谁也不知道这条日志是系统在哪里配置打印的。 只能通过strace跟踪看看执行这条命令时进行了哪些系统调用最后通过对比其他正常环境strace的结果发现在打印Last Login之前对比正常环境多执行了postlogin 简单的去搜索了一下pam.d下配置文件的作用发现pam是linux的一个可插拔的认证模块通过pam.d下的配置可在不同的功能应用模块设置认证障碍。而postlogin的作用是配置在用户完成登录并且会话模块完成之后执行的一些操作 查看/etc/pam.d/postlogin.发现在postlogin配置了lastlog的pam模块用于记录用户上次登录时间和来源 那为什么sudo命令会加载这个插件呢 在/etc/pam.d目录下搜索了一下postlogin发现还挺多的。此时还不知道是到底是哪个配置文件下的postlogin导致了这行日志打印 只能再通过strace -e traceopen sudo ls 这里主要是观察sudo命令加载的认证插件继续追踪 对比之下发现是system-auth这个配置文件。
原来这个文件的作用是定义系统上的默认身份验证规则和策略。调用 sudo 命令时会读取 /etc/pam.d/system-auth 文件是因为 sudo 是一个需要身份验证的特权管理工具。在执行 sudo 命令时sudo 命令需要读取 /etc/pam.d/system-auth 文件以获取系统的默认身份验证规则和策略以确定用户是否有权限执行请求的操作。
解决方案
方案1 注释掉 /etc/pam.d/system-auth中session include postlogin
方案2注释掉/etc/pam.d/postlogin 中的session [default1] pam_lastlog.so nowtmp showfailed PAM详解揭开神秘面纱
PAM简介
PAM全称是Pluggable Authentication Modules可插拔认证模块设计初衷是将不同的底层认证机制集中到一个高层次的API中省去开发人员自己去设计和实现各种繁杂的认证机制的麻烦。 比如对于常用命令su 在执行时需要做两件事认证和启动相应的shell。 对于认证功能开发人员一开始可能会判断当前用户是不是root如果不是root的则要求输入 密码。这个逻辑并不复杂容易开发。
但可能过了几天用户提出运维团队都属于wheel组是否能让wheel组不用输入密码使用su切换。
等等认证的需求可能各式各样如果每个命令都要去关注认证那linux开发人员不仅不能专注自己业务模块而且还会出现“重复造轮子”的情况。 所以伟大的PAM功能模块就出现了。 PAM的基础配置
Linux系统中每个支持pam的服务都有一个与之对应的配置文件在/etc/pam.d/目录下 而支持这些配置的各个认证模块默认在/lib/security 或者/lib64/security目录下以动态库文件的形式存在 /etc/pam.d/下配置文件的语法格式 模块类型TypePAM 配置文件中的每一行通常包含一个模块类型指定了该行描述的模块在何时被调用。常见的模块类型包括 auth身份验证、account账户、password密码、session会话。
控制标记Control Flags在模块类型后面可能会有一个或多个控制标记用于指定模块的行为。常见的控制标记包括
required该模块必须成功才能继续进行认证过程。
requisite如果该模块失败认证过程将立即失败且不会继续进行其他模块的认证。
sufficient如果该模块成功则认证过程将成功且不会继续进行其他模块的认证。
optional无论该模块成功或失败认证过程都将继续进行。
include: 将其他配置文件中的流程栈包含在当前的位置
substack运行其他配置文件中的流程并将整个运行结果作为该行的结果进行输出。
模块路径和参数在控制标记后面可以指定模块的路径和参数。路径指定了要使用的 PAM 模块的名称或路径参数则是传递给模块的额外选项。
上述案例中其实也可以看出cat /etc/pam.d/sudo include了 system-auth模块所以才会调用/etc/pam.d/system-auth配置中的postlogin。 PAM支持的认证插件
可以通过“man 模块”获取官方文档进行查看。此处不再赘述 再遇PAMssh秘钥登录缓慢密码登录正常
案例
产品部署失败因为使用秘钥连接worker节点缓存需要接近30s导致节点认证失败
思路使用traceroute和mtr排除了网络问题怀疑是ssh的配置导致秘钥登录的方式过于缓慢但是对比了现网环境和正常环境的ssh配置发现也并无差异。 查看系统日志由于环境开启了auditd审计日志所以系统日志可能打印得比较多先过滤ssh
tail -f /var/log/messages | grep ssh 锁定这个时间段的日志这是ssh开始到ssh成功结束的日志再vim查看发现在ssh期间一直在通过PAM插件进行session open 和session close 跟会话相关的PAM插件是pam_systemd.so 负责在会话期间创建和关闭 systemd 作用域。
搜索/etc/pam.d/下是否配置了pam_systemd.so 发现在/etc/pam.d/password-auth中配置了并且在/etc/pam.d/sshd中也include了password-auth 推测是 SSH 在每次进行认证时都会触发 PAM 模块的执行这样会导致不断触发 pam_systemd.so 创建和关闭会话并且记录审计日志导致连接缓慢。
解决方案
在/etc/pam.d/password-auth注释掉-session optional pam_systemd.so
注释掉后ssh秘钥登录响应时间立马从30s变成1s内连接期间审计日志也不再重复打印session open和session close的审计日志了
总结
这些问题排查的难点是
问题出在不了解的领域时很难想到特别是系统层面。遇到问题在业务层面没有思路了时strace和系统日志是很好的工具因为所有的程序都是从业务层再到系统再到硬件的有时还涉及到网络这是一条完整的链路。根据完整的链路再逐个去查询单个的知识点了解整个过程那就没有什么问题可以难倒你了。