一、 跳板机思路简介
本文所描述的跳板机(下文称为“jmp”)支持:
- Linux服务器
- Windows服务器
- 其他终端(MySQL终端、Redis终端、网络设备终端 等等)
有别于市面上常见的jumpserver方案,使用本文所搭建的跳板机将不会存储任何Linux服务器的账号、密码、密钥等信息,杜绝了信息泄露的可能。本文最大的特点是借助Linux的PAM机制,通过修改Linux服务器系统层配置,部分接管了Linux系统的身份认证能力,关于这一点,下文将详细描述。
二、背景知识
2.1 Linux 的 PAM 机制
PAM(Pluggable Authentication Modules)机制,是一种广泛应用于当代Unix、Linux发行版的系统层身份认证框架。通过提供一系列动态链接库和两套编程接口(Service Programming Interface 和 Application Programming Interface),将系统提供的服务与该服务的认证方式分离,从而使得可以根据需要灵活地给不同的服务配置不同的认证方式而无需更改服务程序。
2.2 PAM 的核心能力
2.3 PAM 模块类型
- auth
用来对用户的身份进行识别,如:提示用户输入密码,或判断用户是否为root等。
- account
对帐号的各项属性进行检查,如:是否允许登录,是否达到最大用户数,或是root用户是否允许在这个终端登录等。
- session
这个模块用来定义用户登录前的,及用户退出后所要进行的操作,如:登录连接信息、用户数据的打开与关闭、挂载文件系统等。
- password
使用用户信息来更新,如:修改用户密码。
2.4 常见 PAM 模块
- pam_unix.so模块
【auth】提示用户输入密码,并与/etc/shadow文件相比对,匹配返回0(PAM_SUCCESS)。【account】检查用户的账号信息(包括是否过期等),帐号可用时,返回0。【password】修改用户的密码,将用户输入的密码,作为用户的新密码更新shadow文件。
- pam_cracklib.so模块
这个模块可以插入到一个程序的密码栈中,用于检查密码的强度。
- pam_loginuid.so模块
用来设置已通过认证的进程的uid,以使程序通过正常的审核。
- pam_securetty.so模块
如果用户要以root登录时,则登录的tty必须在/etc/securetty中之前。
- pam_rootok.so模块
<pam_rootok模块用来认证用户id是否为0,为0返回PAM_SUCCESS。