Linux 로그 경로 정리 · 07/50 · Part 1. Linux 로그 기본 구조

선행 학습 → 06. Linux 로그의 시간 정보 이해 · 기초 25. cut과 awk
이번 글 → 로그 메시지의 기본 구성
이어서 → 08. Syslog의 Facility와 Severity

1. 들어가며

SIEM이 로그를 "이해"한다는 것은 한 줄의 텍스트를 필드로 쪼갠다(파싱) 는 뜻입니다. 분석가도 마찬가지입니다. 필드 구조를 알아야 awk 로 뽑고, Wazuh decoder가 무엇을 추출하는지 검증할 수 있습니다.

핵심 요약

  • 전통 syslog 한 줄 = timestamp hostname tag[PID]: message
  • facility·severity는 파일에 보이지 않는다 — 전송·저장 과정의 메타데이터(PRI)다.
  • 메시지 본문(message)은 프로그램마다 형식이 다르다 → 여기서 사용자·IP를 추출.

2. 핵심 개념

필드설명보이는 곳
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본문콜론 뒤 전체

3. 로그 생성 구조

syslog 한 줄의 구조

프로그램:  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는 버려지고 보이지 않음

4. 실제 로그 경로

/var/log/secure (Rocky) · /var/log/auth.log (Ubuntu)   → 필드 분석 실습 대상
journalctl -o verbose                                  → 숨은 필드(PRIORITY, SYSLOG_FACILITY) 확인
/etc/rsyslog.conf  (template / module(load="builtin:omfile" Template=...))  → 파일 출력 형식

5. 명령어 실습

# 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

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 로그 한 줄의 필드

위 이미지는 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 ──────────────────────────┘

7. 로그 필드 분석

필드값분석 활용
timestampSep 20 02:14:52연도·TZ 보완 필요 (6편)
hostnameweb01중앙 수집 시 서버 식별
tagsshd이벤트 종류 필터
PID4101같은 세션의 open/close, 이후 sudo 의 부모 추적
message: 결과Accepted / Failed성공·실패 판정
message: 방식password / publickey비밀번호 로그인은 위험도 가중
message: 사용자deploy계정
message: 출발지203.0.113.45 port 51188IOC 후보

Wazuh의 sshd decoder는 이 message에서 srcip, srcport, dstuser 를 추출합니다(47편에서 실제 wazuh-logtest 결과로 확인).

8. 보안관점

  • 정상: 태그와 PID가 실제 프로세스와 일치 (sshd 는 sshd 바이너리가 남김).
  • 의심:
    • logger -t sshd "Accepted ..." 로 누구나 가짜 로그를 주입할 수 있다. 태그는 신뢰할 수 없는 필드다.
    • journal의 _COMM, _EXE, _UID(신뢰 필드, 언더스코어 시작)로 실제 기록 프로세스를 확인한다.
    • hostname이 다른 서버 이름으로 찍힌 로그 → 원격 전송 설정 또는 위조 확인.

9. SOC 관점

  • Normalization: SIEM은 서로 다른 형식의 로그를 srcip / user / action 같은 공통 필드로 맞춘다.
  • Triage: Alert의 full_log 원문과 추출 필드가 일치하는지 확인(파싱 오류로 인한 오탐 방지).
  • Investigation: PID로 세션 단위 이벤트를 묶고, 신뢰 필드(_UID, audit auid)로 주체를 확정.

10. 실습 체크리스트

[ ] syslog 한 줄을 7개 필드로 분해
[ ] awk 로 timestamp / host / tag / PID 추출
[ ] journal -o verbose 로 PRIORITY / SYSLOG_FACILITY 확인
[ ] PID 로 세션 이벤트 묶기
[ ] logger 로그 주입 위험과 신뢰 필드(_UID, _EXE) 설명 가능
[ ] message 에서 IOC 후보(IP·계정) 추출

11. 핵심 정리

  • syslog 한 줄은 timestamp hostname tag[PID]: message 구조다.
  • facility·severity는 PRI 값으로 전달되며 텍스트 파일에는 남지 않는다.
  • PID는 세션 단위 이벤트를 묶는 핵심 키다.
  • 태그는 위조 가능하므로 journal 신뢰 필드와 audit으로 주체를 확인한다.
  • SIEM의 파싱 결과는 항상 원문과 대조한다.

12. 다음 편 연결

구분글
◀ 이전 글06. Linux 로그의 시간 정보 이해
▶ 다음 글08. Syslog의 Facility와 Severity
시리즈Linux 로그 경로 정리 전체 보기
선행 시리즈리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글