三員分立
Doggy 實作了符合中國等保標準的三員分立安全模型,透過 ThreeOfficersVoter 實作權限管控。
概述
三員分立將系統管理權限分離為三個獨立角色,透過 App\Security\Voter\ThreeOfficersVoter 實作細粒度權限檢查:
| 角色 | 權限範圍 |
|---|---|
ROLE_SYS_ADMIN | 系統設定、使用者管理 |
ROLE_SEC_ADMIN | 安全策略設定 |
ROLE_AUDITOR | 稽核日誌檢視 |
三員相互獨立、相互制衡,任何單一角色都無法完全控制系統。
Voter 權限定義
php
// src/Security/Voter/ThreeOfficersVoter.php
class ThreeOfficersVoter extends Voter
{
public const SYSTEM_CONFIG = 'SYSTEM_CONFIG'; // 系统管理员
public const USER_MANAGE = 'USER_MANAGE'; // 安全保密员
public const AUDIT_VIEW = 'AUDIT_VIEW'; // 安全审计员
public const BUSINESS_DATA = 'BUSINESS_DATA'; // 普通用户访问业务数据
}角色職責
系統管理員(ROLE_SYS_ADMIN)
- 使用者帳號管理
- 系統設定維護(
SYSTEM_CONFIG權限) - 應用程式部署管理
- 無法檢視稽核日誌
- 無法修改安全策略
安全保密員(ROLE_SEC_ADMIN)
- 密碼策略設定
- 權限策略管理(
USER_MANAGE權限) - 安全事件處理
- 無法管理使用者帳號
- 無法檢視稽核日誌
安全稽核員(ROLE_AUDITOR)
- 檢視所有操作日誌(
AUDIT_VIEW權限) - 稽核報告產生
- 異常行為偵測
- 無法修改任何系統設定
- 無法管理使用者
初始化
透過 InitOfficersCommand 命令初始化三個管理員帳號:
bash
php bin/console app:init-officers初始化後會建立三個預設帳號。
預設帳號
| 角色 | 使用者名稱 | 初始密碼 |
|---|---|---|
| 系統管理員 | admin | admin123 |
| 安全保密員 | security | security123 |
| 安全稽核員 | auditor | auditor123 |
⚠️ 正式環境必須修改所有預設密碼。
業務資料存取
一般已認證使用者(ROLE_USER)透過 BUSINESS_DATA 權限可正常存取業務資料,但無法執行管理操作。