有些书提到linux日志清理工具Logclean-ng,给的评价也挺高的。正好手头上有需要,就下载下来玩一下。
开始以为按照说明编译就可以了,后来发现其实有个问题的。在这里记录一下,可能有些朋友会用得到。
Logclean-ng的源码下载地址:https://packetstormsecurity.com/files/46742/logclean-ng_1.0.tar.gz.html。Logclean-ng工具建立在一个用来简化编写日志清理程序的函数库上,这个函数库是Liblogclean。在后续编译Logclean-ng之前,要先编译Liblogclean这个库。
我在kali虚拟机(32位和64位的需要修改的地方略有不同)上演示一下。
32位系统演示
首先进入Liblogclean文件夹,编译Liblogclean这个库,来看下可能遇到的错误:
从图中可以看到(注意红框里的内容),是某个结构体中的成员变量有问题。先看下logs_wtmp.c中出错的代码,发现引用了头文件utmp.h。我们来看下linux源码中对应头文件该结构体的定义。
utmp.h文件在/usr/include下面,打开发现如下图所示:
接下来找到bits/utmp.h(在/usr/include/i386-linux-gnu/bits文件夹下面),查看结构体utmp的定义如下所示:
注意红色下划线的部分,结构体这个变量的定义与Liblogclean库中的定义有差别,修改一下即可。这是因为版本更新的原因。后续在64位系统下出现编译问题也有部分是因为版本不兼容导致的。
将logs_wtmp.c源代码中的save.__unused修改为save.__glibc_reserved之后,再次编译Liblogclean,即可编译成功。
接下来返回到logclean-ng_1.0文件夹下面,编译logclean-ng_1.0。如下图所示,已经编译成功:
运行一下试试:
32位下已经OK了,继续编译64位下的logclean-ng吧。
64位系统演示
先按照32位系统下编译Liblogclean这个库的方法,来看下可能遇到的错误:
按照提示,我们修改一下Makefile文件中的编译参数,在CFLAGS中加入-fPIC。经过我的测试,凡是涉及到编译的地方,都需要在Makefile中的CFLAGS加入-fPIC这个编译选项。涉及到ncrypt和libmix中的Makefile文件。进入libmix文件夹,首先执行make clean,然后执行make,可以发现已经编译成功,在目录下生成了所需要的动态链接库。然后返回上级目录,编译Liblogclean。记得参照32位编译所描述的将logs_wtmp.c源代码中的save.__unused修改为save.__glibc_reserved之后再进行编译。发现出现如下错误:
为了解决这个问题,需要进行几步操作之后再进行编译。为何这样做在这里有说明。
编译之前进行如下操作:
cd /usr/lib/gcc/x86_64-linux-gnu/4.9
cp crtbeginT.o crtbeginT.orig.o
cp crtbeginS.o crtbeginT.o
编译成功后再修改回来:
cd /usr/lib/gcc/x86_64-linux-gnu/4.9
cp crtbeginT.orig.o crtbeginT.o
rm crtbeginT.orig.o
最后一步和之前32位编译的类似。好了,到此就编译成功了。如下图所示:
继续运行一下:
32位和64位编译该工具的步骤就到此为止了。至于logclean-ng如何使用,可以看help说明。