Linux 로그 경로 정리 · 32/50 · Part 4. journald / rsyslog / auditd

선행 학습 → 31. systemd-journald 이해 · 기초 48. Linux 로그와 journalctl
이번 글 → journalctl 기본 사용법
이어서 → 33. journalctl 시간·서비스·우선순위 필터링

1. 들어가며

기초 48편에서 journalctl 의 기본 사용법을 소개했습니다. 이번 글은 같은 옵션을 "분석 질문 → 옵션" 으로 재정리합니다. 옵션을 외우는 대신 "무엇을 알고 싶은가"에서 출발합니다.

핵심 요약

  • 범위 3축: 부팅(-b) · 서비스(-u) · 시간(--since/--until) + 심각도(-p)
  • 출력 형식: 사람용 short-iso, 증거용 verbose, 도구용 json
  • 분석 결과는 항상 --no-pager 로 파일에 저장해 재현 가능하게 한다.

2. 핵심 개념

분석 질문옵션예
이번 부팅 이후 무슨 일이?-bjournalctl -b
직전 부팅 마지막 순간은?-b -1 -n 50재부팅 직전 로그
SSH에서 무슨 일이?-u sshd (Ubuntu: -u ssh)서비스 단위
오늘 발생한 경고 이상은?--since today -p warning심각도
사고 시간대만--since "2026-09-20 02:10" --until "2026-09-20 02:35"시간창
최근 N줄 / 최신순-n 20 / -r
실시간 관찰-f재현 테스트
커널만-kdmesg 대체
출력 형식(-o)용도
short (기본)전통 syslog 모양
short-iso / short-iso-precise연도·TZ 포함 — 보고서·타임라인용
verbose모든 필드 — 증거 캡처용
json / json-prettyjq 로 가공, SIEM 투입
cat메시지만

3. 로그 생성 구조

journalctl 핵심 옵션 지도

journal files (/var/log/journal 또는 /run/log/journal)
      │
journalctl ── 필터(-b / -u / --since / -p / 필드=값) ── 형식(-o) ── 출력(--no-pager > 파일)
      │
      └─ 분석 흐름: 넓게(-b, 시간창) → 좁게(-u, -p) → 깊게(-o verbose, 필드)

4. 실제 로그 경로

journalctl 은 기본적으로 /var/log/journal (없으면 /run/log/journal) 전체를 읽는다.
-D <dir>     : 다른 디렉터리의 저널 읽기 (수집한 저널 사본 분석)
--file <f>   : 특정 저널 파일만 읽기

포렌식 팁: 수집한 저널 사본은 journalctl -D /evidence/case-0920/journal/ 로 분석합니다. 원본 서버의 저널을 직접 건드리지 않습니다.

5. 명령어 실습

# 부팅 범위
journalctl --list-boots | tail -3
journalctl -b -o short-iso --no-pager | head -5
journalctl -b -1 -n 30 --no-pager 2>/dev/null       # 직전 부팅 마지막 30줄 (영구 저널일 때)

# 서비스 범위
journalctl -u sshd --since today -o short-iso --no-pager | tail -10

# 시간창 (사고 시간대)
journalctl --since "2026-09-20 02:10:00" --until "2026-09-20 02:35:00" -o short-iso --no-pager

# 심각도
journalctl -p err -b --no-pager | tail
journalctl -p 0..3 --since "-7d" --no-pager | tail      # emerg~err

# 형식
journalctl -u sshd -n 1 -o verbose --no-pager
journalctl -u sshd -n 3 -o json --no-pager | jq -r '[.__REALTIME_TIMESTAMP, ._PID, .MESSAGE] | @tsv'

# 저장 (분석 재현성)
journalctl -u sshd --since today -o short-iso --no-pager > /root/ir-case/sshd_today.txt

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — journalctl 기본

위 이미지는 Rocky Linux 9.8 실습 환경에서 journalctl 기본 옵션을 실제로 실행한 결과입니다.

아래는 형식 차이를 보여주는 예시 출력입니다.

[예시 · -o short]     Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
[예시 · -o short-iso] 2026-09-20T02:14:52+0900 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
[예시 · -o json(일부)] {"__REALTIME_TIMESTAMP":"1789838092000000","_PID":"4101","_SYSTEMD_UNIT":"sshd.service","MESSAGE":"Accepted password ..."}

7. 로그 필드 분석

형식시각 표현보고서 적합성
shortSep 20 02:14:52낮음 (연도·TZ 없음)
short-iso2026-09-20T02:14:52+0900높음
jsonepoch μs (UTC)도구 처리용 — 변환 필요

8. 보안관점

정상의심
--list-boots 가 운영 기간과 일치부팅 목록 앞부분이 최근에서 시작 (vacuum/삭제)
-u sshd 로그와 /var/log/secure 일치저널에는 있는데 파일에 없음 (파일 변조)
-p err 드묾사고 시간대 로깅 서비스 오류

9. SOC 관점

Alert 시각 T 수신
 ↓ journalctl --since "T-30m" --until "T+30m" -o short-iso   (넓게)
 ↓ journalctl -u <관련 서비스> 같은 시간창                    (좁게)
 ↓ journalctl _PID=<의심 PID> -o verbose                     (깊게, 33편)
 ↓ 결과 파일 저장 → 해시 기록 → 티켓 첨부

10. 실습 체크리스트

[ ] -b / -u / --since / -p 의 분석 질문 매핑
[ ] 직전 부팅 마지막 로그 조회
[ ] 사고 시간창 조회
[ ] short-iso / verbose / json 출력 비교
[ ] -D 로 수집 저널 사본 분석 방법 이해
[ ] 결과를 파일로 저장해 재현성 확보

11. 핵심 정리

  • journalctl은 부팅·서비스·시간·심각도 네 축으로 범위를 좁힌다.
  • 보고서에는 연도·TZ가 있는 short-iso 를 쓴다.
  • verbose 는 증거 캡처, json 은 자동화에 쓴다.
  • 수집한 저널 사본은 -D 로 분석해 원본을 보호한다.
  • 넓게 → 좁게 → 깊게의 순서로 조사한다.

12. 다음 편 연결

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

0개의 댓글