在linux系统的环境下,不管是root用户还是其它的用户只有登陆系统后用进入操作我们都可以通过命令history来查看历史记录,可是假如一台服务器多人登陆,一天因为某人误操作了删除了重要的数据。这时候通过查看历史记录(命令:history)是没有什么意义了。那有没有什么办法实现通过记录登陆后的IP地址和某用户名所操作的历史记录呢?答案:有的。
 编辑 /etc/profile,在最后添加:

 
  
  1. PS1="`whoami`@`hostname`:"'[$PWD]' 
  2. history 
  3. USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` 
  4. if [ "$USER_IP" = "" ] 
  5. then 
  6. USER_IP=`hostname` 
  7. fi 
  8. if [ ! -d /tmp/history ] 
  9. then 
  10.   mkdir /tmp/history 
  11.   chmod 777 /tmp/history 
  12. fi 
  13. if [ ! -d /tmp/history/${LOGNAME} ] 
  14. then 
  15.   mkdir /tmp/history/${LOGNAME} 
  16.   chmod 300 /tmp/history/${LOGNAME} 
  17. fi 
  18. export HISTSIZE=4096 
  19. DT=`date "+%Y%m%d_%H%M%S"` 
  20. export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP} history.$DT" 
  21. chmod 600 /tmp/history/${LOGNAME}/*history* 2>/dev/null 

 

    其实通过上面的代码不能看出来,在系统的/tmp新建个history目录,在目录中记录了所有的登陆过系统的用户和IP地址,是不是觉得很方便呢?我们还可以用这个方法来监测系统的安全性。

 

方法二、

========================================================

 
  
  1. 一、如果你的系统有多个用户,你想知道每个用户登录系统做了哪些操作,从那里登录的,登录时间等待一系列信息,那么请按我的做吧。  
  2.  
  3. 二、编辑脚本  
  4.  
  5. vi /etc/profile.d/accountlog.sh  
  6.  
  7.  
  8. historyLog(){  
  9.  
  10.     logDir=/data/accountlog  
  11.  
  12.     dateStamp=`date +"[%F %T]"`  
  13.  
  14.     dateDir="`date +%Y`/`date +%m`/`date +%d`" 
  15.  
  16.     curHistory=`history 1`  
  17.  
  18.     user=`/usr/bin/whoami`  
  19.  
  20.     realUserInfor=`/usr/bin/who -u am i|awk '{print $1,$2,$3"~"$4,$7}'`  
  21.  
  22.       
  23.  
  24.     if [ ! -e $logDir ];then  
  25.  
  26.         mkdir -p $logDir  
  27.  
  28.         chmod 777 $logDir  
  29.  
  30.     fi  
  31.  
  32.    
  33.  
  34.     logDateDir=$logDir/$dateDir  
  35.  
  36.     if [ ! -e $logDateDir ];then  
  37.  
  38.         mkdir -p $logDateDir  
  39.  
  40.         chmod -R 777 $logDir 2>/dev/null  
  41.  
  42.     fi   
  43.  
  44.    
  45.  
  46.     accountLogDir=$logDateDir/${user:=`hostname`}  
  47.  
  48.     if [ ! -e $accountLogDir ];then  
  49.  
  50.         mkdir -p $accountLogDir  
  51.  
  52.         #chmod 777 $accountLogDir  
  53.  
  54.     fi  
  55.  
  56.    
  57.  
  58.     accountLogName=${user:=`hostname`}.his  
  59.  
  60.     accountLog=$accountLogDir/$accountLogName  
  61.  
  62.     if [ ! -e "$accountLog" ];then  
  63.  
  64.         touch $accountLog  
  65.  
  66.         #chmod 777 $accountLog  
  67.  
  68.     fi  
  69.  
  70.     echo "$realUserInfor $dateStamp =>$curHistory" >>$accountLog  
  71.  
  72. }  
  73.  
  74. export PROMPT_COMMAND=historyLog 
  75.  
  76.    
  77.  
  78. [root@localhost ~]# chmod +x /etc/profile.d/accountlog.sh  
  79.  
  80. 三、以后每个用户登录的操作都会在/data/accountlog记录  
  81.  
  82.  
  83. [root@localhost data]# cd accountlog/  
  84.  
  85. [root@localhost accountlog]# ls  
  86.  
  87. 2012  
  88.  
  89. [root@localhost accountlog]# cd 2012/  
  90.  
  91. [root@localhost 2012]# ls  
  92.  
  93. 01  02  03  04  05  06  07  
  94.  
  95. [root@localhost 2012]# cd 07/  
  96.  
  97. [root@localhost 07]# ls  
  98.  
  99. 09  10  12  13  14  15  16  19  20  21  
  100.  
  101. [root@localhost 07]# cd 21  
  102.  
  103. [root@localhost 21]# ls  
  104.  
  105. root