很久没有更新BLOG了,原因就是忙。忙着适应新环境,忙着接手新工作,整天忙得昏天黑地,还不得不忙里偷闲自学些新东西(先后是SYBASE、用VBSCRIPT写WINDOWS平台的WMI、ADSI脚本、AS/400,都是工作中要用到的,不学也不行),忙得没心情再更新了。11月28号作为选手在北京参加了第二届AIX挑战赛,没进前三,所以没有回答论述题的机会,只有听的份儿。不过听了别人的回答和评委的点评,感觉几乎所有的问题都不尽如意。比如其中有一道论述题是——如何查看用户以前执行命令的具体时间?我想如果让我回答的话,我会按照这个思路讲:
1、AIX 5.3引入了一个新的环境变量:EXTENDED_HISTORY=ON,这样history -t(fc -t)可以看到时间。顺便讲讲history与fc -l的关系(alias)
2、单独使用EXTENDED_HISTORY用处不大,两点原因:AIX 5.2以前不支持这个环境变量;一般的需求是需要知道哪个人哪个时间敲了哪个命令,在多个人使用相同ID登录或者多个ID都su -成了root的情况下,只使用EXTENDED_HISTORY是无法知道哪个人的,所以说这样没有用。
2.1、AIX 5.2以前怎么办?
写个脚本放到/etc/profile里,这种方法是通用的,适用于AIX 任何版。下面再细说。
2.2、多个人使用相同ID登录或者多个ID都su -成了root的情况怎么办?
使用另一个环境变量HISTFILE。
3、上面说的脚本怎么写?
简单的说就是用户一登录,自动在后台运行一个死循环命令,每sleep一段时间后,echo `date`追加进$HISTFILE。使用脚本会引发的一系列问题,下面讲如何一一解决:
3.1、logout时,死循环命令如何kill掉?
用trap,/etc/profile里有trap用法的例子。
3.2、echo `date` >>$HISTFILE的缺陷,如何解决?
缺陷,本文不细说,用了就知道。解决方法是read命令,本文也不细说。
3.3、如何让用户不发觉使用了HISTFILE?
目的是防止用户自己篡改记录,让用户误以为命令记录在默认位置$HOME/.sh_history。做法是启个后台进程tail -f,保持$HISTFILE和$HOME/.sh_history的同步。
3.4、如何让用户不发觉有个tail -f 的奇怪进程?
两点:对tail做个hard link;HISTFILE中不能看到用户名之类字符串。
3.5、HISTFILE中不能看到用户名之类字符串,怎么实现?
还是可以用脚本。思路:将ABC转换成XYZ肯定不难写,但要考虑事后追查时,再如何把XYZ转换成ABC。具体写法,本文不细说。
3.6、其它问题
3.6.1、比如起“echo `date` >>$HISTFILE”作用的脚本不能让用户看到内容,怎么做?
rm掉。怎样和何时rm?其实很简单。本文不细说。
3.6.2、还有一些要考虑的细节问题,本文不细说。
4、除了脚本,是否还有别的方法?
有,比如lastcomm。讲讲lastcomm的安装和缺陷。讲安装时,说说AIX5L和SOLARIS8;讲缺陷时,举个mv oldfile newfile的例子。
5、道高一尺、魔高一丈的做法
假如我是“魔”,不想让“道”看到我敲的命令,我就这样:vi file、ksh file。
6、魔高一尺、道又高一丈的做法
6.1、审计
审计是否能看到ksh file中file的真正内容呢?我印象中可以,但不十分确定。说说审计的缺陷:占资源多;信息太多跟没有信息差不多——就象在一碗沙子里找一粒米。
6.2、其它方法
portmir、script等,各自都有缺陷,本文不细说。
其实这是29号上午就写好的,一直懒得贴出来,这几天把前一阵子堆积的工作处理得七七八八,有点儿闲空,觉得既然写了就贴出来算了。评委出题的本意就是要考AIX5.3新增加的那个环境变量,但我觉得单独使用一个环境变量没有实际用处(前面已论述),所以就“文不对题”地扩展出很多东东,这些都是原来做AIX管理员时的经验之谈,脚本的做法在原公司已经实施,所以不便说得太细。
比赛时,我对房评委有点儿小意见,觉得他剥夺了我进入前三的机会,但希望假如他老人家看到本文不要对我有意见就好了。:)当然自己失利怨别人显然是不对的,最该怨的肯定还是自己。最后,顺便提下我在LU写的“关于AIX挑战赛的几点建议”——http://www.loveunix.net/discuz/thread-79193-1-2.html ,希望以后的AIX高手挑战赛能办得更好!