资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
秋明分享平台之openssh修改代码记录操作日志撰稿人:秋明撰稿人邮箱:tyumenzhoufengjie.cnQQ群: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用户登出时关闭文件104安装测试121 前言做了跳板机之后,发现有的时候有人做了误操作,需要进行查看,因此想起修改ssh的源代码,记录用户的操作日志,本文来自互联网,后面带着大家一步一步进行修改;2 下载openssh源代码openssh的官方下载地址(请自己找最新的openssh源码下载):http:/www.openssh.com/portable.html比如:http:/ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/openssh-6.7p1.tar.gz如果大家想一步到位,也可以直接下载我修改完的ssh代码进行编译安装即可,下载地址:http:/download.zhoufengjie.cn/software/tools/jumpserver/openssh-6.7p2.tar.gz3 修改代码本文修改的文件就涉及到两个文件:channels.c和serverloop.c3.1 修改channels.h文件声明logfd描述符在channels.h找到struct Chanel结构体,新添加一行(可以加在105行int sock后面),目的是新建一个文件描述符,在用户登陆时,打开一个文件,赋值给该文件描述符;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记录用户操作记录当用户登陆时,创建一个文件,该文件将是记录用户的操作记录,打开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_time-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) = -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) 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)函数,在上图位置添加红框部分,目的是用户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登陆时执行的几个操作:
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号