티스토리 뷰

 

 

오늘은 조금 재미있는(?) Shell 을 작성해 보았습니다.

 

다름아니라 System에 등록되어 있는 모든 사용자의 History Log를 검색해서 특정 명령어를 수행한 유저를 찾는 Script 입니다.

 

설명보다는 직접 한번 보겠습니다.

 

1) 기본적으로 아무런 파라메터 없이 Script를 수행 시킬 경우 아래와 같이 사용법이 표기됩니다.

 

[root@TEST01 ~]# ./history.sh

### Usage Manual : ./history.sh [Search word] [Number of row]
### Usage ex) : ./history.sh mysql 10

[root@TEST01 ~]#

 

 

2) 시스템에 생성되어있는 사용자들중 ls 명령을 수행한 사용자들의 History 중 최근 5개 까지 검색

 

[root@TEST01 ~]# ./history.sh ls 5
###### root : ######
tail -f `ls -1rt /var/log/java*`
ls
ls
ls -lrt
ls


###### testuser : ######
ls
ls
ls
ls
ls


###### testuser2 : ######
ls
ls
man ls
ls
ls

 


 

3) 시스템에 생성되어있는 사용자들중 kill 명령을 수행한 사용자들의 History 중 최근 10개 까지 검색

 

[root@TEST01 ~]# ./history.sh kill 10
###### root : ######
ps -ef | grep -v grep | grep tcpdump | awk '{print $2}' | xargs -n1 kill -9
kill -9 3131 3132
kill -9 15567 15568
kill -9 2408 2410
kill -9 21250 21252
kill -9 1674 167628881 28883 29722 29724 30545 30547 31751
kill -9 1676 31753
kill -9 3307 3309
kill -9 6542 6544
kill -9 10840 10842


###### testuser : ######
alias tdump="ps -ef | grep java | grep "Dprogram.name=run.sh" | grep -v grep  | awk '{print $2}' | xargs kill -3"
alias tdump="ps -ef | grep java | grep -v grep | awk '{print $2}' | xargs kill -3"
find . -type f | xargs grep -i pkill
./kill.sh
kill 17368
kill 24070
./kill.sh
./kill.sh
./kill.sh
./kill.sh


###### testuser3 : ######
kill -9 13969 13975


[root@TEST01 ~]#


 

4) 다음은 제일 중요한 Shell Script의 Source Code 입니다.

각 사용자 계정이하에 .bash_history 파일의 존재여부를 체크후 해당 history 파일을 검색하는 방식이기 때문에 history 파일 자체가 삭제될 경우는 사실상 소용이 없는 Shell 이기는 하지만 유용하게 써먹을 수 있을 법도 합니다. -_ -a

 

#!/bin/bash

#Develop by helperchoi / helperchoi@gmail.com

 

if [ $# = 0 ]
then
 echo
 echo "### Usage Manual : $0 [Search word] [Number of row] "
 echo "### Usage ex) : $0 mysql 10"
 echo
 exit 0
fi
 
LIST_FILE=`cat /etc/passwd | grep -v "operator" | cut -d ":" -f 1`

 

for LIST in ${LIST_FILE};
do

 HOME_DIR=`finger ${LIST} | grep Direc | awk '{print $2}'`
 HIST_FILE=${HOME_DIR}/.bash_history
 
  if [ -f "$HIST_FILE" ]
  then
   CHECK_VAR=`grep $1 ${HIST_FILE} | wc -l` 
   
   if [ "$CHECK_VAR" -ge 1 ]
   then
    echo "###### ${LIST} : ######"
    echo "`grep $1 ${HIST_FILE} | tail -$2`"
    echo
    echo
   fi
  fi
  
done

 

반응형
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday