[RHEL 공통] rsyslog를 이용한 history 내역 관리
본문 바로가기
IT 이야기/Linux

[RHEL 공통] rsyslog를 이용한 history 내역 관리

by 찬찬이 아빠 2019. 12. 18.
반응형

임의 사용자의 history 삭제 방지 및 비정상 접속 시 추적의 용이성을 위해 접속 정보 저장 및 명령어 입력 시 즉시 로그에 저장합니다.

 

 

  1. history function 작성 및 등록

 1) /etc/profile.d/history_log.sh 생성

function history_to syslog {

declare cmd     # 커맨드로 클리어 불가능

   who='whoami'
   cmd=$(history | tail -1)
   TTY='tty'
   HISNAME="'basename $TTY'"

login_tty='who | grep pts/${HISNAME} | awk '{print $2}''
con_time='who | grep pts/${HISNAME} | awk '{print $3, $}''

# who 명령어 결과 뒤에서 2번째 다음 (자르고 뒤에) 자르고 출력
ip='who | grep pts/${HISNAME} cut -f 2 -d \(|cut -f 1 -d \)'

if [ -n "${cmd}" ]; then
   if [ -n "${login_tty}" ]; then
     # 마지막 cmd와 old cmd가 동일하지 않을 경우 출력
      if [ "$cmd" != "$cmd_old" ]; then
           logger -p local6.debug -t bash -i -- USER=[$WHO]: ip=[$IP]: pid=[$$]: tty=[$LOGIN_TTY]: conn_time=[$CON_TIME]: pwd=[$pwd]: cmd=[$CMD ]               # $$ : 현재 ID
      fi
      cmd_old=$cmd          # 버퍼에 cmd 현재값 저장
   fi
fi
}

trap history_to_sslog DEBUG || EXIT          # history르르 DEBUG 모드로 수행

HISTSIZE=10000
HISTFILESIZE=1000000
HISTTIMEFORMAT="%F %T "

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE HISTTIMEFORMAT INPUTRC
declare -r HISTFILE

 

 2) /etc/profile.d/history_log.sh 권한 변경

# chmod 644 /etc/profile.d/history_log.sh

 

 3) history fuction 시스템에 등록

# source /etc/profile.d/history_log.sh

 

 

 

  2. rsyslog에 등록 및 실행

 1) /etc/rsyslog.conf 파일에 등록

local6.debug          /var/log/history

 

 2) rsyslog 서비스 재실행

OS 버전 명령어
RHEL7 # systemctl restart rsyslog.service
RHEL6 # service rsyslog restart

 

 

  3. 로그 로테이션 적용

 1) /etc/logrotate.d/syslog 파일에 등록

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/sulog
/var/log/history
{
   sharedscripts
   postrotate
   		/bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
   endscript
}

 

 

 

  4. history 로그 설명

 1) /var/log/history 출력 결과

Dec 18 11:33:50   chanchan   bash[32781]:   USER=[root]:   IP=[10.xxx.xxx.xxx]: PID=[20660]: TTY=[pts/1]: CONN_TIME=[2019-12-18 10:30]: pwd=[/var/log]: CMD=[ 1501 2019-12-17 10:30:26 ls ]

 

 2) /var/log/history 항목 설명

항목 설명
Dec 18 11:33:50 chanchan 로그 기록 날짜와 호스트명
bash[32781]:

실행쉘의 PID

USER=[root]:

접속 계정

IP=[10.xxx.xxx.xxx]:

접속 계정 IP

PID=[20660]:

접속계정 PID

TTY=[pts/1]:

접속콘솔 번호

CONN_TIME=[2019--12-18 10:30]:

접속 계정의 최초 접속 시간

PWD=[/var/log]:

접속 계정의 명령어 입력 위치(디렉터리)

CMD=[ 1501 2019-12-18 10:30:26 ls ]

history 라인, 입력시간, 명령어

 

반응형

댓글