관리 메뉴

Today is Present.

07 리눅스 로그시스템 이해와 활용 본문

리눅스 학습

07 리눅스 로그시스템 이해와 활용

MorningPhys 2020. 11. 30. 00:35

# 리눅스 시스템의 로그데몬과 로그파일에 대한 이해

 

 - 리눅스에서 발생되는 기본적인 로그에는 기본적으로 크게 두가지가 있다.

 - 하나는 커널로그로써 kernel messages 라고하는 것으로 klogd 라는 데몬에 의해 생성되는 것이고

 - 두번째 시스템 로그 라고 하는 syslogd 데몬에 의해 생성되는 서비스로그들이다.

[root@localhost ~] # which klogd

/sbin/klogd

[root@localhost ~] #

[root@localhost ~] # ps -ef | grep klogd

[root@localhost ~] #

[root@localhost ~] # wich syslogd

[root@localhost ~] #

[root@localhost ~] # ps -ef | grep syslogd

 

# 리눅스에서는 /var/log 디렉토리에서 시스템의 모든 로그를 기록 및 관리하고 있다. 시스템의 /etc/syslog.conf 파일에서 시스템 로그파일들의 위치를 지정하고 있다.

[root@localhost ~] # ls -l /var/log

[root@localhost ~] # ls -l /var/log/dmesg

[root@localhost ~] # ls -l /bin/dmesg // 시스템 부팅메시지만 확인하고 검색

 

[root@localhost ~] # ls -l /var/log/cron

// 시스템의 정기적인 작업에 대한 로그, 즉 시스템 cron 작업에 대한 기록하고 있는 파일이다. /etc/ 디렉토리에는 cron.hourly, cron.daily, cron.weekly, cron.monthly 디렉토리들이 있다.

[root@localhost ~] # ps -ef grep crond

 

/var/log/messages 로그파일

리눅스 시스템의 가장 기본적인 시스템로그파일로써 시스템 운영에 대한 전반적인 메시지를 저장하고 있다. 주로 시스템 데몬들의 실행상황과 내역, 그리고 사용자들의 접속정보등의 로그기록내역을 기록하고 있다. 시스템 서비스에 관한 거의 모든 로그가 기록되어 있는 파일이라고 봐도 무방하다.

 

/var/log/secure 로그파일

주로 사용자들의 원격접속 즉, 원격로그인 정보를 기록하고 있는 로그파일로서 서버보안에 아주 민감하고 중요한 파일이다. 특히 tcp_wrapper(xinetd)의 접속제어에 관한 로그파일로서 언제, 누가, 어디에서, 어떻게 접속했는가에 대한 로그를 기록하고 있다. 시스템의 불법 침이비 등이 있었다고 의심이 될 때는 반드시 이 로그파일을 확인해야 한다. 주로 sshd 데몬과 su관련 실행, 그리고 telnet 관련 원격접속, 그리고 gdm 관련 실행내용들이 기록되는 로그 파일이다.

 

/var/log/xferlog 로그파일

리눅스시스템의 FTP 로그파일로서 proftpd 또는 vsftpd 데몬들의 서비스내역을 기록하는 파일이다. 즉, ftp 로 로그인하는 사용자에 대한 로그를 기록과 어떤 파일을 업로드/다운로드 하였는가에 대하여 상세하게 기록한다. 따라서 어떤 특정한 파일이 시스템으로 FTP 서비스에 의해서 업로드되었을 때에나 또는 시스템 외부로 다운로드 되었을 때에 이 파일의 기록내역을 확인해 보면 날짜, 파일명, 디렉토리명 등의 주요정보를 확인할 수 있다. 이 외에도 중요한 로그파일이 있는데 /var/spool 에는 작업중에 일시적으로 저장되는 로그 및 작업들에 대한 기록이 남겨지는 곳이다.

 

# 시스템 로그설정파일 /etc/syslog.conf 의 이해와 활용법

[root@localhost ~] # cat /etc/syslog.conf

 

/etc/syslogd.conf 파일은 시스템로그데몬(syslogd)이 실행이 될 때 참조되는 로그파일 설정파일로써 관련된 로그파일들이 어떤 경우에 어떤 파일에 남겨지는가에 대하여 정의하고 있다.

 

/etc/syslog.conf 파일의 각 행들은 다음과 같은 포맷으로 정의되어 있다.

형식 : facility.priority;facility.priority;                   logfile-location

"A 서비스에 대하여 B의 경우에 해당하는 상황이 발생하였을 때에 C 로그파일에 그 기록을 남겨라"

즉 위의 A에 해당하는 facility는 해당서비스를 의미한다. 위의 예에서 mail, cron, kern, uucp 등이 이에 속한다. 그리고 위의 B에 해당하는 priority는 각 서비스들의 상황정도를 나타내는 우선순위이다.

 

facility : 서비스이름(메시지 종류)

* : 모든 서비스

auth : 로그인 같은 사용자 인증 메시지

authpriv : 보안 및 승인에 관한 메시지(xinetd(tcp_wrapper), telnet, ftp, finger)

cron : crond 데몬과 atd 데몬에 의해 발생되는 메시지

daemon : telnet, ftp 등과 같은 데몬에 의해 발생되는 메시지

kern : kernel 에 의한 메시지로서 커널메시지라고도 함

lpr : 프린터데몬 lpd 에 의해 발생되는 메시지

mail : sendmail 또는 pop 또는 qmail 등의 메일에 의해 발생되는 메시지

news : innd 등과 같은 뉴스시스템에 의해 발생되는 메시지

uucp : uucp에 의한 시스템에 의한 메시지

user : 사용자에 의해 생성된 프로세스

syslog : syslogd에 의해 발생되는 메시지

local0~local7 : 시스템부팅 메시지 기록

 

priority : 메시지의 우선순위를 의미함(level)

* : 발생되는 모든 상황에 대한 메시지

debug : 최하위, 디버깅 메시지

info : 단순한 프로그램에 대한 정보 및 통계관련 정보

notice : 에러가 아닌 알림 메시지

warning : 주의를 요하는 메시지

err : 에러가 발생한 상황의 메시지

crit : 급한상황은 아니지만 치명적인 시스템 문제발생 상황의 메시지

alert : 즉각적인 조치를 취해야 하는 상황의 메시지

emerg : 최상위, 매우 위험한 상황의 메시지, 전체공지가 요구되는 메시지

none : 어떠한 경우라도 메시지를 저장하지 않음

 

[root@localhost ~] # cat /etc/syslog.conf

 

#kern.*                                                                        /dev/console

 

위의 설정은 kernel 에 관련된 로그(주로 klogd라는 로그파일) 기록을 /dev/console(콘솔)에 뿌려주라는 의미이다. 하지만 기본적으로 이 설정은 주석처리(#)되어 있기 때문에 실제로 적용되지 않는다. 만약 적용되도록 하려면 위의 주석(#)을 제거하고 syslogd 데몬을 재시작해주면 된다.

 

*.info;mail.none;news.none;authpriv.none;cron.none                   /var/log/messages

 

이 로그파일은 시스템로그파일이라고 하는 것으로써 거의 모든 데몬들에 의해서 남겨지는 로그를 기록한다. 즉 *.info는 모든 서비스에 대한 info 레벨의 메시지를 의미하고, mail.none 은 메일에 관한 none 레벨의 메시지를 각각 의미한다. 물론 세미콜론(;)의 의미는 OR을 의미한다.

 

authpriv.*                                                                     /var/log/secure

 

이 설정은 authpriv 에 해당하는 데몬들에 대한 모든 상황에 대한 기록을 /var/log/secure 파일에 하라는 의미이다. 즉 authpriv 에 속하는 서비스들은 xinetd(tcp_wrapper), telnet, ftp, finger 등이므로 이 데몬들에 대한 모든 상황발생에 대하여 /var/log/secure 로그파일에 기록한다. 즉 이 경우 xinetd에 관련된 데몬들은 /etc/xinetd.d/* 파일에 설정되어 있으며 해당되는 데몬들은 telnet, ftp, finger 등이다.

 

# 커널로그데몬과 시스템로그데몬 컨트롤하기

[root@localhost ~] # ps -ef | grep klogd

[root@localhost ~] # ps -ef | grep syslogd

 

[root@localhost ~] # /etc/rc.d/init.d/syslog restart | stop | start

 

# 로그구성 및 로그모니터링하기

시스템관리자는 자기가 관리하고 있는 서버의 로그파일을 항상 모니터링하고 또한 감시해야 한다. 그중에서 telnet 이나 ftp 또는 ssh 등으로 23번포트, 21번포트, 22번포트 등을 통해 들어오는 원격접속에 관련된 로그에 대하여 가장 예민하게 확인해야 한다. 이러한 원격접속에 관한 로그기록은 /etc/syslog.conf 파일에 정의되어 있는 것처럼 /var/log/secure 에서 하고 있다.

 

이들에 대한 로그를 계속적으로 모니터링하고자 한다면, "tail -f /var/log/secure"라고 하면 된다.

[root@localhost ~] # tail -f /var/log/secure

 

다음은 시스템로그파일이라고 하는 /var/log/messages 파일에 관한 실시간 모니터링방법이다. 즉, 거의 모든 시스템에 관련된 중요한 로그(event)들에 대한 기록은 모두 /var/log/messages 에 남겨지게 된다. /var/log/secure 파일처럼 실시간으로 계속 모니터링 하려면 "tail -f /var/log/messages" 라고 하면 된다.

[root@localhost ~] # tail -f /var/log/messages

[root@localhost ~] # dmesg | more

[root@localhost ~] # dmesg | grep Mem

[root@localhost ~] # tail -f /var/log/boot.log

[root@localhost ~] # tail -f /var/log/cron

 

# 마지막 로그인(접속) 정보 확인하는 법

lastlog 는 /etc/passwd 파일에 저장되어 있는 모든 계정의 최근 접속정보를 확인하는 명령어이다. 주로 시스템의 보안점검을 위하여 필수적으로 확인해 보아야 하는 명령어이다. 간단히 lastlog 라고만 하면 모든 계정들에 대한 마지막 접속정보를 출력한다.

 

[root@localhost ~] # lastlog

[root@localhost ~] # lastlog -u sspark

[root@localhost ~] # lastlog -t 10  // 10일 전부터 현재까지에 접속한 각 계정의 마지막 접속정보

 

# syslogd(시스템로그데몬)의 이해와 흐름도

이 로그데몬의 정식 이름은 "linux system logging utilities" 이다.

로그데몬 위치 : /sbin/syslogd

로그데몬 설정파일 : /etc/syslog.conf

로그데몬 PID 파일 : /var/run/syslogd.pid

로그데몬 구동 : /etc/rc.d/init.d/syslog start | stop | restart

 

로그데몬의 실행 흐름도

1) power on(System Boot)

2) booting media selection(ROM-BIOS)

3) GRUB(boot loader)

4) kernel, swapper(Loading in Memory) 

5) init(the First Process)

6) syslogd(Log Daemon) 

7) Log Service configuration file(/etc/syslog.conf) 

8) system log files (/dev/console, /var/log/messages, /var/log/secure, /var/log/maillog, /var/log/cron)

9) logrotate에 의한 로그파일의 관리(log management tool)

 

# init 프로세스에 의한 syslogd 실행(재시작)

시스템이 부팅되면서 처음으로 시작된다. 그리고 /etc/rc.d/init.d/syslog start 라는 명령의 수행으로 /sbin/syslogd 의 데몬프로세스가 수행된다.

 

1. syslogd.conf 읽음

/sbin/syslogd 데몬이 실행되면서 /etc/syslog.conf 파일을 읽어들이게 된다. 이 /etc/syslog.conf 파일에는 시스템에서 사용하는 대부분의 로그파일들에 관해 설정되어 있다.

 

2. syslogd.pid 기록

/sbin/syslogd 도 데몬이므로 이 프로세스의 실행번호(PID)를 /var/run/syslogd.pid에 기록하게 된다.

 

3. syslog.conf 에 설정된 각각의 로그파일들에 대한 로그 저장 시작

/sbin/syslogd 의 실행과 함께 syslog.conf 파일에 설정되어 있는 각각의 로그파일들(message, secure, maillog 등)이 기록되기 시작한다.

 

# 시스템로그파일 관리 마법사 logrotate 작동원리

리눅스를 설치하고 나면 다행히 logrotate 가 기본설정되어 있다. 즉, 시스템의 /var/log 디렉토레 보면 여러개의 시스템 로그파일들이 존재한다. 이들 파일들이 다음과 같은 형식으로 일정한 기준에 의해 자동관리되고 있다는 것을 확인할 수 있다.

 

# logrotate 서비스의 데몬과 관련파일들

/usr/sbin/logrotate : 데몬의 위치 및 데몬프로그램

/etc/logrotate.conf : 설정 파일

/etc/logrotate.d : logrotate 에 적용할 각종 로그파일들을 보관하는 디렉토리

/var/lib/logrotate.status : logrotate 한 작업내역을 보관한 파일

/etc/cron.daily/logrotate : logrotate 는 주기적으로 실행되어야 하므로 cron에 의해 일단위로 실행됨

 

# /etc/logrotate.conf 파일

weekly : 주단위로 로그파일을 로테이트(자른다)시킨다.

rotate 4 : 4주간의 로그파일을 보관한다. // logrotate 실행 결과 순환되는 파일들의 총갯수

create : 로그파일을 로테이트한 후에 빈 로그파일을 새로 생성한다.

include /etc/logrotate.d : /etc/logrotate.d 에 저장된 설정파일들을 불러들인다.

728x90
반응형