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

선행 학습 → 32. journalctl 기본 사용법
이번 글 → journalctl 시간·서비스·우선순위 필터링
이어서 → 34. rsyslog 구조 이해

1. 들어가며

grep 은 문자열을 찾지만 journalctl 은 필드를 찾습니다. "PID 4101이 남긴 모든 로그", "UID 1001이 실행한 프로세스가 남긴 로그", "sshd와 sudo를 한 번에" 같은 질문은 필드 필터가 훨씬 정확합니다.

핵심 요약

  • 필드 매칭: journalctl FIELD=value — 같은 필드 반복은 OR, 다른 필드는 AND
  • + 로 조건 그룹을 OR 결합 (A B + C = (A AND B) OR C)
  • -F FIELD 로 존재하는 값 목록을 먼저 확인하면 오타·누락을 줄인다.

2. 핵심 개념

문법의미예
FIELD=value필드 일치_SYSTEMD_UNIT=sshd.service
F=a F=b같은 필드 → OR_COMM=sshd _COMM=sudo
F=a G=b다른 필드 → AND_UID=0 _COMM=bash
... + ...그룹 OR_COMM=sshd + _SYSTEMD_UNIT=cron.service
-F FIELD필드 값 목록journalctl -F _COMM
-g PATTERNMESSAGE 정규식 (systemd 237+)-g 'Failed password'
/usr/bin/sudo실행 파일 경로를 인자로 → _EXE 매칭journalctl /usr/bin/sudo

3. 로그 생성 구조

SOC용 journalctl 필터 조합

[시간창]  --since / --until
    ∩
[범위]    -b  /  -u UNIT
    ∩
[심각도]  -p warning..emerg
    ∩
[필드]    _COMM= / _UID= / _PID= / SYSLOG_FACILITY=
    ∩
[메시지]  -g 'regex'
    ↓
-o short-iso | -o json | jq  →  결과 저장

4. 실제 로그 경로

필터는 저널 파일 전체(/var/log/journal 또는 /run/log/journal, 또는 -D 로 지정한 수집본)를 대상으로 동작합니다.

5. 명령어 실습

SOC 조사 레시피:

# R1. 인증 관련 프로세스 전체 (sshd OR sudo OR su), 오늘
journalctl _COMM=sshd _COMM=sudo _COMM=su --since today -o short-iso --no-pager

# R2. 특정 세션(PID)의 모든 로그 — secure 에서 찾은 PID 로 이어서 조사
journalctl _PID=4101 -o short-iso --no-pager

# R3. root 로 동작한 셸이 남긴 로그 (AND)
journalctl _UID=0 _COMM=bash --since "-1d" --no-pager | tail

# R4. 가짜 로그 탐지: 태그는 sshd 인데 실제 기록자는 sshd 가 아님
journalctl SYSLOG_IDENTIFIER=sshd -o json --no-pager | jq -r 'select(._COMM != "sshd") | [._COMM, ._UID, .MESSAGE] | @tsv'

# R5. 사고 시간창 × 경고 이상 × 메시지 정규식
journalctl --since "2026-09-20 02:10" --until "2026-09-20 02:35" -p warning -g 'fail|denied|error' -o short-iso --no-pager

# R6. 시간창 안에서 로그를 남긴 프로세스 목록 (무엇이 활동했나)
journalctl --since "2026-09-20 02:10" --until "2026-09-20 02:35" -o json --no-pager | jq -r '._COMM' | sort | uniq -c | sort -rn

# R7. 존재하는 유닛/실행파일 목록 먼저 보기
journalctl -F _SYSTEMD_UNIT | sort | head -40
journalctl -F _EXE | grep -vE '^/usr/(s)?bin/(systemd|dbus)' | sort | head

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 필터 조합

위 이미지는 Rocky Linux 9.8 실습 환경에서 필터 조합을 실제로 실행한 결과입니다.

아래는 R6 레시피의 판단 예를 설명하는 예시 출력입니다.

[예시 출력: 사고 시간창 활동 프로세스]
     84 sshd
      6 sudo
      3 systemd
      2 useradd
      1 passwd
      1 crontab

7. 로그 필드 분석

결과해석
sshd 84무차별 대입 흔적 (실패 다수)
sudo 6권한 상승
useradd / passwd계정 생성 — 평소 시간창에는 없던 프로세스
crontab지속성 설정

"평소에 없던 _COMM" 이 시간창에 나타나는 것이 가장 빠른 이상 신호입니다. 같은 레시피를 평소 같은 요일·시간대에 돌려 기준선(baseline)과 비교합니다.

8. 보안관점

  • 정상: 필드 값 목록(-F)이 설치된 서비스와 일치.
  • 의심: _EXE 에 /tmp, /dev/shm, 숨김 경로 실행 파일 / R4에서 결과가 나옴(태그 위조) / 시간창에 처음 보는 _COMM.

9. SOC 관점

SOC 단계레시피
TriageR1, R5 (Alert 시각 기준 빠른 확인)
InvestigationR2 (세션 추적), R6 (활동 프로세스), R4 (위조)
IOC 추출`-o json
Detection 개선R6 결과로 기준선 구축 → 신규 프로세스 탐지 룰

10. 실습 체크리스트

[ ] 같은 필드 OR / 다른 필드 AND 규칙 이해
[ ] -F 로 필드 값 목록 확인
[ ] PID 기반 세션 추적 (R2)
[ ] 태그 위조 탐지 (R4)
[ ] 시간창 활동 프로세스 집계 (R6)
[ ] 기준선과 비교

11. 핵심 정리

  • journalctl 필드 필터는 문자열 검색보다 정확하다.
  • 같은 필드는 OR, 다른 필드는 AND, + 는 그룹 OR이다.
  • PID·UID·COMM·EXE로 세션과 주체를 추적한다.
  • -o json | jq 로 가공하면 IOC 추출과 기준선 비교가 쉬워진다.
  • 태그(SYSLOG_IDENTIFIER)와 실제 기록자(_COMM) 불일치는 위조 신호다.

12. 다음 편 연결

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

0개의 댓글