Linux

[Linux] rsyslog을 이용한 history 내역 남기기

비번변경 2022. 12. 1. 21:14

개요

bash shell은 명령어 히스토리 기능을 이용해 사용했던 명령어 이력을 보여준다. 이 기능은 사용자 홈 디렉터리의 .bash_history 파일에 기록되기 때문에, 여러 사람이 사용하는 서버인 경우에는 중앙에서 관리하기가 쉽지 않다. 따라서 syslog에 명령어를 남김으로써 명령어 이력을 중앙에 저장해두는 것이 서버를 관리하기에 좋을 수 있다.

 

logger를 이용해 history를 syslog에 남겨보도록 하자.

 

 

rsyslog

rsyslog 로고

IP 네트워크에서 로그 메시지를 전달하기 위해 UNIX 및 Unix 계열 컴퓨터에서 사용하는 오픈 소스

기본적인 syslog 프로토콜을 구현하고, 필터링 기능, 오프라인 출력 대기 작업, TCP를 사용한 전송 등의 기능이 추가되었다.

 

rsyslog 관련 설정 파일은 다음과 같다.

  1. /etc/rc.d/init.rsyslog : rsyslogd 데몬을 동작시키는 스크립트
  2. /etc/rsyslog.conf : rsyslogd 데몬 환경 설정 파일
  3. /etc/sysconfig/rsyslog : rsyslogd 데몬 실행과 관련된 옵션 설정 파일
  4. /sbin/rsyslogd : 실제 rsyslogd 데몬 실행 명령

 

방법

1. 명령어 기록할 쉘 스크립트 작성

/etc/profile.d 경로 아래에 작성한다.

##########################
# /etc/profile.d/logging_history.sh
##########################
function history_to_syslog {
    declare cmd
    who=$(whoami)
    cmd=$(history 1)
    TTY=$(tty)
    HISNAME=$(basename $TTY)
    ip=$(who|grep pts/${HISNAME}|cut -f 2 -d \(|cut -f 1 -d \))
    logger -p local6.debug -- IP=$ip, USER=$who, PID=$$, PWD=$PWD, CMD=$cmd
}
trap history_to_syslog DEBUG || EXIT # DEBUG 시그널이 발생하면 history_to_syslog 실행

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

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTFILESIZE HISTTIMEFORMAT INPUTRC

declare -r HISTFILE

 

2. 작성한 스크립트를 적용한다.

source /etc/profile.d/logging_history.sh

 

3. rsyslog.conf에 로그 파일 경로를 지정한다.

vi /etc/rsyslog.conf

# /etc/rsyslog.conf
local6.debug  /var/log/history.log

 

 

4. rsyslog 서비스를 재시작한다.

systemctl restart rsyslog

 

5. 로그가 정상적으로 기록되는지 확인한다.

결과

 

참고 문서

BASH HISTORY 를 SYSLOG 에 남기기

https://12bme.tistory.com/604

rsyslog - 리눅스편

728x90