(4) 시스템 로그 설정과 관리
개요
- 유닉스/리눅스 로그가 저장되는 경로는 시스템마다 조금씩 다르다. 일반적으로 유닉스의 경우 /var/adm 디렉터리에 주로 저장되며 리눅스의 경우 /var/log 디렉터리에 주로 저장된다.
- 리눅스에서는 /var/log 디렉터리에 시스템의 모든 로그를 기록 및 관리하고 있다.
시스템의 /etc/syslog.conf 파일에서 시스템 로그 파일들의 위치를 지정하고 있다. - 서버에는 여러 개의 로그 파일이 있으며 이들 로그를 남기는 데몬들 또한 다양하다. 시스템로그데몬(syslogd), 메일데몬(sendmail 등), 웹데몬(httpd), 네임서버데몬(named), 슈퍼데몬(xinetd) 등 매우 다양하다.
유닉스/리눅스 주요 로그 파일
- utmp(x) 로그파일(리눅스/유닉스)
- 개요
- 현재 로그인한 사용자의 상태정보를 담고 있는 로그 파일
- binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 'w', 'who', 'finger' 등의 명령어를 이용한다.
- 리눅스 : /var/run/utmp
- 유닉스 : /var/adm/utmpx
- 'w' 명령어 실습
- USER : 로그인 계정, TTY : 터미널 장치명, FROM : 원격 호스트 주소, LOGIN@ : 로그인한 시간, IDLE : 아무 입력도 수행하지 않은 idel 시간, WHAT : 현재 수행하는 작업(명령어)
- 개요
- wtmp(x) 로그파일(리눅스/유닉스)
- 개요
- 사용자의 성공한 로그인/로그아웃 정보, 시스템의 Boot/Shutdown 정보에 대한 히스토리를 담고 있는 로그 파일
- binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 last 명령어 사용
- 리눅스 : /var/log/wtmp, 유닉스 : /var/adm/wtmpx
- 'last' 명령 실습
- last 명령을 실행하면 모든 계정에 대한 로그인/로그아웃 정보를 출력한다. 특정 계정에 대한 로그인/로그아웃 정보를 보려면 'last 계정명' 형식으로 실행한다.
- last 명령을 통해 계정명, 터미널 타입, 접속 주소, 로그인 시간, 로그아웃 시간 등을 확인할 수 있다.
- 기록을 통해 boot/shutdown 정보를 확인할 수 있다.
- 개요
- 'lastlog' 로그 파일(리눅스/유닉스)
- 개요
- 가장 최근에(마지막으로) 성공한 로그인 기록을 담고 있는 로그 파일
- binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastlog, finger 명령어를 사용한다.
- 리눅스 : /var/log/lastlog, 유닉스 : /var/adm/lastlog
- lastlog 명령 실습
- lastlog 명령을 실행하면 모든 계정의 최근 접속 기록을 확인할 수 있다. 자주 사용하는 인수로는 'lastlog -u 계정명' 을 통해 사용자 계정을 지정하면 해당 계정의 최근 접속 기록을 확인할 수 있으며 'lastlog -t 일수' 인수를 통해 해당 일수 이내에 접속한 기록을 확인할 수 있다.
- finger 명령 실습
- finger 계정명을 통해 해당 계정의 마지막 로그인 정보를 확인할 수 있다.
- 개요
- btmp(리눅스), loginlog(유닉스) 로그 파일
- 개요
- 실패한 로그인 시도에 대한 기록을 담고 있는 파일
- 리눅스 : /var/log/btmp, 바이너리 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastb 명령을 사용한다. 실패한 모든 로그를 남긴다.
- 유닉스 : /var/adm/loginlog, 텍스트 파일로 되어 있으므로 vi 등의 편집기를 통해 로그 내용을 확인해 볼 수 있다. 5회 이상 실패시 실패한 로그를 남긴다.
- lastb 명령 실습(리눅스)
- lastb 명령을 통해 시스템 모든 사용자의 로그인 실패 기록을 확인할 수 있으며 lastb 계정명을 통해 특정 계정에 대한 로그인 실패 기록을 확인할 수 있다.
- loginlog 내용 확인 실습(유닉스)
- 텍스트 형식으로 loginlog 파일에 저장되므로 텍스트 편집기를 통해 확인 가능하다.
- SUN OS 를 포함한 Sytem V 계열 유닉스에서는 5회 이상 로그인 실패 시 로그인 실패 기록을 파일에 남긴다.
- 개요
- sulog 로그 파일(유닉스)
- 개요
- su(switch user) 명령을 사용한 결과를 저장한 파일로 Sun OS를 포함한 Unix 계열에서만 볼 수 있다.
- 유닉스 : /var/adm/sulog , 텍스트 파일로 되어 있으므로 vi 등의 편집기를 통해 로그 내용을 확인할 수 있다.
- 리눅스 계열의 경우 /var/log/secure 로그 파일에 su 명령을 사용한 결과가 남는다.
- sulog 내용 확인 실습(유닉스)
- sulog 로그 파일의 내용을 살펴보면, + 기호는 su 명령이 성공했음을 의미하고 - 기호는 su 명령이 실패했음을 의미한다.
- root 계정으로의 su 실패는 주의깊게 살펴봐야 한다.
- 개요
- acct/pacct 로그 파일(유닉스/리눅스)
- 개요
- acct/pacct 로그 파일은 시스템에 로그인한 모든 사용자가 로그아웃할 때까지 입력한 명령어와 터미널의 종류, 프로세스 시작 시간 등을 저장한 로그이다.
- binary 파일로 되어 있으며 그 내용을 확인하기 위해서는 lastcomm 명령을 사용한다.
- 리눅스 : /var/account/pacct, 기본 생성되는 로그 파일이 아니므로 accton /var/account/pacct 명령 필요
- 유닉스 : /var/adm/pacct, 기본 생성되는 로그 파일이 아니므로 /usr/lib/acct/accton /var/adm/pacct 명령 실행 필요
- lastcomm 명령 실습
- 실행한 명령어, 플래그, 실행한 사용자명, 터미널 타입, 프로세스 시작 시간 정보를 보여주고 있다.
- 플래그 정보에는 S(super user, root 에 의해 실행), F(exec 없이 fork에 의해 실행), X(sigterm 터미널에 의해 종료) 등이 있다.
- 개요
- history 로그 파일(리눅스/유닉스)
- 개요
- 각 계정별로 실행한 명령어에 대한 기록을 저장한 파일로 각 계정별 홈 디렉터리에 존재한다.
- 로그 파일은 '.쉘종류_history' 형식으로 생성되며 텍스트 파일로 되어 있으므로 vi등의 편집기를 통해 로그 내용을 확인해보거나 history 명령을 이용할 수 있다.
- history 로그 실습 : ls -al .bash_historoy
- 개요
- secure 로그 파일(리눅스)
- 개요
- 주로 사용자/그룹 생성/삭제, 로그인 등의 사용자 인증에 대한 정보를 기록하고 있는 로그 파일로서 서버보안에 아주 민감하고 중요한 파일이다.
- 원격에서 접속한 내용과 su 명령을 수행한 내역 등이 저장된다.
- 리눅스 : /var/log/secure
- 개요
- message 로그 파일(리눅스
- 개요
- 리눅스 시스템의 가장 기본적인 시스템 로그 파일로 시스템 운영에 대한 전반적인 메시지를 저장하고 있다.
- 주로 시스템 데몬들의 실행상황과 내역, 사용자들의 접속정보, TCP Wrapper 접근 제어 정보 등을 저장한다.
- 리눅스 : /var/log/messages
- 개요
- dmesg 로그 파일(리눅스)
- 개요
- 리눅스가 부팅될 때 출력되는 모든 메시지를 기록하고 있다. 부팅 시의 에러나 조치사항을 살펴보려면 이 파일을 참조해야 한다.
- 텍스트 형식의 로그 파일을 보거나 dmesg 명령을 통해 내용을 확인할 수 있다.
- 리눅스 : /var/log/dmesg
- 개요
- boot.log 로그 파일(리눅스)
- 개요
- 리눅스가 부팅될 때 파일 시스템에 대한 체크, 서비스 데몬들의 실행 상태 등을 기록하고 있는 로그파일로 성공/실패 여부를 확인할 수 있다.
- 리눅스 : /var/log/boot.log
- 개요
- xferlog 로그 파일(리눅스)
- 개요
- 리눅스 시스템의 FTP 로그 파일로서 proftpd 또는 vsftpd 데몬들의 서비스 내역을 기록하는 파일이다.
- FTP로 로그인하는 사용자에 대한 로그 기록과 어떤 파일을 업로드/다운로드 하였는가에 대하여 상세하게 기록한다.
- 리눅스 : /var/log/xferlog
- 로그 형식 : 전송 날짜 및 시간 | 전송 소요 시간 | 원격 호스트 주소 | 전송 파일 크기 | 전송 파일명 | 전송 파일 종류 | 액션 플래그/FTP 서비스 내 적용 내용 | 전송 방향 | 사용자 접근 방식 | 로그인 사용자명 | 서비스명 | 사용자 인증 방법 | 인증 사용자 ID | 파일 전송 상태
- 개요
- cron 로그 파일(리눅스)
- 시스템의 정기적인 작업에 대한 로그, 즉 시스템 cron 작업에 대하여 기록하고 있는 파일이다.
- /etc/디렉터리에는 cron.hourly, cron.daily, cron.weekly, cron.monthly 디렉터리들이 있다. 이 디렉터디들은 각각 시간별, 일별, 주별, 월별로 정기적으로 운영체제에서 자동 실행할 작업 스크립트 파일들이 존재하고 있다.
- 리눅스 : /var/log/cron
- mailog 로그 파일(리눅스)
- 이 로그파일은 sendmail 또는 qmail 등과 같은 메일 송수신 관련 내역들과 ipop 또는 imap 등과 같은 수신내역들에 대하여 기록한다.
- 이 로그 파일은 '메일 로그파일'이라고도 한다. 즉 메일에 관련된 거의 모든 것을 기록하는 로그파일이다.
- 리눅스 : /var/log/mailog
- mail 로그 파일(리눅스)
- 사용자들에 대한 메일을 보관하고 있는 디렉터리로서 메일을 한번 이상 사용한 사용자는 사용자 계정 ID와 동일한 파일이 하나씩 존재한다.
- 사용자 계정 생성 시에 /var/spool/mail 디렉터리 내에 생성하는 계정명과 동일한 메일 파일이 생성된다. 메일을 읽은 후에 사용자의 메일 디렉터리로 저장하거나 메일을 삭제했을 경우에는 이 파일에서 메일 내용이 삭제된다.
- 리눅스 : /var/spool/mail
syslog 설정 및 관리
- 개요
- 유닉스 시스템은 syslog 표준 인터페이스(API)를 통해 커널 및 응용 프로그램에 의해 발생하는 로그를 체계적으로 생성하고 관리한다.
- 동작방식을 살펴보면, 커널 및 응용 프로그램이 syslog API를 통해 로그를 생성하면 syslog 데몬 프로세스가 syslog.conf 설정 파일을 참조하여 지정한 로그 파일, 콘솔 또는 외부 서버 등에 로그를 기록한다.
- /etc/syslog.conf 파일은 시스템 로그 데몬이 실행될 때 참고되는 로그 설정 파일로서 어떤 로그를 어디에 남길지 로그 저장 규칙이 정의되어 있다. syslog.conf 파일의 각 행들은 다음과 같은 포맷으로 정의되어 있다.
- facility.priority; facility.prionrity.... action(logfile-location) : A 서비스(데몬)에 대하여 B 로그 레벨 이상의 상황이 발생한 경우 C의 형식으로 로그를 남겨라
- 최근 리눅스에서는 기존 syslog 를 개선한 rsyslog를 주로 사용한다. rsyslog.conf 설정파일을 사용함
- syslog는 기밀성, 무결성, 가용성 등 정보보호 특성을 고려하지 못하고 개발되었다. 따라서 UDP를 통해 로그를 전송할 때 공격자가 syslog 메시지를 모니터링하여 중요 정보를 알아낼 수 있다. 이 때문에 RFC 3795에서는 다음과 같은 보안 기능을 제공하도록 권고하고 있다.
- 로그 전송의 신뢰성 보장을 위해 연결 지향 프로토콜인 TCP를 이용하도록 권고
- syslog 메시지 전송 시 기밀성 보장을 위해 syslog 서버 및 log 수집대상 서버의 IP를 제외한 payload를 보호할 수 있는 BEEP을 이용하도록 권고
- BEEP 연결 지향적이고, 비동기적인 연결을 위한 응용 프로그램 프로토콜 프레임워크로 내부적으로 인증, 프라이버시, 재전송을 통한 신뢰성 등을 보장한다.
- facility : 로그 생성 서비스
- priority : 로그 수준(level)
- Emergency : 시스템이 전면 중단되는 패닉 상태
- Alert : 즉각적인 조치가 필요한 상황
- Critical : 하드웨어 등의 심각한 오류가 발생한 상황
- Error : 일반적인 에러/오류가 발생한 상황
- Warning : 경고 메시지
- Notice : 에러/오류는 아니지만 관리자의 조치가 필요한 상황
- Information : 의미 있는 정보 관련 메시지
- debug : 디버깅용 메시지
- facility에 로그 수준을 지정하게 되면 해당 수준이상의 상황이 발생했을 때 로그가 남게 된다.
- syslog.conf에 로그 수준을 '*'로 지정하면 모든 로그 수준의 로그를 남기겠다는 의미이며 none으로 설정하면 어떠한 경우라도 로그를 남기지 않겠다는 의미이다.
- action
- 로그를 어디녀에 남길것인지를 결정한다. 로그 파일, 콘솔, 원격 로그 서버, 특정 사용자 등에 로그를 남길 수 있다.
- 로그 파일 : 파일명 지정(/var/log/secure)
- 콘솔 : /dev/console로 지정 시 콘솔 출력
- 원격 로그 서버 : "@호스트 주소"를 통해 지정한 호스트로 로그를 보낸다.
- user : 지정된 사용자의 스크린으로 메시지를 보낸다.
- * : 현재 로그인되어 있는 모든 사용자의 스크린으로 메시지를 보낸다.
- 원격 로그 서버(rsyslogd) 설정 실습
- rsyslogd 데몬 프로세스를 원격 로그 서버로 만들기 위해 rsyslog.conf에 514/udp(syslog 기본 포트) 설정
- ps 및 netstat 명령을 통해 rsyslogd 데몬 기동 여부와 514/udp 포트 오픈 여부 확인
- 서버 방화벽(iptables)의 514/udp 포트를 허용한다.
- 원격 로그를 남길 bt 서버에서 rsyslog.conf에 *.*(모든 facility의 ahems 로그 수준)에 대해서 @192.168.197.133 서버에 로그를 남기도록 설정
- back99 계정에서 root 계정으로 su 시도 2회 실패
- secure 로그를 살펴보면 bt 호스트(원격 서버)에서 root 계정으로의 su 실패가 2건 발생했음을 확인할 수 있다.
- 로그를 어디녀에 남길것인지를 결정한다. 로그 파일, 콘솔, 원격 로그 서버, 특정 사용자 등에 로그를 남길 수 있다.
- syslog.conf(rsyslog.conf) 설정 예
- 책 참고
리눅스 로그 관리
- 로그 모니터링
- /var/log/secure 와 같은 테스트 형식의 로그를 실시간으로 계속 모니터링 하려면 'tail -f /var/log/messages' 명령을 이용하면 유용하다.
- tail 명령은 대상 파일의 마지막 n라인을 출력하는 명령어로 -f 옵션을 주면 실시간으로 추가되는 내용들을 출력해준다.
- utmp(x), wtmp(x), lastlog 등 바이너리 형식의 로그파일들은 cat이나 vi등의 텍스트 편집기를 통해서는 확인할 수 없다. 따라서 별도의 명령어를 이용하여 확인해야 한다.
- 로그파일 순환(rotate) 관리
- syslog나 데몬 프로세스가 출력하는 로그 파일을 그대로 방치하면 사이즈가 커지면서 관리하기 어려워지고 디스크 사용률이 100%가 되어 시스템 장애가 발생할 수 있는 문제가 있다.
- logrotate는 시스템 로그파일을 관리하기 위한 도구로 로그파일 순환, 압축 등의 기능을 가지고 있다.
- 데몬 : /usr/sbin/logrotate : logrotate 데몬 위치 및 데몬 프로그램
- 데몬 설정 파일 : /etc/logrotate.conf : 데몬 설정 파일
- 설정 디렉터리 : /etc/logrotate.d : logrotate를 적용할 프로세스/데몬 설정파일
- 상황 파일 : /var/lib/logrotate.status : logrotate 한 작업내역을 보관한 파일
- cron : /etc/cron.daily/logrotate : logrotate는 주기적으로 실행이 되어야 하므로 cron에 의해 일단위로 실행이 됨.
- logrotate 설정파일 주요 옵션
- daily, monthly, weekly : 일단위 월단위 주단위 로그파일 순환
- rotate n : 순환 로그파일의 개수를 n개로 설정
- create 퍼미션 소유자 소유그룹 : 순환시 새롭게 로그파일을 생성하며 퍼미션, 소유자, 소유그룹 지정이 가능
- dateext : 로그파일의 확장자로 날짜를 붙여서 보관
- compress, uncompress : 로그파일을 압축, 압축안함 보관
- size n : 지정한 크기가 되면 로그파일 순환
- include /etc/logrotate.d : 해당 디렉터리에 있는 개별 데몬/프로세스 설정 파일을 포함
- missingok : 로그파일이ㅇ 없어도 오류를 발생시키지 않는다.
- notifempty : not if empty 라는 의미로 로그파일이 비어있는 경우 순환하지 않음
- sharedscripts : 로그파일이 여러 개 있어도 스크립트를 공유하여 prerotate, postrotate 스크립트를 한번만 실행한다.
- postrotate / endscript : 순환 후 스크립트 파일 실행
'공부 > 정보보안기사 실기' 카테고리의 다른 글
[Section 02] UNIX/Linux 서버 취약점 (116 ~ 125pg) (0) | 2022.04.14 |
---|---|
[Section 01] 시스템 기본 학습 (104 ~ 115pg) (0) | 2022.04.13 |
[Section 01] 시스템 기본 학습 (62 ~ 85pg) (0) | 2022.04.11 |
[Section 01] 시스템 기본 학습 (53 ~ 61pg) (0) | 2022.04.10 |
[Section 01] 시스템 기본 학습 (처음 ~ 52pg) (0) | 2022.04.09 |