helperchoi
2014. 2. 20. 23:06

오늘은 조금 재미있는(?) 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 |