openssh记录操作日志开发方法

上传人:shaoy****1971 文档编号:108154279 上传时间:2019-10-22 格式:DOCX 页数:12 大小:490.60KB
返回 下载 相关 举报
openssh记录操作日志开发方法_第1页
第1页 / 共12页
openssh记录操作日志开发方法_第2页
第2页 / 共12页
openssh记录操作日志开发方法_第3页
第3页 / 共12页
openssh记录操作日志开发方法_第4页
第4页 / 共12页
openssh记录操作日志开发方法_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《openssh记录操作日志开发方法》由会员分享,可在线阅读,更多相关《openssh记录操作日志开发方法(12页珍藏版)》请在金锄头文库上搜索。

1、秋明分享平台之openssh修改代码记录操作日志撰稿人:秋明撰稿人邮箱:QQ群:90122290本文撰稿日期: 2015年2月25日星期三本站口号:开源、分享、共进版权所有:随便使用注解:任何想通过本平台分享文档的,可以随时联系,文档里面注明出稿人和邮箱,方便文档使用者同撰稿的兄弟技术咨询沟通和交流;目录1前言32下载openssh源代码33修改代码33.1修改channels.h文件声明logfd描述符43.2修改channels.c初始化上面新建的logfd53.3修改serverloop.c记录用户操作记录53.4修改channels.c记录用户屏幕输出93.5修改channels.c用

2、户登出时关闭文件104安装测试121 前言做了跳板机之后,发现有的时候有人做了误操作,需要进行查看,因此想起修改ssh的源代码,记录用户的操作日志,本文来自互联网,后面带着大家一步一步进行修改;2 下载openssh源代码openssh的官方下载地址(请自己找最新的openssh源码下载):http:/ 修改代码本文修改的文件就涉及到两个文件:channels.c和serverloop.c3.1 修改channels.h文件声明logfd描述符在channels.h找到struct Chanel结构体,新添加一行(可以加在105行int sock后面),目的是新建一个文件描述符,在用户登陆时,

3、打开一个文件,赋值给该文件描述符;int logfd;3.2 修改channels.c初始化上面新建的logfd找到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可以放到此函数内c-flags = 0;后面c-logfd = -1;3.3 修改serverloop.c记录用户操作记录当用户登陆时,创建一个文件,该文件将是

4、记录用户的操作记录,打开serverloop.c文件。在serverloop.c中找到server_request_session(void)函数,在上图的位置添加红框部分内容,内容如下: /* add by fengjie.zhou for log start*/ time_t t=time(NULL); struct tm *loc_time=localtime(&t); char *dir; char *logfile; asprintf(&dir,/data/proclog/log/sshlogs/%4i/%.2i/%.2i, loc_time-tm_year+1900, loc_ti

5、me-tm_mon+1, loc_time-tm_mday); if (access(dir, F_OK) != 0) if (createdir(dir) != 0) debug(mkdir error: %s,dir); asprintf(&logfile,%s/%s-%.2i.%.2i.%.2i.log, dir, the_authctxt-user, loc_time-tm_hour, loc_time-tm_min, loc_time-tm_sec); if (c-logfd=open(logfile, O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR

6、) = -1 ) c-logfd=-1; debug(can not open file: %s, logfile); free(logfile); free(dir); /* add by fengjie.zhou for log end*/当然这里面有一个自己写的函数creatdir,按日期建目录,可以放在server_request_session(void)上面,如下图就是createdir函数。代码为:/* add by fengjie.zhou for log dir creat start */static intcreatedir(const char *sPathName)

7、char DirName256; strcpy(DirName, sPathName); int i,len = strlen(DirName); if(DirNamelen-1!=/) strcat(DirName,/); for(i=1; ilogfd != -1) write(c-logfd, buf, len); /* remem screen log by fengjie.zhou end */3.5 修改channels.c用户登出时关闭文件用户登出时关闭记录文件,打开channels.c:在channel.c中找到channel_free(Channel *c)函数,在上图位置添

8、加红框部分,目的是用户logout时关闭日录文件,代码如下: /* add by fengjie.zhou for free log remember start */ if (c-logfd != -1) close(c-logfd); /* add by fengjie.zhou for free log remember end */4 安装测试最后编译安装,为了不影响系统自带的openssh,可以安装在/usr/local/openssh中,等测试没有问题了再覆盖安装,如下./configure -prefix=/usr/local/opensshmakemake install执行完这三步后,停止系统自带的sshd进程:/etc/init.d/sshd stop启用修改后重新编译的openssh: /usr/local/openssh/sbin/sshd找另外一台登陆一下该服务器,验证一下。下图是ssh登陆时执行的几个操作:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号