시스템 보안 및 관리 - 로그

2022. 2. 17. 01:35리눅스마스터 1급 - 필기/리눅스 시스템 관리

시스템에서 있었던 모든 이벤트들은 기록이 되는데 이렇게 기록된 것을 로그라고 합니다.

리눅스에서는 로그 기록 관련 패키지로 rsyslog를 사용하고 있습니다. (리눅스 초기에는 syslog)

rsyslog는 rsyslogd 데몬이 /etc/rsyslog.conf 설정 파일을 기반으로 /etc/log 디렉터리 내에 로그 파일을 생성 합니다.

 

systemctl start/stop rsyslog

- rsyslog 시작/중단

 

설정 파일(/etc/rsyslog.conf)에 대해 자세히 살펴 보겠습니다. 

 

facility : 서비스를 의미하며 메시지를 발생 시키는 유형을 알 수 있습니다.

- cron : cron, at과 같은 예약? 관련 프로그램이 발생시키는 메시지

- auth, security : 인증 프로그램이 발생시키는 메시지(로그인)

- authpriv : ssh, 사용자 추가와 같은 인증을 필요한 프로그램 유형이 발생한 메시지

- * : 모든 facility를 의미합니다.

 

priority : 위험의 정도를 의미합니다. 설정한 수준보다 높아야 메시지를 보냅니다.

=는 해당 레벨 위험도와 같은 경우에만 메시지를 보내고 !는 제외시킬때 사용합니다.

- none : 지정한 facility를 제외시킵니다.

- debug : 프로그램을 디버깅할 떄 발생하는 메시지입니다.

- notice : 주의는 필요하나 에러는 아닙니다.

- warning, warn : 주의가 필요한 경고 메시지입니다.

 

action : 메시지를 보낼 목적지나 행동에 관한 설정입니다.

- file : 지정한 파일에 로그를 기록합니다.

- @host : 지정한 호스트로 메시지를 전달합니다.

- user : 지정한 사용자가 로그인 한 경우 해당 사용자의 터미널로 전달합니다. :omusrmsg:사용자 형식으로 사용합니다.

- * : 현재 로그인한 모든 사용자의 화면으로 전달합니다.

 

facility.priority             action 형식으로 사용합니다.

 

*.emerg                     :omusrmsg:root,keum : 모든 emerg 수준 이상의 facility가 발생하면 root 사용자와 keum 사용자의 화면으로 메시지를 전달합니다.

 

 

로그 파일은 시스템을 이용할수록 끊임없이 내용이 추가되기 때문에 파일의 크기도 점점 커질 수 밖에 없습니다. 이를 방지하기 위해 로그 파일을 여러 개로 분할 시켜주는 프로그램인 logrotate 가 있습니다.

logrotate [옵션] 설정파일 형식으로 사용이 가능하지만 logrotate는 cron에 의해 주기적으로 실행 되고 있습니다.

 

시스템 관련 로그 설정은 /etc/logrotate.conf에서 제어하고 응용 프로그램은 /etc/logrotate.d 디렉터리 내에 위치하여 로그 파일들을 관리합니다.

 

/etc/logrotate.conf : 시스템과 관련된 기본적인 로테이트 설정 파일입니다.

 

weekly : 로그 파일을 일주일 주기로 로테이트 합니다.

 

rotate 4 : 최대 4번 까지 로테이트를 합니다.

 

create : 로테이트 실행 직후 빈 로그 파일을 생성합니다.

 

/var/lib/logrotate.status : 각 로그별로 로테이션된 날짜가 기록된 파일입니다.

 

 

로그 관련 주요 파일

/var/log/message : 시스템에서 발생하는 메시지가 기록되는 파일이며 대부분의 로그가 여기에 기록됩니다.

 

/var/log/secure : 인증에 기반한 로그가 기록되는 파일입니다.

 

/var/log/maillog : 메일 관련 작업이 기록되는 로그 파일입니다.

 

/var/log/xferlog : FTP 접속과 관련된 작업이 기록되는 로그 파일로 14개의 영역으로 구성되어 있습니다.

- current-time : 접속한 현재 시간을 나타냅니다. "DDD MMM dd hh mm ss YYYY"

- transfer-time : 전송된 총 시간을 초 단위로 나타냅니다.

- remote-host : 원격 호스트의 IP가 기록됩니다.

- file-size : 전송 된 크기를 나타냅니다.

- filename : 파일 이름을 나타냅니다. (절대 경로)

- transfer-type : 전송 형태를 a 혹은 b로 나타냅니다. a = ascii, b = binary

- special-action-flag : 특정한 action이 발생하는 것을 문자로 나타냅니다.

C = 파일 압축된 경우, U = 파일이 압축되지 않은 경우, T = tar로 묶여진 경우, _ = 아무런 action이 발생하지 않은 경우

- direction : 전송된 방향에 대한 표시로 o는 outgoing으로 다운로드된 경우이고 i는 incoming으로 업로드된 경우입니다.

- access-mode : 사용자가 어떠한 형태로 로그인 했는지를 나타냅니다. a = anonymous(익명), g = guest(패스워드를 소유한 user), r = real(인증한 사용자)

- username : 로컬 사용자의 ID를 나타냅니다.

- service-name : 발생되어지는 service의 이름이 적히며 보통 ftp로 기록됩니다.

- authentication-method : 어떠한 인증 방법을 사용했는지 표시합니다. 0은 none(기본 인증), 1은 RFC931 Authenticatin

- authentication-user-id : 인증 방법에 의해 사용자 계정이 기록되며 authentication-method와 연계되어 0은 *로 표시됩니다.

- completion-status : 전송 상태를 하나의 문자로 표시합니다. c = complete(완전한 전송), i = incomplete(불완전한 전송)

 

/var/log/lastlog : telnet이나 ssh를 통해 접속한 사용자들의 마지막 정보가 기록되는 파일입니다. lastlog 명령어로 확인 할 수 있습니다. (바이너리 파일입니다.)

 

/var/log/wtmp : telnet, ftp 등으로 접속한 사용자의 기록과 시스템 재부팅 로그가 기록되는 파일입니다. last 명령으로 확인 할 수 있습니다. (바이너리 파일입니다.)

 

/var/log/btmp : wrmp와는 반대로 접속에 실패한 경우를 기록합니다. lastb 명령으로 확인 할 수 있습니다. (바이너리 파일입니다.)

 

dmesg : 커널의 동작과 관련된 메시지를 기록하는 커널 링 버퍼의 내용을 출력하고 제어하는 명령어입니다.