개요
bash shell은 명령어 히스토리 기능을 이용해 사용했던 명령어 이력을 보여준다. 이 기능은 사용자 홈 디렉터리의 .bash_history 파일에 기록되기 때문에, 여러 사람이 사용하는 서버인 경우에는 중앙에서 관리하기가 쉽지 않다. 따라서 syslog에 명령어를 남김으로써 명령어 이력을 중앙에 저장해두는 것이 서버를 관리하기에 좋을 수 있다.
logger를 이용해 history를 syslog에 남겨보도록 하자.
rsyslog
IP 네트워크에서 로그 메시지를 전달하기 위해 UNIX 및 Unix 계열 컴퓨터에서 사용하는 오픈 소스
기본적인 syslog 프로토콜을 구현하고, 필터링 기능, 오프라인 출력 대기 작업, TCP를 사용한 전송 등의 기능이 추가되었다.
rsyslog 관련 설정 파일은 다음과 같다.
- /etc/rc.d/init.rsyslog : rsyslogd 데몬을 동작시키는 스크립트
- /etc/rsyslog.conf : rsyslogd 데몬 환경 설정 파일
- /etc/sysconfig/rsyslog : rsyslogd 데몬 실행과 관련된 옵션 설정 파일
- /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. 로그가 정상적으로 기록되는지 확인한다.