대상 OS: Debian 12 (bookworm)

보안은 “한 번 세팅”이 아니라 “계속 유지”입니다.
그런데 서버를 오래 운영하다 보면 계정이 늘고, 패키지가 추가되고, 예외 설정이 쌓이면서 초기 하드닝 상태에서 조금씩 멀어집니다.
이때 필요한 건 멋진 체크리스트가 아니라, 현재 상태를 반복적으로 측정하고(점검), 바꾸고(조치), 다시 확인하는(재점검) 루프입니다.
오늘은 Debian 12에서 Lynis로 하드닝 점검을 표준화하고, 결과를 운영에 맞게 튜닝(오탐/의도된 예외 제거)하며, 리포트를 자동 생성하는 실무형 구성을 정리합니다.
특히 “점수 올리기”가 목적이 아니라, 취약한 상태를 빨리 감지하고 변경을 추적하는 데 초점을 둡니다.

---

# A. Lynis를 쓰는 이유: 경량 점검 + 반복 가능성

1) 장점

- 에이전트형이지만 가볍고, 서버 로컬에서 빠르게 돌아갑니다.
- 커널/파일 권한/서비스 설정/SSH/로그/업데이트 정책 등 넓은 범위를 한 번에 훑습니다.
- 결과가 텍스트라서 자동화/비교(diff)가 쉽습니다.

2) 한계

- “취약점 스캐너”라기보다는 “구성 점검/권고”에 가깝습니다.
- 실제 CVE 영향도 평가는 별도(패치 관리, 자산 관리)와 같이 가야 합니다.

---

# B. 설치와 기본 실행: 먼저 ‘현재 상태’부터 찍어두기

1) 설치

sudo apt update
sudo apt install -y lynis

2) 최초 스캔(루트 권장)

sudo lynis audit system --quick

3) 리포트 파일 위치 확인

sudo ls -l /var/log/lynis.log /var/log/lynis-report.dat 2>/dev/null || true
sudo tail -n 60 /var/log/lynis.log

- `lynis.log`는 사람이 읽기 좋고,
- `lynis-report.dat`는 키=값 형식이라 자동 처리에 유리합니다.

---

# C. “오탐”이 아니라 “의도된 예외”를 관리하기: 커스텀 프로파일

1) 프로파일 파일 만들기

- Lynis는 기본 설정 위에 “운영 환경에 맞는 예외”를 덮어쓸 수 있습니다.
- 가장 흔한 실패는 예외를 문서로만 남기고, 다음 점검 때마다 같은 경고를 무시하는 것입니다.

sudo install -d -m 0755 /etc/lynis
sudo bash -lc 'cat >/etc/lynis/custom.prf /dev/null || true

- 이미 자동 업데이트를 운영 중이라면, Lynis의 권고와 충돌하지 않도록 “범위 제한/재부팅 정책”을 점검하세요.

---

# E. 변경 감지: ‘이번 스캔이 지난번과 뭐가 달라졌나’를 자동으로 보기

1) 스캔 출력/리포트를 날짜별로 보관

sudo install -d -m 0755 /var/lib/lynis
sudo bash -lc 'TS=$(date +%F_%H%M%S)
mkdir -p /var/lib/lynis/runs/$TS
lynis audit system --profile /etc/lynis/custom.prf --quick > /var/lib/lynis/runs/$TS/stdout.txt 2>&1
cp -a /var/log/lynis.log /var/lib/lynis/runs/$TS/lynis.log
cp -a /var/log/lynis-report.dat /var/lib/lynis/runs/$TS/lynis-report.dat
echo $TS > /var/lib/lynis/last_run
'

2) 직전 실행과 diff 보기(간단 버전)

sudo bash -lc 'LAST=$(cat /var/lib/lynis/last_run)
PREV=$(ls -1 /var/lib/lynis/runs | sort | tail -n 2 | head -n 1)
if [ -n "$PREV" ] && [ "$PREV" != "$LAST" ]; then
  diff -u "/var/lib/lynis/runs/$PREV/lynis-report.dat" "/var/lib/lynis/runs/$LAST/lynis-report.dat" | head -n 200
fi
'

- `lynis-report.dat`의 diff는 “점검 결과가 왜 바뀌었는지”를 추적하는 데 꽤 유용합니다.

---

# F. 자동화: systemd 타이머로 주기 점검 + 리포트 파일 생성

1) 실행 스크립트 만들기

sudo bash -lc 'cat >/usr/local/sbin/lynis-run &1 || true

cp -a /var/log/lynis.log "$BASE/lynis.log" 2>/dev/null || true
cp -a /var/log/lynis-report.dat "$BASE/lynis-report.dat" 2>/dev/null || true

echo "$TS" > /var/lib/lynis/last_run

# 최근 N개만 유지(예: 30회)
ls -1 /var/lib/lynis/runs 2>/dev/null | sort | head -n -30 | while read -r old; do
  [ -n "$old" ] && rm -rf "/var/lib/lynis/runs/$old"
done
EOF

chmod 0755 /usr/local/sbin/lynis-run
chown root:root /usr/local/sbin/lynis-run
'

2) systemd 서비스 유닛

sudo bash -lc 'cat >/etc/systemd/system/lynis-audit.service /etc/systemd/system/lynis-audit.timer