시스템 로그 (System Log)
리눅스 시스템에서 모든 사건이나 이벤트 등은 각 서비스 별로 기록되는데, 이러한 기록들을 로그(log)라고 부른다.
로그 분석은 시스템 관리 및 보안에 상당히 중요한 역할을 담당하기 때문에 꼭 숙지해야 한다.
리눅스 초기에는 로그 기록과 관련된 패키지로 syslog를 사용했지만,
최근 리눅스 배포판에서는 syslog의 성능을 대폭 강화한 패키지인 rsyslog 를 사용한다.
rsyslog는 멀티스레드, TCP, SSL 및 TLS, RELP, MySQL과 같은 데이터 베이스, 보내는 목록 제한, 메시지 일부 필터링, 출력 포맷 제어 등과 같은 다양한 기능을 지원하고 있다.
로그(Log) 관련 파일
1. /var/log/messages
시스템에서 발생하는 표준 메시지가 기록되는 파일로 대부분의 로그가 이 파일에 쌓인다.
root만 읽을 수 있도록 설정되어 있다.
2. /var/log/secure
인증을 기반으로한 접속과 관련된 로그가 기록되는 파일이다.
3. /var/log/dmesg
시스템 부팅할 때 출력되었던 로그가 기록되며, 커널 부트 메시지 로그라고 한다.
4. /var/log/maillog
메일 관련 작업이 기록되는 로그 파일이다.
5. /var/log/xferlog
FTP 접속과 관련된 작업이 기록되는 파일이다.
6. /var/log/cron
cron 관련 정보가 기록되는 파일이다.
7. /var/log/boot.log
부팅 시 동작하는 데몬 관련 정보가 기록된다.
8. /var/log/lastlog
telnet 이나 ssh를 이용해 접속한 각 사용자의 마지막 정보가 기록되는 파일이다.
9. /var/log/wtmp
콘솔, telnet, ftp 등 이용하여 접속한 사용자 기록, 시스템을 재부팅한 기록 등의 로그가 기록한다.
10. /var/log/btmp
wtmp와 반대되는 로그로 접속이 실패한 경우를 기록한다.
rsyslog
rsyslog는 rsyslogd 데몬이 /etc/rsyslog.conf 설정 파일을 기반으로 서비스별 로그 파일을 /var/log 디렉터리에 생성한다.
rsyslog 주요 파일
/etc/rsyslog.conf : rsyslogd 데몬의 환경 설정 파일
/etc/sysconfig/rsyslog : rsyslogd 데몬이 실행과 관련된 옵션이 설정되는 파일
/usr/sbin/rsyslogd : 실제 rsyslogd 데몬 실행 명령
/usr/lib/systemd/system/rsyslog.service : systemctl 명령어 의해 제어되는 유닛 파일
/etc/rsyslog.conf
[facility].[priority] [action]
facility : 메시지를 발생시키는 프로그램 유형
priority : 위험의 정도를 나타내는데, 설정한 수준보다 높으면 메시지를 보냄
action : 메시지를 보낼 곳으로, 보통 파일명이나 아이디 등을 적음
rsyslogd 데몬의 환경 설정 파일이다.
facility의 종류
facilty | 설명 |
* | 모든 facility 의미 |
cron | cron, at과 같은 스케줄링 프로그램이 발생한 메시지 |
auth, security | login과 같은 인증 프로그램 |
authpriv | ssh와 같이 인증을 필요한 프로그램 |
daemon | telnet, ftp와 같이 여러 데몬이 발생한 메시지 |
kern | 커널이 발생한 메시지 |
lpr | 프린트 유형의 프로그램이 발생한 메시지 |
mail 시스템이 발생한 메시지 | |
mark | syslogd에 의해 만들어지는 날짜 유형 |
news | 유즈넷 뉴스 프로그램 유형이 발생한 메시지 |
syslog | syslog 프로그램 유형이 발생한 메시지 |
user | 사용자 프로세스 |
uucp | UUCP(UNIX to UNIX Copy Protocol) 시스템이 발생한 메시지 |
local0~local7 | 여분으로 남겨둔 유형 |
priority의 종류
priority | 설명 |
none | 지정한 facilty를 제외 |
debug | 프로그램 디버깅할때 발생하는 메시지 |
info | 통계, 기본 정보 메시지 |
notice | 특별한 주의는 필요하나, 에러는 아닌 메시지 |
warning, warn | 주의가 필요한 경고 메시지 |
error, err | 에러가 발생한 경우 메시지 |
crit | 크게 급하진 않지만 시스템에 문제가 생긴 단계의 메시지 |
alert | 즉각적인 조정을 해야하는 상황 |
emerg, panic (emergency) |
모든 사용자에게 전달해야 할 위험한 상황, 가장 최고 수준의 위험한 상황 |
action의 종류
action | 설명 |
* | 현재 로그인 되어 있는 모든 사용자의 화면으로 전달 (예 : ":omurmsg:*") |
file | 지정한 파일에 로그를 기록, 절대경로 기입 (예 : /var/log/messages) |
@host | 지정한 호스트로 메시지 UDP기반으로 전달 (예 : *.* @192.168.12.22) |
@@host | 지정한 호스트로 메시지 TCP기반으로 전달 (예 : *.* @@192.168.12.22) |
user | 지정한 사용자가 로그인한 경우 해당 사용자의 터미널로 전달 (예 : "*omusrmsg:root,posein,yuloje") |
콘솔 또는 터미널 | 지정한 터미널로 메시지 전달 (예 : /dev/tty2) |
[사용 예시]
# *.emerg :omusrmsg:*
-> 모든 emerg 수준 이상의 문제가 발생하면 모든 사용자에게 메시지를 전달한다.
# *.emerg(혹은 *.panic) root,ihduser(혹은 :omusrmsg:root,posein)
-> 모든 서비스에 대해 가장 최고 수준의 위험한 상황인 경우에 root 및 ihduser 사용장의 터미널로 관련 로그를 전송한다.
# mail.=error(혹은 mail.=err) /var/log/mail_error
-> 매일 서비스에서 발생하는 error 수준 메시지만 /var/log/mail_error에 기록한다.
# authpriv.* /dev/tty2
->인증 서비스 관련 로그는 로컬 시스템의 두 번째 터미널로 전송한다.
# authpriv.* @@192.168.12.22
->ssh와 같은 인증관련 모든 메시지는 TCP기반으로 192.168.12.22 호스트에게 전달하여 기록한다
# mail.*;mail.!=info /var/log/mail
-> mail 관련된 모든 메시지는 /var/log/mail에 기록하는데, info 수준의 로그는 제외한다.
# uucp,news.crit /var/log/news
-> uucp 및 news에서 발생하는 crit 수준 이상의 메시지는 /var/log/news에 기록한다.
로그(Log) 관련 명령어
last
last [option] [사용자명] [ttyn]
- 사용자의 로그인 정보 및 재부팅한 정보 출력
- /var/log/wtmp 파일의 정보 출력
[사용 예시]
# last ihduser
-> ihduser 사용자의 로그인 정보를 출력한다.
# last -2 reboot
-> 최근에 재부팅한 정보 2개만 출력한다
# last 3
또는
# last tty3
-> 로컬 시스템의 3번째 터미널 창(/dev/tty3)에 로그인이 성공한 정보를 출력한다.
lastlog
lastlog [option]
-u(--user) 사용자명 : 특정 사용자에 대한 정보만 출력
- 사용자가 마지막으로 로그인한 정보 출력
- /var/log/lastlog 파일 내용 출력
[사용 예시]
# lastlog -u ihduser
->ihduser 사용자의 최종 접속한 로그 기록만 출력
lastb
lastb [option] [사용자명]
-n 숫자(-숫자) : 가장 최근부터 해당하는 숫자값 만큼만 출력
- last와 반대되는 명령으로 로그인 실패 정보 출력
- /var/log/btmp 파일 내용 출력
- root만 사용 가능
[사용 예시]
# lastb ihduser
-> ihduser 사용자의 로그 실패 기록 출력한다
# lastb -n 3
또는
# lastb -3
-> 가장 최근에 로그인에 실패한 3개의 기록 출력한다
logrotate
로그 파일은 계속 쌓아서 관리하기 때문에 파일의 크기가 점점 늘어나게 된다. 이를 방지하기 위해 로그 파일을 여러개로 분할해 주는 프로그램이 logrotate이다.
logrotate는 로그 파일의 자동 로테이션 기능, 압축 기능, 제거 등 을 지원한다.
logrotate [option] config_file
-f (--force) : 강제로 환경 설정 파일을 읽어 들여서 실행
/etc/logrotate.conf
weekly : 로그 파일을 일주일마다 로테이트
(daily, weekly, monthly, yearly 사용)
rotate 4 : 최대 4번 까지 rotate 하는 설정
create [허가권값] [소유자] [소유그룹] : 로테이트 한 후 비어 있는 로그 파일 생성
dateext : 로테이션으로 생성되는 로그 파일에 해당 날짜 덧붙여 생성
compress : 로테이트 한후 생성되는 로그 파일 압축
include /etc/logrotate.d : /etc/logrotate.d 디렉터리 안에 설정된 파일도 로테이트 적용
nomissingok : 로그 파일이 존재하지 않는 경우에도 에러 메시지 출력
missingok : 로그파일이 존재하지 않는 경우에 에러메시지 출력하지 않고 다음파일로 넘어감
시스템과 관련된 로그 설정 파일이다.
[사용 예시]
/var/log/wtmp {
weekly
missingok
create 0600 root utmp
rotate 5
}
-> 로그인에 설공한 사용자 및 재부팅한 내용이 저장되는 로그 파일은 일주일 단위로 로테이션을 실행한다.
또한 로그 파일이 존재하지 않은 경우 에러 메시지를 출력하지 않고 다음 파일로 넘어간다.
/var/lib/logrotate.status
로그 파일별로 로테이션된 날짜가 기록된 파일이다.
'서버 운영 > Linux' 카테고리의 다른 글
리눅스 커널 설정 sysctl 명령어 (0) | 2021.10.15 |
---|---|
Linux 시스템 보안 ssh 관리 및 명령어 (원격 접속) (0) | 2021.10.15 |
리눅스 RAID 구성 및 명령어 mdadm (0) | 2021.10.13 |
리눅스 LVM 구성 및 명령어 (PV, VG, LV) (0) | 2021.10.13 |
리눅스 시스템 및 주변 장치 정보 확인 (0) | 2021.10.13 |