리눅스에서 명령어 입력 시 로깅을 남기는 방법에 대하여 알아보도록 하겠습니다.

해커의 행위 분석이라던지 시스템 작업 시 원인 분석용으로 사용하기에도 아주 유용합니다.


function cmdlog
{
f_ip=`who am i | awk '{print $5}'`
cmd=`history | tail -1`
if [ "$cmd" != "$cmd_old" ]; then
  logger -p local1.notice "[1] From_IP=$f_ip, PWD=$PWD, Command=$cmd"
fi
  cmd_old=$cmd
}
trap cmdlog DEBUG



logger 명령어를 사용하면 임의로 로그를 생성할 수 있습니다.


ex)

# logger hahaha

# tail -1 /var/log/message

Jul 26 16:37:13 Host root: hahaha



syslog의 Log Level을 지정하기 위해서는 아래 그림의 Facility와 Severity Level에 대한 설정이 필요합니다.

Facility는 프로그램의 형식이며, Severity Level은 로깅에 대한 심각성 정도(레벨)라고 생각하시면 됩니다.

더 자세한 사항은 아래 링크를 참조하시기 바랍니다.

https://en.wikipedia.org/wiki/Syslog

Facility

[그림출처] https://en.wikipedia.org/wiki/Syslog

Severity level

[그림출처] https://en.wikipedia.org/wiki/Syslog



ex)

# logger -p local1.notice logging test

# tail -1 /var/log/message

Jul 26 17:00:46 Host root: logging test


기본적으로 logger를 사용하면 /var/log/message 에 로깅이 되는데 다른 파일에 로깅을 하길 원하면 /etc/rsyslog.conf에 새로운 위치를 추가 해주시면 됩니다.



/var/log/cmdlog에 설정 후 messages에 로깅 되지 않도록 local1.none 설정을 해 줍니다.


해당 쉘 스크립트를 Global하게 적용하기 위해서 /etc/profile.d/에 작성한 스크립트를 넣어 둡니다.


마지막으로 설정을 적용하기 위해 데몬을 재시작 합니다.


#/etc/init.d/rsyslog restart