Linux 로그 경로 정리 · 33/50 · Part 4. journald / rsyslog / auditd
선행 학습 → 32. journalctl 기본 사용법
이번 글 → journalctl 시간·서비스·우선순위 필터링
이어서 → 34. rsyslog 구조 이해
grep 은 문자열을 찾지만 journalctl 은 필드를 찾습니다. "PID 4101이 남긴 모든 로그", "UID 1001이 실행한 프로세스가 남긴 로그", "sshd와 sudo를 한 번에" 같은 질문은 필드 필터가 훨씬 정확합니다.
핵심 요약
- 필드 매칭:
journalctl FIELD=value— 같은 필드 반복은 OR, 다른 필드는 AND+로 조건 그룹을 OR 결합 (A B + C= (A AND B) OR C)-F FIELD로 존재하는 값 목록을 먼저 확인하면 오타·누락을 줄인다.
| 문법 | 의미 | 예 |
|---|---|---|
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 PATTERN | MESSAGE 정규식 (systemd 237+) | -g 'Failed password' |
/usr/bin/sudo | 실행 파일 경로를 인자로 → _EXE 매칭 | journalctl /usr/bin/sudo |

[시간창] --since / --until
∩
[범위] -b / -u UNIT
∩
[심각도] -p warning..emerg
∩
[필드] _COMM= / _UID= / _PID= / SYSLOG_FACILITY=
∩
[메시지] -g 'regex'
↓
-o short-iso | -o json | jq → 결과 저장
필터는 저널 파일 전체(/var/log/journal 또는 /run/log/journal, 또는 -D 로 지정한 수집본)를 대상으로 동작합니다.
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

위 이미지는 Rocky Linux 9.8 실습 환경에서 필터 조합을 실제로 실행한 결과입니다.
아래는 R6 레시피의 판단 예를 설명하는 예시 출력입니다.
[예시 출력: 사고 시간창 활동 프로세스]
84 sshd
6 sudo
3 systemd
2 useradd
1 passwd
1 crontab
| 결과 | 해석 |
|---|---|
sshd 84 | 무차별 대입 흔적 (실패 다수) |
sudo 6 | 권한 상승 |
useradd / passwd | 계정 생성 — 평소 시간창에는 없던 프로세스 |
crontab | 지속성 설정 |
"평소에 없던 _COMM" 이 시간창에 나타나는 것이 가장 빠른 이상 신호입니다. 같은 레시피를 평소 같은 요일·시간대에 돌려 기준선(baseline)과 비교합니다.
-F)이 설치된 서비스와 일치._EXE 에 /tmp, /dev/shm, 숨김 경로 실행 파일 / R4에서 결과가 나옴(태그 위조) / 시간창에 처음 보는 _COMM.| SOC 단계 | 레시피 |
|---|---|
| Triage | R1, R5 (Alert 시각 기준 빠른 확인) |
| Investigation | R2 (세션 추적), R6 (활동 프로세스), R4 (위조) |
| IOC 추출 | `-o json |
| Detection 개선 | R6 결과로 기준선 구축 → 신규 프로세스 탐지 룰 |
[ ] 같은 필드 OR / 다른 필드 AND 규칙 이해
[ ] -F 로 필드 값 목록 확인
[ ] PID 기반 세션 추적 (R2)
[ ] 태그 위조 탐지 (R4)
[ ] 시간창 활동 프로세스 집계 (R6)
[ ] 기준선과 비교
+ 는 그룹 OR이다.-o json | jq 로 가공하면 IOC 추출과 기준선 비교가 쉬워진다.SYSLOG_IDENTIFIER)와 실제 기록자(_COMM) 불일치는 위조 신호다.| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 32. journalctl 기본 사용법 |
| ▶ 다음 글 | 34. rsyslog 구조 이해 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |