Linux 로그 경로 정리 · 02/50 · Part 1. Linux 로그 기본 구조
선행 학습 → 01. Linux 로그란 무엇인가 · 기초 48. Linux 로그와 journalctl
이번 글 → Linux 로그가 생성되는 과정
이어서 → 03. /var/log 디렉터리 구조
"이 이벤트는 왜 /var/log/secure 에도 있고 journalctl 에도 있고 audit.log 에도 있을까?"
이 질문에 답할 수 있어야 로그를 교차검증할 수 있습니다. 이번 글은 사용자의 행동 하나가 여러 로그로 갈라져 저장되는 과정을 따라갑니다.
핵심 요약
- Linux에는 로그를 남기는 경로가 여러 개(journald, rsyslog, auditd, 애플리케이션 자체 파일) 있다.
- 같은 사건이 서로 다른 관점으로 여러 곳에 남는다 → 교차검증의 근거.
- 한 경로가 끊겨도(삭제·미설정) 다른 경로에 흔적이 남을 수 있다.
| 구성요소 | 역할 | 입력 | 출력 |
|---|---|---|---|
| syslog API | 프로그램이 로그를 보내는 표준 창구 (syslog(3), /dev/log) | 애플리케이션 | journald / rsyslog |
| systemd-journald | 모든 로그의 1차 수집기 (구조화된 바이너리 저널) | stdout/stderr, syslog, 커널 | /run/log/journal, /var/log/journal |
| rsyslog | 규칙(facility.severity)에 따라 텍스트 파일로 분배·전송 | journald(imjournal) 또는 소켓 | /var/log/*, 원격 서버 |
| auditd | 커널 감사 서브시스템의 기록자 | 커널 audit (netlink) | /var/log/audit/audit.log |
| 애플리케이션 자체 로그 | Apache, Nginx 등이 직접 파일에 기록 | 서비스 | /var/log/httpd 등 |

User Action (ssh 로그인)
↓
Application / Service (sshd, PAM)
↓
System Call (execve, open, connect ...)
↓
Kernel ────────────────────────────┐ (audit 서브시스템)
↓ ↓
Logging Mechanism auditd
├─ journald (1차 수집) ↓
│ └─ rsyslog (imjournal) /var/log/audit/audit.log
│ ↓
│ /var/log/secure · messages
└─ journal 파일 (/var/log/journal)
↓
Log Storage ──▶ Log Collector ──▶ SIEM / SOC
포인트: RHEL 9 계열 기본 설정에서 rsyslog는 소켓(imuxsock)을 끄고 journald에서 읽어오는(imjournal) 구조입니다. 즉, journald가 멈추면 rsyslog 파일에도 기록되지 않을 수 있습니다. 반대로 auditd는 journald와 독립된 경로입니다.
[journald] /run/log/journal/<machine-id>/ (휘발성, 재부팅 시 소멸)
/var/log/journal/<machine-id>/ (영구 저장, 디렉터리 존재 시)
[rsyslog] /etc/rsyslog.conf 규칙에 따라 /var/log/messages, /var/log/secure ...
[auditd] /var/log/audit/audit.log (/etc/audit/auditd.conf 의 log_file)
[앱] /var/log/httpd/, /var/log/nginx/, /var/log/mariadb/ ...
한 번의 로그인 이벤트가 몇 군데에 남는지 직접 확인합니다.
# 1) 로그 경로별 동작 여부
systemctl is-active systemd-journald rsyslog auditd
# 2) rsyslog 가 journald 에서 읽는지(imjournal) 확인
grep -n "imjournal\|imuxsock" /etc/rsyslog.conf
# 3) 같은 SSH 로그인을 세 곳에서 조회
grep "Accepted" /var/log/secure | tail -1 # rsyslog 파일
journalctl -u sshd --since "-1h" | grep Accepted | tail -1 # journald
ausearch -m USER_LOGIN -ts recent -i | tail -4 # auditd

위 이미지는 Rocky Linux 9.8 실습 환경의 실제 실행 결과로, 동일한 이벤트가 파일·저널·감사 로그 각각에 남는 모습을 보여줍니다.
아래는 세 경로가 같은 로그인을 어떻게 다르게 표현하는지 비교한 예시 로그입니다.
[예시 · rsyslog 파일] Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 port 51188 ssh2
[예시 · journald] _PID=4101 _COMM=sshd _SYSTEMD_UNIT=sshd.service MESSAGE=Accepted password for deploy ...
[예시 · auditd] type=USER_LOGIN msg=audit(...): pid=4101 uid=0 auid=1001 ses=12 ... addr=203.0.113.45 terminal=ssh res=success
| 관점 | rsyslog 파일 | journald | auditd |
|---|---|---|---|
| 형식 | 텍스트 한 줄 | 구조화 필드(key=value) | 레코드 타입별 key=value |
| 강점 | grep/awk로 빠른 검색 | 서비스 단위(_SYSTEMD_UNIT) 필터 | auid(최초 로그인 사용자) 추적, 커널 수준 |
| 약점 | 필드가 비정형 | 기본 휘발성일 수 있음 | 룰이 없으면 기록 안 됨 |
| 교차검증 키 | 시간 + PID | _PID | pid, ses |
secure 에는 없는데 journald·audit 에는 있는 로그인 → 파일 변조 가능성 (44편)sudo 실행이 있는데 secure 에 sudo 기록이 없음 → 로그 삭제 또는 rsyslog 규칙 변경| 단계 | 로그 생성 구조를 알면 가능한 것 |
|---|---|
| Detection | 어떤 소스를 SIEM으로 보내야 탐지가 가능한지 판단 (auditd 없으면 명령 실행 탐지 불가) |
| Triage | Alert 원본이 어느 경로에서 왔는지 파악 → 다른 경로로 재확인 |
| Investigation | 한 소스가 변조돼도 다른 소스로 복원 |
| Response | 로깅 파이프라인 자체의 중단 여부(rsyslog·auditd 상태)를 대응 항목에 포함 |
[ ] journald / rsyslog / auditd 동작 여부 확인
[ ] rsyslog 입력 모듈(imjournal / imuxsock) 확인
[ ] 동일 이벤트를 3개 경로에서 조회
[ ] 경로별 필드 차이 설명 가능
[ ] 경로 간 불일치가 의미하는 바 설명 가능
[ ] 로깅 서비스 중단 시각 확인 방법 이해
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 01. Linux 로그란 무엇인가 |
| ▶ 다음 글 | 03. /var/log 디렉터리 구조 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |