POSA_LEAKSMS/docs/OPERATIONS_SECURITY_CHECKLIST.md
cw2007 fb3630d868 docs: 문서 현행화(leak_ 접두사·경로 스크럽) + 코드 투어 + settings deny 수정
- 전 운영 문서 테이블명 leak_ 접두사 반영, 삭제된 마이그레이션 참조 정리,
  구경로 raspi_leck_detecter→<WEB_DIR> 스크럽(DEPLOYMENT_PLAN).
- docs/DEPLOYMENT_PLAN_RPI4x3.md(신규): 3대 Pi + 신규 서버 배포 로드맵.
- .tours/architect-full-system.tour(신규): 19스텝 전체 아키텍처 투어.
- README.md(루트, 0바이트였음): 시스템 인덱스.
- .claude/settings.local.json: /doctor 지적 deny 규칙 5건 수정
  (파이프 4건 와일드카드형, 포크밤 삭제) + 죽은 allow 항목 3건 정리.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01821XP36Q6t9eWKTPSEumnC
2026-07-02 18:52:15 +09:00

6.8 KiB

운영·보안 점검표

작성일: 2026-06-10
대상: 서버실 온습도(SHT30) 모니터링 시스템 v2606 운영 담당자

이 문서는 보안대책서 첨부자료와 월간 운영 점검에 함께 사용할 체크리스트입니다. 원문 API 키, SMS 키, DB 비밀번호, 관리자 비밀번호는 기록하지 않습니다.

1. 점검 주기

주기 점검 목적 보관 증적
일일 온습도 임계 경보, 장비 오프라인, SMS 실패 여부 확인 대시보드 화면 또는 이상 없음 기록
주간 STM32 보고 수신 상태, 최근 측정값, 측정 공백 여부 확인 대시보드 온습도 추이, leak_sensor_metric 최근 기록
월간 보안통제 매트릭스 점검, 백업, 수신자 현행화 보안 증적 보고서, 월간 보고서, 백업 목록
월간 관리자 MFA, 감사로그, 보관기간 정리 확인 MFA 등록 확인표, php/var/admin_audit.log, retention 실행 결과
변경 시 API 키, 서버 경로, 수신자, 임계값, 네트워크 변경 검증 변경 승인 기록, 재점검 결과

2. 월간 운영 점검

영역 점검 항목 정상 기준 증적
서비스 상태 dashboard.php 접속 최신 온습도와 센서 상태 표시 대시보드 캡처
설치 점검 setup_wizard.php 접속 중요 항목 0건 또는 조치계획 기록 설치 점검 캡처
보안 증적 security_evidence.php 접속 운영 점검 결과와 보안통제 매트릭스 출력 Markdown 다운로드
월간 보고 monthly_report.php 조회 임계 경보, 복귀, 오프라인, SMS 현황 표시 PDF 또는 CSV
장비 상태 leak_sensor_status(sensor_id=2) 최근 수신 시각이 HEARTBEAT_TIMEOUT_SEC 이내 대시보드 센서 카드
측정 수집 leak_sensor_metric 5분 주기 측정값 누적 온습도 추이 캡처
SMS 최근 실패 반복 실패 없음 leak_sms_log 또는 대시보드
임계 설정 METRIC_* 기관 기준과 일치 config.local.php 발췌(값만)
백업 DB/설정 백업 정해진 주기대로 백업 존재 백업 파일 목록
관리자 MFA ADMIN_TOTP_SECRET 인증 앱 등록 완료 MFA 등록 확인표
감사로그 php/var/admin_audit.log 로그인/로그아웃/MFA 등록 기록 존재 감사로그 파일

3. 서버 점검 명령

브라우저에서 다음 화면을 확인합니다.

https://your-domain.example/raspi_leck_detecter/setup_wizard.php
https://your-domain.example/raspi_leck_detecter/security_evidence.php
https://your-domain.example/raspi_leck_detecter/security_evidence.php?format=md
https://your-domain.example/raspi_leck_detecter/monthly_report.php

응답 헤더는 운영 서버에서 확인합니다.

curl -I https://your-domain.example/raspi_leck_detecter/login.php

4. STM32 펌웨어 점검

USART3(PD8/PD9, 115200) 콘솔 로그로 다음을 확인합니다.

  • I2C1 초기화 및 SHT30 주소 0x44 응답
  • 최근 측정값(온도/습도)과 주기 보고
  • 네트워크/SNTP/TLS 핸드셰이크 및 서버 200 응답
  • 상태 LED(PD12) 패턴: 정상 보고=느린 토글 / 망 단절·TLS 실패=빠른 점멸

장비가 HEARTBEAT_TIMEOUT_SEC(기본 1200초=20분)을 초과해 보고를 멈추면 서버가 오프라인으로 판정하고 SMS를 발송합니다.

5. 온습도 임계 경보 점검

항목 확인 내용 기록
임계 초과 감지 측정값이 임계 초과 시 metric_status 경보가 기록되는가 감지 시각/항목
SMS 발송 수신자가 임계 경보 SMS를 받는가 수신 시각
쿨다운 동일 종류 경보가 30분 내 중복 발송되지 않는가 leak_sms_log 간격
정상복귀 히스테리시스 포함 정상 회복 시 복귀 SMS 1회 발송되는가 복귀 시각
보고서 반영 월간 보고서에 경보/복귀가 반영되는가 보고서 파일

6. 조치 기준

상태 조치
임계 경보 발생 당일 원인 확인 후 조치 결과 기록(공조/환기/장비 점검)
SMS 반복 실패 Cafe24 SMS 잔액, 발신번호, secure key, 수신자 확인
장비 오프라인 전원, LAN 연결, PHY 링크, 펌웨어 콘솔 로그 확인
온습도 미수집 I2C 배선(PB6/PB7, 0x44), 4.7kΩ 풀업, leak_sensor_metric 테이블 확인
HTTPS/TLS 미확인 Cafe24 SSL 설정, 펌웨어 CA 반영, SNTP 시간 동기 확인
백업 미수행 백업 주기 재설정 및 다음 월 점검에 포함

7. 관리자 MFA

config.local.php에 ADMIN_TOTP_SECRET을 설정합니다. 이 값은 Google Authenticator, Microsoft Authenticator, Authy 등 TOTP 인증 앱에 등록한 Base32 비밀키와 같아야 합니다.

'ADMIN_TOTP_SECRET' => 'replace-with-base32-secret',
'MFA_SETUP_TOKEN' => 'replace-with-temporary-random-token',

운영자는 관리자 비밀번호와 인증 앱 6자리 코드를 모두 입력해야 로그인할 수 있습니다. 담당자 변경 시 비밀번호를 재설정하고 TOTP 비밀키도 새로 발급합니다.

초기 등록은 다음 주소에서 진행합니다. MFA_SETUP_TOKEN은 최초 등록 또는 교체 작업 때만 임시로 설정하고, 등록 완료 후 빈 값으로 바꾸거나 삭제합니다.

https://your-domain.example/raspi_leck_detecter/setup_mfa.php?token=임시토큰

화면의 수동 입력 키를 Google Authenticator에 등록한 뒤 6자리 코드를 확인하고, 검증된 ADMIN_TOTP_SECRET 줄을 config.local.php에 반영합니다. 보안상 외부 QR 생성 API를 쓰지 않으며 비밀키를 외부 서버로 전송하지 않습니다.

로그인 성공/실패, 로그아웃, MFA 등록 검증은 php/var/admin_audit.log에 감사로그로 기록합니다.

8. 보관기간 정리

먼저 dry-run으로 삭제 대상을 확인합니다.

php retention_cleanup.php --dry-run

결과를 검토한 뒤 운영 백업이 완료된 상태에서만 실제 정리를 수행합니다.

php retention_cleanup.php --execute

기본 보관기간은 SMS 로그 365일, 센서 로그 365일, 온습도 측정값 365일, 관리자 감사로그 365일입니다. 기관 기준이 다르면 config.local.php의 SMS_LOG_RETENTION_DAYS, SENSOR_LOG_RETENTION_DAYS, SENSOR_METRIC_RETENTION_DAYS, ADMIN_AUDIT_RETENTION_DAYS로 조정합니다.

9. 백업·복구 증적 생성

백업 파일 목록과 복구 테스트 결과는 다음 명령으로 Markdown 증적을 생성합니다.

php scripts/backup_evidence.php --backup-dir /path/to/backups --restore-test "YYYY-MM restore OK"

복구 테스트 결과에는 DB 복구, 관리자 로그인, SMS 테스트, 월간 보고서 조회, 온습도 측정값 표시 결과를 포함합니다.