[Linux System Log] [01] 리눅스시스템로그현재의시스템에서일어나고있는모든작업이로그파일에기록이된다. 그러므로문제가발생하였을경우가장먼저해야할일이로그분석이다. 로그파일은시비스하고있는상황에따라하루에몇기가씩쌓일수도있다. 이에대해서정확하게분석하는작업과함께주기적으로파일을로테이션시켜부하를줄여야한다. 리눅스의 system log는기본적으로 syslogd(/sbin/syslogd) 데몬과그데몬의설정파일인 syslog.conf(/etc/syslog.conf) 파일에의해서기록이되고, cron과 logrotated에의해서주기적으로로테이션된다. (log는정책상다른서버에저장하는게보안상좋다.) [02] 로그파일의종류리눅스에서로그파일은일반적으로 /var/log/ 에기록이된다. 로그파일은운영하는서비스에따라서차이가나며 syslog.conf 설정에따라다르다. - boot.log : 부팅및각종서비스시작및중지에대한기록 - cron.log : cron( 작업스케줄러링 ) 활동관련기록 - dmesg : 시스템이부팅할때출력되는메시지들이기록된다. dmesg 명령어로확인 - lastlog : 사용자의마지막로그인시간기록 (last 명령이용하여확인 ) - maillog : 메일과관련된로그를기록한다. 이파일을이용하여어떤메일들이오고가는지확인할수있고, 메일이오고간시간, 호스트, 데몬, 유저, 크기등을확인할수있다. - messages : kernel error, reboot message, log fail 등시스템콘솔에서출력된결과를기록하고 syslog에의하여생성된메시지도기록 - secure : log 인증및보안관련주요로그 (telnet, ssh log 기록 ) - wtmp : 사용자로그인, logout time, system 종료시간등기록 (last 명령이용하여확인 ) - xferlog : FTP 서버의데이터전송관련로그를기록한다. 이파일을이용하면불법파일이전송되었는지여부를확인할수있으며, 전송상황을모니터링할수있다. - utmp : 현재로그인한사용자에대한상태기록 (redhat 에서는 /var/run에있다. w,who 등을이용하여확인 ) - history : 각계정의 home directory에있으며사용자가 shell에서작업것을기록
[03] 로그관련명령어 # lastlog /var/log/lastlog 파일의내용을보여주는명령어 /etc/passwd 파일에선언되어있는게정중로그인이되는계정만접근한흔적이남아야한다. 사용자명 포트 ~ 로부터 최근정보 root pts/3 192.168.133.1 금 10월 10 16:49:24 +0900 2008 bin ** 한번도로그인한적이없습니다 ** hsqldb ** 한번도로그인한적이없습니다 ** xfs ** 한번도로그인한적이없습니다 ** gdm ** 한번도로그인한적이없습니다 ** doom pts/1 192.168.133.1 금 10월 10 16:17:53 +0900 2008 # last 특정계정에접근한시간과종료시간에대한부분이나와있다. /var/log/wtmp 파일을참고하여내용을보여준다. root pts/0 :0.0 Fri Oct 3 15:29 - down (00:26) root :0 Fri Oct 3 15:28 - down (00:27) reboot system boot 2.6.18-53.el5 Fri Oct 3 15:27 (00:28) root pts/0 :0.0 Fri Oct 3 15:23 - down (00:00) root :0 Fri Oct 3 15:22 - down (00:01) reboot system boot 2.6.18-53.el5 Sat Oct 4 00:18 (-8:-54) [TIP] # last 유저명을하게되면특정사용자의정보를확인할수있다. # lastb 접근하지못한계정, ip, service에대한정보를보여주는명령어이다. 무차별대입공격을확인할수있다. /var/log/btmp 파일을참고한다. ( 기본적으로 /var/log/btmp는존재하지않으므로, 파일을생성해줘야한다.) # w /var/log/utmp 파일에대한정보를참고하여실시간으로접근한유저의정보를보여주는명령어 [root@localhost log]# w 18:11:44 up 3:22, 3 users, load average: 0.05, 0.07, 0.03 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 192.168.133.1 15:41 0.00s 1.66s 0.07s w root pts/1 192.168.133.1 16:31 1:40m 0.22s 0.22s -bash root pts/2 192.168.133.1 16:49 1:22m 0.22s 0.22s bash # who w 명령어와마찬가지로 /var/log/utmp 파일의내용을참고한다. [root@localhost log]# who root pts/0 2008-10-10 15:41 (192.168.133.1) root pts/1 2008-10-10 16:31 (192.168.133.1)
root pts/2 2008-10-10 16:49 (192.168.133.1) [04] 로그관리프로그램 syslogd syslogd는리눅스의시스템로그를기록하는프로그램이다. 환경설정은 /etc/syslog.conf 파일로한다. (01) syslogd 데몬확인 [root@localhost log]# ps -ef grep syslogd root 1868 1 0 14:50? 00:00:00 syslogd -m 0 root 5034 4925 0 18:31 pts/0 00:00:00 grep syslogd (02) 환경설정파일 /etc/syslog.conf # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # Log anything (except mail) of level info or higher. # Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # Log cron stuff cron.* /var/log/cron # Everybody gets emergency messages *.emerg * # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler # Save boot messages also to boot.log local7.* /var/log/boot.log 위의파일의설정들을자세하게알아보자. 이파일의설정에는왼쪽에메시지를보내는서브시스템의이름을입력하고오른쪽에는그메시지를받는파일이나장치등을입력한다.
< 형식 > 서브시스템. 메시지종류 출력장치 서브시스템 auth, authpriv, cron, daemon, kern, lpr, mail, news, syslog, user, uucp, local0 ~ local7 메시지종류 ( 중요도순서 ) emerg : 시스템패닉 ( 시스템충돌 : 자동차가움직일수없는경우 ) alert : 치명적인에러, 즉시알려야하는내용 ( 변조된시스템데이터베이스 : 자동차는가지만일부장비가파손된경우 ) crit : 치명적인에러 ( 하드웨어에러, critical error) err : 에러 ( 일반적인에러상태 ) warn : 경고메시지 ( 시스템요구상황에러 ) notice : 알림메시지 ( 정상적인상태지만중대한상황 ) info : 정보메시지 debug : 디버그메시지 ( 실행중인프로세서의디버깅정보 ) none : 모든메시지를무시한다. # kern.* /dev/console 모든커널메시지를콘솔화면에출력하라는뜻이다. 기본적으로주석으로되어있다. *.info;mail.none;authpriv.none;cron.none /var/log/messages 메일, 인증, 크론을제외한모든정보들을 /var/log/messages에기록한다. authpriv.* 개인적인인증에대한정보들을 /var/log/secure에기록한다. /var/log/secure mail.* 메일과관련된정보들을 /var/log/maillog에기록한다. /var/log/maillog cron.* 크론과관련된정보들을 /var/log/cron에기록한다. /var/log/cron *.emerg /* 모든유저들이긴급메시지를받을수있게한다. uucp,news.crit /var/log/spooler 메일과뉴스에관한에러들을 /var/log/spooler에기록한다. local7.* /var/log/boot.log 시스템이부팅될때데몬의메시지들을 /var/log/boot.log에기록한다. [TIP] 본인은위설정을외부서버로설정 @: 아이피 을했었는데, syslog가일정시간에만 System
Down 되는경우가있었다. 원인을알아보니위의설정을잘못해서그런경우를알게되었다. [TIP] pkill hup PID 하면서비스중단없이재시작할수있다. 로그에관해서자주쓰이는명령어이므로꼭알아두자. # pkill -hup pkill: No matching criteria specified Usage: pkill [-SIGNAL] [-fvx] [-n -o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST] [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN] [05] logrotate 로그파일은특정한파일에지속적으로기록이된다. 이것은시간이지나면지날수록그파일의크기가커져시스템에서많은공간을차지하며, 시스템성능저하의원인을제공하기도한다. 이런문제점을해결하기위하여 logrotate를이용하여로그를정기적으로잘라서보관하도록한다. CentOS 5.1에는기본적으로설치되어있다. 확인해보자. # rpm qa grep logrotate logrotate-3.7.4-7 logrotate는기본적으로 /etc/cron.daily 디렉토리에포함되어있어서하루에한번실행된다. [root@localhost /]# cd /etc/cron.daily/ [root@localhost cron.daily]# ls 0anacron cups makewhatis.cron prelink tmpwatch 0logwatch logrotate mlocate.cron rpm [root@localhost cron.daily]# ls -F /etc/cron* /etc/cron.deny /etc/crontab /etc/cron.d: sa-update /etc/cron.daily: 0anacron* cups* makewhatis.cron* prelink* tmpwatch* 0logwatch@ logrotate* mlocate.cron* rpm* /etc/cron.hourly: /etc/cron.monthly: 0anacron* /etc/cron.weekly: 0anacron* makewhatis.cron*
환경설정파일인 /etc/logrotate.conf 파일을읽어들여로그를관리한다. # vi /etc/logrotate.conf < 설명 > weekly 로그파일을변경할기간을정한다. 기본설정은주단위로로그파일을변경한다. daily : 매일변경 weekly : 매주변경 monthly : 매달변경 rotate 4 순환될파일의개수를지정한다. 0부터시작하게되며위에서 weekly로설정했기때문에 4주간유지된다. create 로그파일을백업하고새로운파일을생성할것인지설정한다. #compress 백업할로그를압축하도록변경한다. 주석을해제하면백업파일을 gzip으로압축한다. include /etc/logrotate.d RPM 패키지들이로그순환정보를가진파일들이저장된디렉토리를불러온다. 이디렉토리에있는파일들이모두포함된다. /var/log/wtmp { monthly
create 0664 root utmp rotate 1 } 위의설정은 wtmp에대한설정을하는것이다. 한달단위로순환을하며, 백업은한달을보관하고, 백업파일은 root 사용자와 utmp 그룹의소유로 644 퍼미션을부여한다. [06] /etc/logrotate.d 이곳에는데몬들의로그순환설정을담고있는파일들이있다. 위의파일중 yum 파일을살펴보자. # vi /etc/logrotate.d/yum [root@localhost logrotate.d]# cat yum /var/log/yum.log { missingok notifempty size 30k create 0600 root root } - notifempty : 로그파일이비어있는경우순환을하지않는다. - size 30k : 로그파일의크기가 30k를넘지않도록한다. - create 0600 root root : 순환되어생성된파일의퍼미션을 0600으로소유자를 root로, 그룹을 root로지정한다.
http://cafe.naver.com/linuxlog krintiz@naver.com