在实际的
服务器/
数据库管理当中,我们都要求管理员要很小心,并且在很多重要操作规范中都会有这样的要求:
保留操作纪录
出于对 保留操作纪录 的这样的要求,我写了一个script, 可用于自动纪录每个login 的session 所作的多数动作……
其实说起来也很简单,就是利用了 Unix/
Linux 里的一个基本的命令,script , 达到纪录的目的
代码:--------------------------------------------------------------------------------
SCRIPT(1) BSD General Commands Manual SCRIPT(1)
NAME
script - make typescript of terminal session
SYNOPSIS
script [-a] [-f] [-q] [-t] [file]
DESCRIPTION
Script makes a typescript of everything printed on your terminal. It is
useful for students who need a hardcopy record of an interactive session
as proof of an assignment, as the typescript file can be printed out
later with lpr(1).--------------------------------------------------------------------------------
我所作的工作就是
1。在登陆时自动运行script 命令
2。同时纪录登陆时间
3。同时纪录登陆IP
4。压缩记录文件以节省空间
下面就是 具体的script
代码:--------------------------------------------------------------------------------
#!/bin/ksh
# 先创建保存纪录的目录,根据需要,可以放在指定的目录
if [ ! -d $HOME/login_history ];then
mkdir $HOME/login_history
fi
# 判断login的IP 或者hostname
FROM_HOST=`who am i|awk -F"(" '{print $2}'|awk -F")" '{print $1}'`
# 如果来自同一机器,就不重复记录了
HOSTNAME=`hostname`
if [ "$HOSTNAME" == "$FROM_HOST" -o "$FROM_HOST" == "" ] ; then
echo ' '
else
#定义文件名,里面包含登陆的时间 YYYYMMDD HH24MISS ,以及登陆的IP/hostname
SCRIPT_LOG=$HOME/login_history/`date +%y%m%d-%H%M%S-`$FROM_HOST.log
script $SCRIPT_LOG
#当用户退出该session时,自动压缩文件,并提示文件名,以供参考
echo compress you SCRIPT_LOG
SCRIPT_LOG
compress $SCRIPT_LOG
sleep 3
exit
fi
...--------------------------------------------------------------------------------
保存script,并在需要纪录的用户的profile 的最后一行执行这个script 就可以了……
在我的实际工作中,管理十几台Oracle Database, 通常看
数据库状态,查询数据库信息等的操作,可以通过客户端的GUI, 用只读账号进行连接。而只要有任何改动的动作,都会先telnet 到一台已经配置“自动保留操作纪录”的server 上,然后通过sqlplus 连接到相应的DB,或者再次telnet到相应的DB server上作操作,从而达到任何一个改动都有据可查的目的