堡垒机的进一步改进

堡垒机的进一步改进,第1张

概述上节回顾     ok 我们接着上一步继续改进 上面我们已经能够通过堡垒机成功连接主机了,          现在我们就要去监控运维人员对主机的 *** 作了     我们应该知道我们是通过堡垒机上的ssh 去连接主机的 那在我们的堡垒机上就应该有具体用户的账号,密码以及他管理的主机的信息, 我们在知道Linux中有一个strace命令,用来抓取一个进程的所有 *** 作   那么首先我们要知道我们的程序是运行在 上节回顾

 

 

ok 我们接着上一步继续改进 上面我们已经能够通过堡垒机成功连接主机了,

 

 

 

 

 现在我们就要去监控运维人员对主机的 *** 作了  

 

我们应该知道我们是通过堡垒机上的ssh 去连接主机的 那在我们的堡垒机上就应该有具体用户的账号,密码以及他管理的主机的信息,

我们在知道linux中有一个strace命令,用来抓取一个进程的所有 *** 作  

那么首先我们要知道我们的程序是运行在那个进程下

我们通过 ps -ef 一下然后找到我们的程序

 

 

 

父进程为2504的真是我们 通过ssh远程连接的命令  

我们现在   strace -f -p 2504 -o ssh.log

 监控一下这个进程  我们在通过堡垒机连接上的主机去输入一些命令  

然后我们打开ssh.log 这个文件   就会发下我们输入的命令    

 

 现在我们写一个.py 文件 然后去获取运维人员在这里输入的命令  我们将这个文件写入到backend中

#_*_Coding:utf-8_*_import reclass AuditLogHandler(object):    ‘‘‘分析audit log日志‘‘‘    def __init__(self,log_file):        self.log_file_obj = self._get_file(log_file)    def _get_file(self,log_file):        return open(log_file)    def parse(self):        cmd_List = []        cmd_str = ‘‘        catch_write5_flag = False #for tab complication        for line in self.log_file_obj:            #print(line.split())            line = line.split()            try:                pID,time_clock,io_call,char = line[0:4]                if io_call.startswith(read(4):                    if char == "\177",:#回退                        char = [1<-del]                    if char == "\33OB",: #vim中下箭头                        char = [down 1]                    if char == "\33OA",: #vim中下箭头                        char = [up 1]                    if char == "\33OC",: #vim中右移                        char = [->1]                    if char == "\33OD",: #vim中左移                        char = [1<-]                    if char == "[2;2R",: #进入vim模式                        continue                    if char == "\33[>1;95;0c",:  # 进入vim模式                        char = [----enter vim mode-----]                    if char == "\33[A",: #命令行向上箭头                        char = [up 1]                        catch_write5_flag = True #取到向上按键拿到的历史命令                    if char == "\33[B",:  # 命令行向上箭头                        char = [down 1]                        catch_write5_flag = True  # 取到向下按键拿到的历史命令                    if char == "\33[C",:  # 命令行向右移动1位                        char = [->1]                    if char == "\33[D",:  # 命令行向左移动1位                        char = [1<-]                    cmd_str += char.strip("",)                    if char == "\t",:                        catch_write5_flag = True                        continue                    if char == "\r",:                        cmd_List.append([time_clock,cmd_str])                        cmd_str = ‘‘  # 重置                    if char == ":#space                        cmd_str +=                  if catch_write5_flag: #to catch tab completion                    if io_call.startswith(write(5):                        if io_call == "",: #空键,不是空格,是回退不了就是这个键                            pass                        else:                            cmd_str += char.strip("",)                        catch_write5_flag = False            except ValueError as e:                print("3[031;1mSession log record err,please contact your IT admin,3[0m",e)        #print(cmd_List)        for cmd in cmd_List:            print(cmd)        return cmd_Listif __name__ == "__main__":    parser = AuditLogHandler(ssh.log)    parser.parse()
VIEw Code

 

 大家优有没有发现一个问题  emmmmm  

哈哈  我们现在是可以记录运维人员的输入的命令 和时间了 但是我们不知道是谁输入的命令,那么我们该怎么办呢  

我们这个命令是怎么记录的 我们是通过  抓取进程 然后记录这个进程的 *** 作 

我们知道我每当一个用户通过堡垒机去连接主机就会起一个进程 我们就可以通过分析这个进程然后去判断是有那个运维人员去连接的 

ok  接下来我们就去分析如何去通过进程去判断是有那个运维人员去连接的

我们是通过ssh去远程连接主机的 那么 就给ssh 连接时  加一个标识符   

 

 类似这样 然后我们去分析标识符 去判断是那个运维人员去连接的  

那么我就需要修改 ssh 源码 具体 *** 作如下  

 

我么打开 openssh 然后找到ssh.c 

 

 

 

 

 

 ok  -Z asdf 就是我们的标识符  哈哈哈  大家记得 在虚拟机上一定要装两个Ubuntu哦 否则本机连本机 标识符 会没有效果

现在将我们的标识符添加到我们的user_loginPoint.py上

 

 然后我们通过堡垒机账号登录成功之后就会发现我们的标识符 

 现在我们有这个标识符了

我们接下来就写一个shell程序去检测这个标识符

 

 1 #!/bin/bash 2  3  4  5 #echo #print  6 #echo    7 md5_str=$1 8  9 for i in $(seq 1 30);do10 11    ssh_pID=`ps -ef |grep $md5_str |grep -v grep |grep -v session_tracker.sh|grep -v sshpass |awk {print }` 12    echo "ssh session pID:$ssh_pID"  13    if [ "$ssh_pID" = "" ];then14       sleep 115       continue16    else17         today=`date  "+%Y_%m_%d"`18         today_audit_dir="logs/audit/$today"19         echo "today_audit_dir: $today_audit_dir"20         if [ -d $today_audit_dir ]21         then22             echo " ----start tracking log---- "23         else24             echo "dir not exist"25             echo " today dir: $today_audit_dir"26             sudo mkdir -p $today_audit_dir27         fi;28         echo 123 | sudo -S /usr/bin/strace -ttt -p $ssh_pID -o "$today_audit_dir/$md5_str.log"29       break30    fi;31 32 33 34 done;
VIEw Code

在settings中配置调用路径

 顺便再配置一个存放日志的目录

 

 

 然后再在user_loginPoint.py中调用

 

 

 

 把这个文件放在backeng目录下

 

我们梳理一下这个程序的执行过程

 

 

切换到root账户下

vim etc/sudoers 

 

如果大家不知道自己的root密码 那就进入Ubuntu的单用户模式去修改 

现在运维人员登录堡垒机就 *** 作主机我们就可以对他的 *** 作进行记录了  

但是现在我们在日志中只能看见的是时间和 *** 作命令 没有堡垒机用户和主机 但是我们在user_loginPoint中已经获取了 堡垒机用户和主机 

 首先我们在数据创建一个存储session的表

class SessiongLog(models.Model):    """存储session日志"""    user = models.ForeignKey("UserProfile",on_delete=True)    bind_host = models.ForeignKey("BindHost",on_delete=True)    session_tag = models.CharFIEld(max_length=128)    data = models.DateTimeFIEld(auto_Now_add=True)    def __str__(self):        return self.session_tag
VIEw Code

 

 

然后在user_loginPoint.py中去获取并存储session

 

 记得在settings中配置路径

 

 然后改进一下前面写的shell脚本 

 

 网上白嫖的   我也看不懂

将这些程序装到我们的linux中后大家会发现

有很多命令不能执行 这是因为  有些命令 权限不够 

在shell脚本中的mkdir 需要配置权限 好像是mkdir 创建目录是需要 sudo权限   

 

 还有 要将Eat_bee_dung目录的属主权限修改成eat_bee_dung用户的 

现在在python中运行 我们的程序 就可以了 

 

总结

以上是内存溢出为你收集整理的堡垒机的进一步改进全部内容,希望文章能够帮你解决堡垒机的进一步改进所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1023016.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存