Linux 로그 경로 정리 · 42/50 · Part 5. 로그 관리와 무결성

선행 학습 → 41. logrotate 이해 · 기초 23. head와 tail
이번 글 → 로그 로테이션과 보안관제
이어서 → 43. Linux 로그 무결성

1. 들어가며

로그 로테이션은 운영에는 필수지만 분석가에게는 함정입니다. grep 'Failed' /var/log/secure 결과가 0건이라고 공격이 없었던 것이 아니라, 어제 밤 순환되어 secure-20260920 로 넘어갔을 수 있습니다.

핵심 요약

  • 순환 후 과거 로그는 다른 이름·압축 파일에 있다 → zgrep 파일* 이 기본
  • 실시간 관찰은 tail -F (이름 추적), tail -f 는 순환 후 옛 파일에 머문다.
  • copytruncate 방식은 짧은 유실 구간이 생길 수 있다.
  • 사고 발견이 늦으면 로컬 로그는 이미 삭제되었을 수 있다 → 중앙 수집본 필수.

2. 핵심 개념

문제원인대응
파일명 변경secure → secure-YYYYMMDD / auth.log.1와일드카드 secure*
압축compress → .gzzgrep, zcat -f
오래된 로그 삭제rotate N 초과중앙 수집·장기 아카이브
tail -f 끊김파일 디스크립터 추적tail -F (--follow=name --retry)
순환 시점 유실copytruncate가능하면 create + postrotate HUP
시간 경계사고가 순환 시각에 걸침인접 순환 파일 모두 검색
수집 에이전트순환 시 중복·누락에이전트의 파일 추적 방식 확인 (inode 기반)

3. 로그 생성 구조

로그 로테이션이 분석에 미치는 영향

4. 실제 로그 경로

Rocky : /var/log/secure, /var/log/secure-20260913, /var/log/secure-20260920 ...
Ubuntu: /var/log/auth.log, /var/log/auth.log.1, /var/log/auth.log.2.gz ... .4.gz
audit : /var/log/audit/audit.log, audit.log.1 ~ audit.log.4
journal: /var/log/journal/<id>/system@....journal (아카이브)

5. 명령어 실습

# 1) 사고 시간대가 어느 파일에 있는지: 각 파일의 첫/마지막 줄 시각
for f in /var/log/secure*; do echo "$f : $(head -1 "$f" | cut -c1-15) ~ $(tail -1 "$f" | cut -c1-15)"; done
for f in /var/log/auth.log*; do echo "$f : $(zcat -f "$f" | head -1 | cut -c1-32) ~ $(zcat -f "$f" | tail -1 | cut -c1-32)"; done 2>/dev/null

# 2) 순환 포함 검색
zgrep -h 'Failed password' /var/log/secure* /var/log/auth.log* 2>/dev/null | wc -l

# 3) 실시간 관찰은 -F
tail -F /var/log/secure

# 4) audit 순환 파일 포함 검색
ausearch -if /var/log/audit/audit.log.1 -k exec_log -i    # 개별 파일
ausearch -k exec_log -i                                    # 기본: 순환 파일(log_file.N)까지 자동 포함

실습: 격리된 디렉터리(/lab/rot)의 연습용 로그 파일에 별도 설정과 상태 파일(-s)을 써서 강제 순환을 3회 수행했습니다. 시스템 로그와 시스템 상태 파일은 건드리지 않습니다.

logrotate -f -s /lab/rot/state /lab/rot/rot.conf     # 연습용 설정/상태 파일로만 실행

6. 로그 예시

실제 실행 결과 — Rocky Linux 9.8 · root@rocky9-lab — 강제 로테이션 3회 실습

위 이미지는 Rocky Linux 9.8 실습 환경에서 연습용 파일로 강제 순환을 실제로 실행한 결과입니다.

7. 로그 필드 분석

관찰의미
app.log.1 은 비압축, .2.gz·.3.gz 는 압축delaycompress 동작 — 직전 순환 파일은 아직 기록 중일 수 있어 압축을 미룸
grep -c 결과 1현재 파일만 보면 4건 중 1건만 보임
zgrep -c 결과 파일별 1씩순환 파일까지 보면 4건 모두 확인
app.log.3.gz 권한 -rw-r--r--첫 순환 파일은 원래 파일 권한을 유지, 이후 create 0640 로 만든 파일은 0640 — 순환 파일 권한이 서로 다를 수 있음

8. 보안관점

정상의심
순환 시각이 timer 시각과 일치새벽 침해 직후 비정기 순환 (logrotate -f)
순환 파일 개수 = rotate 값개수 부족 (수동 삭제)
순환 파일 첫/끝 시각이 이어짐파일 사이 시간 공백

공격자는 logrotate -f 를 여러 번 실행해 정상 절차처럼 보이게 오래된 로그를 밀어낼 수 있습니다. audit EXECVE(exe=/usr/sbin/logrotate, auid가 로그인 사용자)와 status 파일 시각으로 확인합니다.

9. SOC 관점

  • 수집 에이전트: Wazuh logcollector는 파일 순환을 감지해 새 파일을 다시 읽는다. 순환 직후 이벤트 누락·중복이 없는지 수집 건수로 점검.
  • Triage: 로컬에서 0건이면 SIEM(중앙)에서 같은 조건으로 재검색.
  • Report: "로컬 로그 보존 범위: 09-13 ~ 09-26" 처럼 분석 가능 범위를 명시.

10. 실습 체크리스트

[ ] 순환 파일별 시작/끝 시각 확인
[ ] zgrep 으로 순환 포함 검색
[ ] tail -f / tail -F 차이 확인
[ ] copytruncate 유실 가능성 설명
[ ] 연습용 설정으로 강제 순환 실습
[ ] 강제 순환 악용 탐지 방법 설명

11. 핵심 정리

  • 순환 후 과거 로그는 다른 이름과 압축 형식으로 존재한다.
  • 검색은 zgrep 파일*, 실시간 관찰은 tail -F 가 기본이다.
  • delaycompress 때문에 직전 순환 파일만 비압축이다.
  • 강제 순환은 증거를 밀어내는 수단이 될 수 있다.
  • 보고서에는 로컬 로그로 분석 가능한 기간을 명시한다.

12. 다음 편 연결

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

0개의 댓글