出于安全考虑,大多数公司的办公环境和业务环境在网络层面基本上是隔离开的,在办公环境是无法直接连到业务生产环境的,只有做过特定白名单通行的情况下才会允许这么做。这样做了,开发人员需要访问生产环境服务器排查问题或者运维人员通过办公网络对生产环境进行维护就不太方便,但是网络一旦开通又会出现安全风险。
在这种情况下,就需要一种可以控制网络入口,能够统一授权,认证的系统,这样运维跳板机,也就是比较严格意义上的AAAA认证系统就出现了。
所谓的4A认证系统其实是指:
统一用户账号(Account)
统一认证(Authentication)
统一授权(Authorization)
统一安全审计(Audit)
我们公司使用的是openldap(管理用户信息,同时实现资源访问控制),Kerberos(网络鉴权),google authenticator(二次认证的动态口令),bash (修改源码,实现账户远程登录操作
日志记录)
系统环境: 64位 CentOS linux 6.3
openldap+bdb+phpldapadmin
openldap:
master端:yum 安装
openldap
openldap-clients
openldap-servers
nss_ldap
客户端:yum方式
openldap
nss_ldap
slapd.conf配置文件修改:
系统加入ldap认证:
打开ldap服务日志:
syslog中加入ldap日志文件
客户端修改 /etc/ldap.conf
Openldapadmin配置
登录phpldapadmins,设置的登录密码(hehehehhe,qunying.liu)登录
Kerberos:
Kerberos认证协议
Kerberos是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。
使用Kerberos时,一个客户端需要经过三个步骤来获取服务:
认证:客户端向认证服务器发送一条报文,并获取一个含时间戳的Ticket-Granting Ticket(TGT)。
授权:客户端使用TGT向Ticket-Granting Server(TGS)请求一个服务Ticket。
服务请求:客户端向服务器出示服务Ticket,以证实自己的合法性。该服务器提供客户端所需服务,在Hadoop应用中,服务器可以是namenode或jobtracker。
为此,Kerberos需要The Key Distribution Centers(KDC)来进行认证。KDC只有一个Master,可以带多个slaves机器。slaves机器仅进行普通验证。Mater上做的修改需要自动同步到slaves。
另外,KDC需要一个admin,来进行日常的管理操作。这个admin可以通过远程或者本地方式登录。
搭建Kerberos
1.安装:通过yum安装即可,组成KDC。
2.配置:Kerberos的配置文件只有两个。在server1中创建以下两个文件,并同步/etc/krb5.conf到所有机器。
/var/kerberos/krb5kdc/kdc.conf:包括KDC的配置信息。默认放在 /usr/local/var/krb5kdc。或者通过覆盖KRB5_KDC_PROFILE环境变量修改配置文件位置。
/etc/krb5.conf:包含Kerberos的配置信息。例如,KDC的位置,Kerberos的admin的realms 等。需要所有使用的Kerberos的机器上的配置文件都同步。这里仅列举需要的基本配置。详细介绍参考:krb5conf:http://web.mit.edu/~kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html
A.初始化数据库:在server1上运行命令。其中-r指定对应realm。
B.启动kerberos。如果想开机自启动,需要stash文件。
至此kerberos,搭建完毕。
测试kerberos,搭建完毕后,进行以下步骤测试Kerberos是否可用。
A. 进入kadmin在kadmin上添加一个超级管理员账户,需要输入passwd
B. 在其它机器尝试通过kadmin连接,需要输入密码
如果能成功进入,则搭建成功。
kerberos日常操作
管理员操作
登录到管理员账户: 如果在本机上,可以通过kadmin.local直接登录。其它机器的,先使用kinit进行验证。
增删改查账户:在管理员的状态下使用addprinc,delprinc,modprinc,listprincs命令。使用?可以列出所有的命令。
查看当前的认证用户:klist
google authenticator:
基于TOTP(Time-based One-time Password,基于时间的一次性密码)
TOTP(基于时间的一次性密码算法)是支持时间作为动态因素基于HMAC一次性密码算法的扩展。
http://tools.ietf.org/html/rfc6238
条件:
1)Prover与Verifier之间必须时钟同步;
2)Prover与Verifier之间必须共享密钥;
3)Prover与Verifier之间必须使用相同的时间步长
算法:
K 共享密钥
T 时间
T0 开始计数的时间步长
X 时间步长
TOTP = Truncate(HMAC-SHA-1(K, (T - T0) / X))
使用Google Authenticator的步骤:
1. 服务器端对每个用户生成一个唯一的密钥SecretKey。
2. 用户在手机上安装Google Authenticator。首次使用需要将密钥输入到Google Authenticator。可通过手动和扫描系统生成的二维码等两种方式输入密钥信息。
3. Google Authenticator每隔一段时间为系统自动生成一个新的密码。用户在输入口令前需先输入生成的动态验证码。
客户端实现
python实现:
ruby实现:
跳板机登录增加谷歌二次认证
Google Authenticator模块安装:
2.源码安装:
设置Google Authenticator
运行 /usr/local/bin/google-authenticator
会在当前帐号home目录下生成相关配置文件。
安装完成之后运行google-authenticator命令
首先会提示你,是否要基于时间生成令牌,选择Y,然后它会生成密钥,以及紧急状态使用的验证码(有5个,谨当无法获取验证码时使用,注意这些紧急验证码用一次就少一个的哟,所以这几个紧急验证码一定要保存好。
sshd配置加入谷歌认证模块:
本地网络登录帐号跳过谷歌认证模块设置:
/etc/pam.d/sshd 增加
允许192.196.0.0网段的用户登录帐号时跳过谷歌认证步骤。
整个跳板机部署完毕后,用户如何登录对于很多开发人员完全未知,站在用户的角度我们进行了一次内部分享,对如何登录跳板机做了简要说明。
当然较于现在出现的比较高大上的堡垒机而言,运维跳板机的功能还是相当简单,只实现了用户信息和权限管理的统一,同时也只是事后的安全审计,目前还不能事前控制以避免人员的误操作。堡垒机一般支持的协议有图形(RDP/VNC/X11)、字符(SSH/TELNET)、文件(FTP/SFTP)和一些数据库协议(MySQL、Oracle)等等。除此之外,除了未实现高端的图形界面显示和一些比较人性化的交互功能外,目前大部分的功能(比如单点登录,审计,帐号管理,操作也可以定位到来源和人员)我们都是具有的。
基于信息安全考虑,必要信息做了修改处理,仅供参考,请勿直接黏贴使用。
时间同步,与权限信息同步未做说明。
相关参考:
http://www.howtogeek.com/121650/how-to-secure-ssh-with-google-authenticators-two-factor-authentication/
有关ldap与ad同步问题讨论:http://bbs.csdn.net/topics/340139712