Linux 로그 경로 정리 · 10/50 · Part 1. Linux 로그 기본 구조
선행 학습 → 09. Linux 로그와 보안 이벤트의 관계
이번 글 → Linux 로그를 읽을 때 주의할 점
이어서 → 11. Rocky Linux 주요 로그 경로
로그 분석에서 가장 위험한 결론은 "로그에 없으니 일어나지 않았다" 입니다. 로그는 설정된 범위 안에서만, 정상 동작하는 동안에만, 변조되지 않았을 때만 사실을 말합니다. Part 1을 마무리하며 로그를 읽을 때의 함정을 정리합니다.
핵심 요약
- 로그는 완전하지도, 유일하지도, 변하지 않지도 않는다.
- 결론 전에 "기록 범위 · 중복 · 환경 차이 · 무결성 · 시간"을 점검한다.
- "없음"은 결론이 아니라 추가 조사 항목이다.
| # | 함정 | 실제 예 | 확인 방법 |
|---|---|---|---|
| 1 | 모든 이벤트가 로그로 남지 않음 | auditd 룰 없는 서버에서 명령 실행 기록 부재 | auditctl -l, 수집 정책 문서 |
| 2 | 같은 이벤트가 여러 로그에 기록 | SSH 로그인이 secure·journal·audit·wtmp 에 모두 존재 | 건수 집계 시 소스별로 분리 |
| 3 | 배포판별 차이 | Rocky secure ↔ Ubuntu auth.log | /etc/os-release |
| 4 | 설정에 따른 차이 | Ubuntu 24.04 기본은 cron.log 비활성 | /etc/rsyslog.conf, rsyslog.d/ |
| 5 | 로그 삭제·변조 가능 | root 권한으로 sed -i 한 줄 삭제 | 원격 로그·audit·journal 대조 |
| 6 | 시간 동기화 문제 | 서버 간 3분 차이, TZ 불일치 | timedatectl, chronyc tracking |

┌─ (1) 기록 범위 밖 → 로그 없음
Event ─────────────┼─ (2) 여러 경로 → 중복 기록
├─ (3)(4) 환경·설정 → 다른 파일, 다른 형식
▼
Log ─── (5) 삭제·변조 ───▶ 남은 로그만 보임
│
└─ (6) 시간 오차 ───▶ 순서가 틀린 타임라인
함정별로 확인할 설정·로그 위치입니다.
(1) /etc/audit/rules.d/*.rules, auditctl -l → 기록 범위
(2) /var/log/secure, journal, audit.log, wtmp → 중복 소스
(3) /etc/os-release → 배포판
(4) /etc/rsyslog.conf, /etc/rsyslog.d/, /etc/systemd/journald.conf → 저장 설정
(5) 중앙 로그 서버 사본, /var/log/audit/audit.log → 대조 소스
(6) /etc/chrony.conf, timedatectl → 시간
# (1) 기록 범위
auditctl -l | head; grep -E '^Storage|^#Storage' /etc/systemd/journald.conf
# (2) 중복 확인: 같은 로그인이 몇 개 소스에 있는가
grep -c 'Accepted' /var/log/secure
journalctl -u sshd --since today | grep -c Accepted
last -F | grep -c 'pts/'
# (4) 설정 차이: 규칙이 실제로 켜져 있는가
grep -vE '^\s*#|^\s*$' /etc/rsyslog.conf /etc/rsyslog.d/*.conf 2>/dev/null
# (5) 로깅 서비스 중단 흔적
journalctl -u rsyslog -u auditd -u systemd-journald --since "-7d" | grep -Ei 'stop|start|exit'
# (6) 시간
timedatectl | grep -E 'Time zone|synchronized'
아래는 함정을 설명하기 위한 예시 로그입니다.
[예시] 함정 (5): 로컬 secure 에는 02:13~02:15 기록이 없지만 …
local /var/log/secure : Sep 20 02:15:30 web01 sudo[4150]: deploy : ... COMMAND=/bin/bash
central /logs/web01/secure: Sep 20 02:14:52 web01 sshd[4101]: Accepted password for deploy from 203.0.113.45 ...
→ 로컬에는 "로그인 기록 없이 sudo 만 있는" 모순이 생긴다. (44편에서 실제 실습)
[예시] 함정 (6): 서버 간 시간 차이
web01 Sep 20 02:14:52 Accepted password for deploy
fw01 Sep 20 02:11:40 ALLOW 203.0.113.45 → web01:22 ← 3분 12초 느린 시계
| 관찰 | 성급한 결론 | 올바른 다음 단계 |
|---|---|---|
| 명령 실행 로그 없음 | "명령 실행 안 함" | auditd 룰 존재 여부 확인 |
| 로그인 5건 × 소스 3개 = 15건 집계 | "로그인 15회" | 소스별로 분리, 세션 ID/PID로 중복 제거 |
cron 파일 없음 (Ubuntu) | "cron 기록 없음" | syslog / journal -u cron 확인 |
| 특정 구간 로그 공백 | "공격자가 삭제" | 재부팅·로테이션·서비스 중단·저부하 시간대 여부 확인 |
| 이벤트 순서 역전 | "로그 조작" | NTP, TZ, 버퍼링 지연 확인 |
-- Boot), 로테이션 시각, 서비스 재시작과 일치.sed/truncate/> 기록이 있으며, 원격 로그에는 해당 구간이 존재.의심이 3가지 이상 겹칠 때 "변조 가능성 높음"으로 판단하고, 하나만으로는 단정하지 않습니다.
| SOC 단계 | 함정 대응 |
|---|---|
| Detection | 수집 파이프라인 헬스 체크(에이전트 끊김, 이벤트 급감)도 Alert로 운영 |
| Triage | "로그 없음"을 종결 사유로 쓰지 않는다 |
| Investigation | 최소 2개 이상 독립 소스로 교차검증 |
| Report | 가시성 한계(수집 범위, 시간 보정값)를 명시 |
[ ] 6가지 함정 설명 가능
[ ] auditd / journald / rsyslog 기록 범위 확인
[ ] 동일 이벤트 중복 소스 확인
[ ] 로깅 서비스 중단 흔적 조회
[ ] 서버 간 시간 편차 확인
[ ] "로그 없음"을 조사 항목으로 전환하는 문장 작성
| 구분 | 글 |
|---|---|
| ◀ 이전 글 | 09. Linux 로그와 보안 이벤트의 관계 |
| ▶ 다음 글 | 11. Rocky Linux 주요 로그 경로 |
| 시리즈 | Linux 로그 경로 정리 전체 보기 |
| 선행 시리즈 | 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 · Linux 시스템 보안 기초 |