Add guarded reboot control
This commit is contained in:
@@ -20,6 +20,8 @@ Control은 라즈베리파이/리눅스 호스트의 팬과 시스템 상태를
|
||||
- Web Push 구독 등록, 자동 복구, 구독 기기 목록 표시
|
||||
- Push 기기 건강 상태 추적과 헬스체크 수동/자동 실행
|
||||
- WakeLock 버튼으로 대시보드 화면 꺼짐 방지
|
||||
- Reboot 버튼으로 2단계 확인 후 시스템 재부팅 요청
|
||||
- 기본 브라우저 alert/confirm/prompt 대신 대시보드 디자인에 맞춘 custom dialog 사용
|
||||
|
||||
## 주요 API
|
||||
|
||||
@@ -32,6 +34,7 @@ Control은 라즈베리파이/리눅스 호스트의 팬과 시스템 상태를
|
||||
- `public/api.php?action=send_push_healthcheck`: 등록된 Push 기기 전체에 상태 확인 알림 발송
|
||||
- `public/api.php?action=delete_push_endpoint`: 현재 endpoint 구독 삭제
|
||||
- `public/api.php?action=dmesg`: dmesg 로그 조회
|
||||
- `public/api.php?action=reboot`: 확인 단어와 관리자 암호 재검증 후 sudo reboot 실행
|
||||
|
||||
## 구성
|
||||
|
||||
@@ -116,7 +119,8 @@ control-push-healthcheck.service
|
||||
4. 팬 조작은 상태 저장, 정책 적용, 로그 저장 순서로 처리합니다.
|
||||
5. Push 등록은 권한 요청과 구독 저장이 끝나면 즉시 상태를 갱신합니다.
|
||||
6. WakeLock 버튼은 활성 상태를 초록색 버튼으로 표시합니다.
|
||||
7. Push 발송, 수신, 표시, 클릭 이벤트를 기록하고 구독 DB의 건강 상태를 갱신합니다.
|
||||
7. Reboot 버튼은 `재부팅` 단어 입력과 관리자 암호 재입력을 모두 통과한 뒤 서버 API로 재부팅을 요청합니다.
|
||||
8. Push 발송, 수신, 표시, 클릭 이벤트를 기록하고 구독 DB의 건강 상태를 갱신합니다.
|
||||
|
||||
## 주요 함수/모듈
|
||||
|
||||
@@ -127,12 +131,14 @@ control-push-healthcheck.service
|
||||
- `push_health_summary()`: 상태별 Push 기기 수 집계
|
||||
- `send_push_healthcheck_if_due()`: 쿨다운 기반 헬스체크 알림 발송
|
||||
- `assets/wakelock.js`: WakeLock 버튼 상태와 Screen Wake Lock API 제어
|
||||
- `customAlert()`, `customConfirm()`, `customPrompt()`: 대시보드 공통 확인/입력 dialog
|
||||
|
||||
## 보안
|
||||
|
||||
- 로그인 세션과 CSRF token을 사용합니다.
|
||||
- POST 조작 API는 CSRF 검증을 통과해야 합니다.
|
||||
- sysfs 쓰기와 systemctl 실행 권한은 sudoers 범위로 제한해야 합니다.
|
||||
- 재부팅 API는 CSRF, 로그인 세션, 확인 단어 `재부팅`, 관리자 암호 재검증을 모두 요구합니다.
|
||||
- VAPID key와 앱 비밀번호는 저장소 밖 secret 파일로 관리합니다.
|
||||
|
||||
## 운영 체크포인트
|
||||
@@ -143,3 +149,4 @@ control-push-healthcheck.service
|
||||
- Push 구독 자동 복구가 과도한 반복 등록을 만들지 않는지 확인합니다.
|
||||
- Push 헬스체크 timer 상태는 `systemctl list-timers --all control-push-healthcheck.timer`로 확인합니다.
|
||||
- `failed`, `stale` 기기는 알림 권한, 브라우저 데이터 삭제, PWA 재설치 여부를 확인합니다.
|
||||
- Reboot API 사용 전 웹 서버 실행 계정의 sudoers에 `/usr/sbin/reboot` 비밀번호 없는 실행 권한이 제한적으로 설정되어 있는지 확인합니다.
|
||||
|
||||
Reference in New Issue
Block a user