diff --git a/logger/decision_logger.go b/logger/decision_logger.go index c9630508..e0be8d05 100644 --- a/logger/decision_logger.go +++ b/logger/decision_logger.go @@ -73,11 +73,16 @@ func NewDecisionLogger(logDir string) *DecisionLogger { logDir = "decision_logs" } - // 确保日志目录存在 - if err := os.MkdirAll(logDir, 0755); err != nil { + // 确保日志目录存在(使用安全权限:只有所有者可访问) + if err := os.MkdirAll(logDir, 0700); err != nil { fmt.Printf("⚠ 创建日志目录失败: %v\n", err) } + // 强制设置目录权限(即使目录已存在)- 确保安全 + if err := os.Chmod(logDir, 0700); err != nil { + fmt.Printf("⚠ 设置日志目录权限失败: %v\n", err) + } + return &DecisionLogger{ logDir: logDir, cycleNumber: 0, @@ -103,8 +108,8 @@ func (l *DecisionLogger) LogDecision(record *DecisionRecord) error { return fmt.Errorf("序列化决策记录失败: %w", err) } - // 写入文件 - if err := ioutil.WriteFile(filepath, data, 0644); err != nil { + // 写入文件(使用安全权限:只有所有者可读写) + if err := ioutil.WriteFile(filepath, data, 0600); err != nil { return fmt.Errorf("写入决策记录失败: %w", err) } diff --git a/start.sh b/start.sh index 2f7eb452..502c97fe 100755 --- a/start.sh +++ b/start.sh @@ -219,14 +219,14 @@ check_database() { print_warning "config.db 是目录而非文件,正在删除目录..." rm -rf config.db print_info "✓ 已删除目录,现在创建文件..." - touch config.db - print_success "✓ 已创建空数据库文件,系统将在启动时初始化" + install -m 600 /dev/null config.db + print_success "✓ 已创建空数据库文件(权限: 600),系统将在启动时初始化" elif [ ! -f "config.db" ]; then # 如果不存在文件,创建它 print_warning "数据库文件不存在,创建空数据库文件..." - # 创建空文件以避免Docker创建目录 - touch config.db - print_info "✓ 已创建空数据库文件,系统将在启动时初始化" + # 创建空文件以避免Docker创建目录(使用安全权限600) + install -m 600 /dev/null config.db + print_info "✓ 已创建空数据库文件(权限: 600),系统将在启动时初始化" else # 文件存在 print_success "数据库文件存在" @@ -274,11 +274,11 @@ start() { # 确保必要的文件和目录存在(修复 Docker volume 挂载问题) if [ ! -f "config.db" ]; then print_info "创建数据库文件..." - touch config.db + install -m 600 /dev/null config.db fi if [ ! -d "decision_logs" ]; then print_info "创建日志目录..." - mkdir -p decision_logs + install -m 700 -d decision_logs fi # Auto-build frontend if missing or forced