Linux 로그 경로 정리 · 07/50 · Part 1. Linux 로그 기본 구조
선행 학습 → 06. Linux 로그의 시간 정보 이해 · 기초 25. cut과 awk
이번 글 → 로그 메시지의 기본 구성
이어서 → 08. Syslog의 Facility와 Severity
SIEM이 로그를 "이해"한다는 것은 한 줄의 텍스트를 필드로 쪼갠다(파싱) 는 뜻입니다. 분석가도 마찬가지입니다. 필드 구조를 알아야 awk 로 뽑고, Wazuh decoder가 무엇을 추출하는지 검증할 수 있습니다.
핵심 요약
- 전통 syslog 한 줄 =
timestamp hostname tag[PID]: message- facility·severity는 파일에 보이지 않는다 — 전송·저장 과정의 메타데이터(PRI)다.
- 메시지 본문(message)은 프로그램마다 형식이 다르다 → 여기서 사용자·IP를 추출.
| 필드 | 설명 | 보이는 곳 |
|---|---|---|
| timestamp | 기록 시각 | 파일 1~3번째 토큰 |
| hostname | 기록한 호스트 | 4번째 토큰 (원격 수집 시 출처 식별 핵심) |
| process (tag) | 프로그램 이름 | sshd, sudo, CROND |
| PID | 프로세스 ID | [4101] — 같은 세션의 여러 줄을 묶는 키 |
| facility | 메시지 분류 (auth, cron, mail…) | 파일에는 없음, journal SYSLOG_FACILITY |
| severity | 심각도 (err, warning, info…) | 파일에는 없음, journal PRIORITY |
| message | 본문 | 콜론 뒤 전체 |

프로그램: syslog(LOG_AUTHPRIV | LOG_INFO, "Accepted password for %s from %s ...")
│ │
│ └─ severity = info (6)
└─ facility = authpriv (10)
↓
PRI = facility×8 + severity = 10×8 + 6 = <86> ← 전송 시 헤더
↓
rsyslog 규칙 authpriv.* → /var/log/secure
↓
파일 저장 (Traditional): Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy ...
└ PRI는 버려지고 보이지 않음
/var/log/secure (Rocky) · /var/log/auth.log (Ubuntu) → 필드 분석 실습 대상
journalctl -o verbose → 숨은 필드(PRIORITY, SYSLOG_FACILITY) 확인
/etc/rsyslog.conf (template / module(load="builtin:omfile" Template=...)) → 파일 출력 형식
# 1) 필드 위치 확인: 1~3 시간, 4 호스트, 5 태그[PID]
tail -3 /var/log/secure | awk '{print "TS="$1" "$2" "$3" | HOST="$4" | TAG="$5}'
# 2) 태그와 PID 분리
tail -3 /var/log/secure | awk '{split($5,a,/[\[\]:]/); print a[1], a[2]}'
# 3) 숨은 필드(facility/severity)는 journal 에서
journalctl -u sshd -n 1 -o verbose | grep -E 'PRIORITY|SYSLOG_FACILITY|SYSLOG_IDENTIFIER|_PID|MESSAGE'
# 4) 같은 PID 의 연속 이벤트 묶기 (세션 추적)
grep 'sshd\[4101\]' /var/log/secure

위 이미지는 Rocky Linux 9.8 실습 환경에서 실제로 실행한 결과입니다.
아래는 필드 설명용 예시 로그입니다.
[예시 로그]
Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
└──timestamp──┘ └host┘ └tag┘└PID┘ └──────────────────────── message ──────────────────────────┘
| 필드 | 값 | 분석 활용 |
|---|---|---|
| timestamp | Sep 20 02:14:52 | 연도·TZ 보완 필요 (6편) |
| hostname | web01 | 중앙 수집 시 서버 식별 |
| tag | sshd | 이벤트 종류 필터 |
| PID | 4101 | 같은 세션의 open/close, 이후 sudo 의 부모 추적 |
| message: 결과 | Accepted / Failed | 성공·실패 판정 |
| message: 방식 | password / publickey | 비밀번호 로그인은 위험도 가중 |
| message: 사용자 | deploy | 계정 |
| message: 출발지 | 203.0.113.45 port 51188 | IOC 후보 |
Wazuh의 sshd decoder는 이 message에서 srcip, srcport, dstuser 를 추출합니다(47편에서 실제 wazuh-logtest 결과로 확인).
sshd 는 sshd 바이너리가 남김).logger -t sshd "Accepted ..." 로 누구나 가짜 로그를 주입할 수 있다. 태그는 신뢰할 수 없는 필드다._COMM, _EXE, _UID(신뢰 필드, 언더스코어 시작)로 실제 기록 프로세스를 확인한다.srcip / user / action 같은 공통 필드로 맞춘다.full_log 원문과 추출 필드가 일치하는지 확인(파싱 오류로 인한 오탐 방지)._UID, audit auid)로 주체를 확정.[ ] syslog 한 줄을 7개 필드로 분해
[ ] awk 로 timestamp / host / tag / PID 추출
[ ] journal -o verbose 로 PRIORITY / SYSLOG_FACILITY 확인
[ ] PID 로 세션 이벤트 묶기
[ ] logger 로그 주입 위험과 신뢰 필드(_UID, _EXE) 설명 가능
[ ] message 에서 IOC 후보(IP·계정) 추출
timestamp hostname tag[PID]: message 구조다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 06. Linux 로그의 시간 정보 이해 |
| ▶ 다음 글 | 08. Syslog의 Facility와 Severity |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |