openssh 源码更改实现记录日志功能及动态回放思路
来源:互联网 发布:商城数据库设计 编辑:程序博客网 时间:2024/06/05 13:29
也许很多公司有样的需求,希望生产环境中的所有对服务器操作能够记录下来,起一下堡垒机的功能,以别日后查找原因,同时,对于很多人的运维环境,更需要这么一套东东,避免有人乱操作。
这里主要写的是通过修改openssh源代码,当有个登陆服务器时,自动的按照登陆者的姓名的登陆时间,新建一个文件,同时把登陆者的操作记录都写入该文件中。
第一步,下载openssh源代码,进入源码目录,修改channels.h文件
在channels.h找到struct Chanel结构体,新添加一行,目的是新建一个文件描述符,在用户登陆时,打开一个文件,赋值给该文件描述符。
第二步,初始化上面新建的logfd,打开channels.c。
找到channel_new(char *ctype, int type, int rfd, int wfd, int efd, u_int window, u_int maxpack, int extusage, char *remote_name, int nonblock)这个函数,添加上面一行内容,初始该logfd为-1。
第三步,当用户登陆时,创建一个文件,该文件将是记录用户的操作记录,打开serverloop.c文件。
在serverloop.c中找到server_request_session(void)函数,在上图的位置添加红框部分,当然这里面有一个我自己写的函数creatdir,按日期建目录,可以放在server_request_session(void)上面,如下图就是createdir函数。
第四步:记录用户的屏幕输出,打开channels.c源文件,修改如下:
在channel.c找到channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)函数,在上图位置添加红框部分内容,记录用户的操作记录。
第五部,用户登出时关闭记录文件,打开channel.c:
在channel.c中找到channel_free(Channel *c)函数,在上图位置添加红框部分,目的是用户logout时关闭日录文件。
最后编译安装,为了不影响系统自带的openssh,我安装在/usr/local/openssh中,如下
./configure --prefix=/usr/local/openssh
make
make install
执行完这三步后,停止系统自带的sshd进程:/etc/init.d/sshd stop
启用修改后重新编译的openssh: /usr/local/openssh/sbin/sshd
找另外一台登陆一下该服务器,验证一下。
下图是ssh登陆时执行的几个操作:
下图时操作记录的结果,可以用cat查看,如下
是不是和ssh登陆操作看到的输出一样呢,呵呵。
最后我讲一下,怎么去实现记录用户的输入,并实现动态回放思路,有兴趣的可以研究一下。
在chanel.c另一个函数channel_handle_wfd(Channel *c, fd_set *readset, fd_set *writeset)是用户的输入的数据处理,需要记录用户输入的,可以这一行len = write(c->wfd, buf, dlen);前加一个写入,将buf写入到我们审记记录。
至于动态回放,其实也很简单,每次写日志记录之前,定义一下结果体,结果体定义时间戳,再定义buf的长度,先写一个这个结构体,再写buf,然后我们写别一个程序读这个文件,通过时间戳的信息实现动态回放。
- openssh 源码更改实现记录日志功能及动态回放思路
- 实现麻将回放功能
- 百度地图API四:实现轨迹动态回放功能
- PHP 日志记录功能实现
- 动态代理实现日志记录
- java动态代理详解,并用动态代理和注解实现日志记录功能
- 实现动态添加树功能思路
- C#实现更改IP功能源码
- C#实现更改IP功能源码
- C#实现更改IP功能源码
- C#实现更改IP功能源码
- C#实现更改IP功能源码
- C#实现更改IP功能源码
- android DiskLruCache看源码并记录思路日志
- Python实现日志记录功能--样例
- 通过注解实现记录日志的功能
- java 动态代理aop 实现日志记录
- iOS 程序插件及功能动态更新思路
- leetcode20: Insert Interval
- JBPM 简单示例实现
- JS数组方法汇总 array数组元素的添加和删除
- Shell脚本容易犯得错误记录
- flash统计图
- openssh 源码更改实现记录日志功能及动态回放思路
- python 下载图片
- 可能java设计缺陷、希望高手指正错误
- LoadRunner小技巧集锦
- asp.net Viewstate 优化
- 我的第一个WebService例子
- Cocoa内存管理
- Android 4种必须知道的自适应解决方案
- system/core/init/init.c