用户堡垒跳板机实现——架构实现

跳板机  时间:2021-01-30  阅读:()

堡垒跳板机实现——架构实现http://www.yunyo ub ar.c o m/邮件群发

总述

这是关于堡垒机实现的第二篇文章主要阐述三层架构分别如何实现包括第一层&第二层的设计与实现 即用户登录堡垒机的入口&授权验证 第三层如何通过ldap来统一管理服务器账号权限。

关于堡垒机三层架构可以参见前一篇blog堡垒跳板机实现——整体架构登录入口

先说第一层这层的主要功能为检测用户是否有使用堡垒机的权限。这个很好理解总不能来个匿名用户就可以让他随意使用堡垒机虽说在二层授权验证这里可以有效的抵挡但是既然可以在第一层有效的对无效用户做快捷的拦截为什么要放后呢?

验证的方式可以有很多种 比如如果用linux用作第一层架构中的服务器那么可以天然的使用linux的us er auth作为检验机制单纯为有使用权限的用户在服务器上adduser单独创建一个唯一的32位的密码。

服务器定制

我们在这层的做法是将用户验证与我们内部的动态Token服务相结合(类似goo gleauthenticator) 同时还要提供友好的登录shell界面这样的话单纯的使用user auth就不太能够达到我们的目的这里我们对一层服务器做了ss h登录a ll permit定制修改/etc/p a m.d/s s hd:

1. auth required pam_permit.so

2. account required pam_permit.so

3. password required pam_permit.so

4. session required pam_permit.so

开启sshd的pam认证修改sshd_config:

1. UsePAM yes

然后重启sshd

1. /etc/ini.d/sshd restart

同时将用户对应的默认login shell改为我们自定义的。

代码结构

放上我们的代码结构主要结构如下

功能描述

接下来对上述文件做下功能描述

 login-shell:用户的login shell调用sdshell验证用户的login passwd初始化用户的监控日志路径并开启监控。

 sdshell读取用户的login passwd并判断验证结果 以exit code来对表示验证结果 0表示验证成功 1表示验证失败 2表示ro o t用户登录并且验证成功。

 ms he ll验证用户pass wd成功能循环调用gateway-s he ll来读取用户的action操作选择并执行。

 ga teway-s he ll提供给用户操作c li界面供用户选择操作。

调用顺序为

1. login_shell(入口) -> sdshell(判断PIN+TOKEN) -> mshell -> gateway-shell(判断/获取用户选项)

代码解读lo gi n_s he ll:

当用户登录时首先进入到这里进行验证

1. 1 #! /bin/bash

2. 2

3. 3 WORKDIR=`dirname $0`

4. 4 source $WORKDIR/sentry.env

5. 5 BINDIR="$WORKDIR"

6. 6 #LOGDIR="/data0/logdir"

7. 7

8. 8 #1,验证token

9. 9 $BINDIR/sdshell

10. 10 sdstats=$?

11. 11 #sdstats=0

12. 12

13. 13 # 当sdshell返回为0时表示当前用户登录成功

14. 14 # 当sdshell返回为1时表示当前用户验证失败

15. 15 # 当sdshell返回为2时表示root登录成功

16. 16 if [ [ $sdstats -eq 1 ] ] ;then

17. 17 exit 1

18. 18 elif [ [ $sdstats -eq 2 ] ] ;then

19. 19 /bin/bash

20. 20 exit 0

21. 21 fi

22. 22

23. 23 #2, gen_log_dir

24. 24 user=`/usr/bin/whoami`

25. 25 if [ ! -d $LOGDIR/$user ] ;then

26. 26 mkdir -p $LOGDIR/$user

27. 27 chown -R $user $LOGDIR/$user

28. 28 chmod a+w $LOGDIR/$user

29. 29 fi

30. 30

31. 31 #3, param

32. 32 lip=`/usr/bin/env|grep SSH_CONNECTION|cut -f 2 -d =|cut -f 1 -d ' ' `

33. 33 now=`date '+%F-%k:%M:%S' |tr -d " " `

34. 34 user=`/usr/bin/whoami`

35. 35 sip=`/usr/bin/env` |grep SSH_CONNECTION|cut -f 2 -d =|cut -f 3 -d ' '

36. 36

37. 37 #4, begin script

38. 38 export TMOUT=10

39. 39 export SHELL=$BINDIR/mshell

40. 40 /usr/bin/script -q -t 2>$LOGDIR/$user/$user-$lip-$sip-$now.time -f $LOGDIR/$user/$user-$lip-$sip-$now.txt

其中 3-5行做基本的环境变量初始化第9行调用sdshe ll验证用户输入的动态码的验证结果 即用户在这时进入到sdshell做验证此时就可以随意对sdshell做功能定制了我们实现的功能定制界面类如

是不是比较酷炫~~

当一切都验证完毕我们进入到lo gin_shell第24-35行初始化用户行为日志记录的初始化。

我们这里使用linux自带的s cr ip t命令做用户的记录操作简单有效到没有朋友啊有木有! !

最后39-40两行将用户的she ll指向ms he ll  同时开始记录用户行为。ms he ll

现在用户的行为已经进入到这里说明这个用户通过了第一层校验现在需要他进行相关action操作。

1. 1 #! /bin/bash

2. 2

3. 3 WORKDIR=`dirname $0`

4. 4 source $WORKDIR/sentry.env

5. 5 user=`/usr/bin/whoami`

6. 6 GWDIR=$WORKDIR

7. 7 privatekey=$RSAFILE

8. 8 mkdir /home/$user/.ssh 2>/dev/null

9. 9 cat $privatekey > /home/$user/.ssh/id_rsa

10. 10 chmod 600 /home/$user/.ssh/id_rsa

12. 12 while true

13. 13 do

14. 14 clear

15. 15 $GWDIR/gateway-shell

16. 16 gsstats=$?

17. 17

18. 18 #返回值说明

19. 19 # 0表示正常要登录了

20. 20 # 1表示立即quit

21. 21 # 2表示因为超时而quit

22. 22 # 3表示登录本地服务器

23. 23 #其他未异常

24. 24 case $gsstats in

25. 25 0)

26. 26 ssh -2 -i ~/.ssh/id_rsa -l $user `cat $ACTIONDIR/$user.action`

27. 27 ; ;

28. 28 1)

29. 29 exit

30. 30 ; ;

31. 31 2)

32. 32 echo "action timeout"

33. 33 exit

34. 34 ; ;

35. 35 3)

36. 36 /bin/bash

37. 37 ; ;

38. 38 *)

39. 39 echo "error"

40. 40 sleep 2

41. 41 ; ;

42. 42 esac

43. 43 done

3-10行环境初始化然后开启循环监听用户输入的action为用户展示可使用的action list以及判断用户是否有对应操作的权限则都是第15行的mshell来进行操作之后同样根据exit code来执行相关的动作。

对于ms he ll  同样可以自行设计相关的功能我们设计的s he ll操作界面如下

同样酷炫有木有!

一层架构总结

此时一层架构中的流程实现基本完成剩下的就是具体控制登录服务器的技术管理工作 即第三层的工作了稍后为大家分享。

再次总结下一层架构中的调用关系

1. login_shell(入口) -> sdshell(判断PIN+TOKEN) -> mshell -

> gateway-shell(判断/获取用户选项)

咦好像缺少第二层的说明?

其实第二层主要做actio n行为授权&校验工作还记得gateway-s he ll的作用吗“为用户展示可使用的action list以及判断用户是否有对应操作的权限”

在这里ga tewa y-s he ll通过ap i与第二层做交互对用户的行为及授权范围作了操作具体交互的功能包括

 搜索服务器信息;

 获取用户有权限的服务器lis t;

 获取用户有权限的服务器Group list;

 获取服务器Group下的s erver list;

 获取当前所有有权限的user list

具体怎么实现?相信1000个工程师有1001中不同的做法这里就不在阐述~如何统一管理服务器的登录账号

接入我们有1000台服务器有100个人需要统一管理哪些账号可以登录哪些服务器哪些账号在哪些服务器上可以sud o哪些命令。

问题抛出来了下面就是如何解决它。

单刀直入的方案我为每个服务器根据需要创建对应的人的账号在分别配置sudoe r的权限。缺点就不说了改个配置能累死人。 。 。 。 。

所以我们最好能有个地方能够统一来配置

 创建一个人的账号后那么这个人就能登录所有的服务器;

 管理这个人的登录服务器的范围;

 为这个人分配统一的sud o权限及在哪些目标服务器上有执行哪些命令的sudo权限;

上述的需求可以通过服务器接入ldap通过ldap管理在实现上述的需求。

具体的过程这里不再累赘可以参见网上的博文还是挺多的 比如

使用OpenLDAP集中管理用户帐号

基于PAM的LDAP用户身份验证

这里只贴上完成后类似的ldap结构

1. [root@testldap openldap]# ldapsearch -x -LLL -

D "cn=admin,dc=lianjia,dc=com" uid=test -W

2. Enter LDAP Password:

3. dn: uid=test,ou=people,dc=lianjia,dc=com

4. objectClass: posixAccount

5. objectClass: shadowAccount

6. objectClass: person

7. objectClass: inetOrgPerson

8. objectClass: ldapPublicKey

9. cn: System

10. sn: li

11. givenName: test

12. displayName: test

13. uid: test

14. userPassword: : testpasswd

15. uidNumber: 1001

16. gidNumber: 1001

17. gecos: System Manager

18. homeDirectory: /home/test

19. shadowLastChange: 16020

20. shadowMin: 0

21. shadowMax: 999999

22. shadowWarning: 7

23. shadowExpire: -1

24. employeeNumber: 20248353

25. mobile: 18519199234

26. mail: 654306390@qq.com

27. postalAddress: beijing

28. initials: test

29. loginShell: /bin/bash

30. sshPublicKey: ssh-rsa Axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx32x9jF5cFDqkti

TQIdD9

31. PMq8b86v2p8Es4us7OTzo7XomcjEPpfP/Realy9BOuteohA4JzezrAyFQhJui6BdovkzhnVRyFERJ

32. uTA/19biQkCZB91XrWxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxJXH+f 0

33. VOvx5FiF0bV3IfJt32cdmI8O7hNI+ttPCQ4V1R8vr0wIhCmUcKzD5vOx+0H9B1EY4d/imSxFHIebe

34. 4l//rthyAr3x0XmNvuFD9khqfDK7bmXnHu26s++O8A1SDJ5beuu4xXl/mN8mc5WPmoQQSj IzruWPa

35. jLx8m6HF root@channel.lianjia.com

这样对于此用户就可以通过passwo rd或者p ub lickey的方式登录服务器 同理也可以对sudo进行类似的管理还是真心强大的。

Vultr新用户省钱福利,最新可用优惠码/优惠券更新

如今我们无论线上还是线下选择商品的时候是不是习惯问问是不是有优惠活动,如果有的话会加速购买欲望。同样的,如果我们有准备选择Vultr商家云服务器的时候,也会问问是不是有Vultr优惠码或者优惠券这类。确实,目前Vultr商家有一些时候会有针对新注册用户赠送一定的优惠券活动。那就定期抽点时间在这篇文章中专门整理最新可用Vultr优惠码和商家促销活动。不过需要令我们老用户失望的,至少近五年我们看到Vu...

RackNerd 2022春节促销提供三款年付套餐 低至年付10.88美元

RackNerd 商家我们应该是比较熟悉的商家,速度一般,但是人家便宜且可选机房也是比较多的,较多集中在美国机房。包括前面的新年元旦促销的时候有提供年付10美元左右的方案,实际上RackNerd商家的营销策略也是如此,每逢节日都有活动,配置简单变化,价格基本差不多,所以我们网友看到没有必要囤货,有需要就选择。RackNerd 商家这次2022农历新年也是有几款年付套餐。低至RackNerd VPS...

BGP.TO日本和新加坡服务器进行促销,日本服务器6.5折

BGP.TO目前针对日本和新加坡服务器进行促销,其中日本东京服务器6.5折,而新加坡服务器7.5折起。这是一家专门的独立服务器租售网站,提供包括中国香港、日本、新加坡和洛杉矶的服务器租用业务,基本上都是自有硬件、IP资源等,国内优化直连线路,机器自动化部署上架,并提供产品的基本管理功能(自助开关机重启重装等)。新加坡服务器 $93.75/月CPU:E3-1230v3内存:16GB硬盘:480GB ...

跳板机为你推荐
视频制作软件哪个好哪款视频编辑软件比较好用?骁龙750g和765g哪个好骁龙730G和骁龙835、联发科Helio G90T哪个更好?杀毒软件哪个好什么杀毒软件最好?录屏软件哪个好有什么好用的录制屏幕的软件吗游戏加速器哪个好大家玩游戏用的都是什么加速器啊,哪个效果最好朗逸和速腾哪个好朗逸跟速腾的最大区别在哪朗逸跟速腾买那个好ps软件哪个好哪个PS软件最好用(适合初学者用)?手机管家哪个好手机管家哪个软件好手机炒股软件哪个好什么手机炒股软件好用,你们都用哪个雅思和托福哪个好考托福、雅思哪个好考?
linode日本 赵容 息壤主机 国外php主机 流媒体服务器 godaddy ibox官网 免费phpmysql空间 优酷黄金会员账号共享 联通网站 移动服务器托管 独享主机 免费asp空间 监控服务器 中国linux 工信部网站备案查询 百度云空间 谷歌台湾 阿里云邮箱个人版 香港博客 更多