centos

如何利用Golang日志提升CentOS系统安全性

小樊
35
2025-11-14 01:38:52
栏目: 编程语言

利用 Golang 日志提升 CentOS 系统安全性的落地方案

一 安全设计原则

二 系统与服务侧加固

三 Golang 代码与配置要点

四 监控告警与审计闭环

五 最小可行落地清单与示例

package main

import (
	"log"
	"os"
	"syscall"
)

func main() {
	// 目录:root:myapp 750
	if err := os.MkdirAll("/var/log/myapp", 0750); err != nil {
		log.Fatalf("mkdir: %v", err)
	}

	// 文件:myapp:myapp 640
	f, err := os.OpenFile("/var/log/myapp/app.log",
		os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0640)
	if err != nil {
		log.Fatalf("open: %v", err)
	}
	defer f.Close()

	log.SetOutput(f)
	log.Println("secure log init ok")
}
package main

import (
	"log"
	"log/syslog"
)

func main() {
	// 将日志写入 syslog(标识 myapp,包含 PID)
	s, err := syslog.New(syslog.LOG_INFO|syslog.LOG_PID, "myapp")
	if err != nil {
		log.Fatalf("syslog: %v", err)
	}
	defer s.Close()

	log.SetOutput(s)
	log.Println("app started")
}
package main

import (
	"crypto/aes"
	"crypto/cipher"
	"crypto/rand"
	"io"
	"os"
)

func encryptFile(inPath, outPath string, key []byte) error {
	in, err := os.Open(inPath)
	if err != nil { return err }
	defer in.Close()

	out, err := os.Create(outPath)
	if err != nil { return err }
	defer out.Close()

	block, err := aes.NewCipher(key)
	if err != nil { return err }

	iv := make([]byte, aes.BlockSize)
	if _, err := io.ReadFull(rand.Reader, iv); err != nil {
		return err
	}
	if _, err := out.Write(iv); err != nil {
		return err
	}

	stream := cipher.NewCFBEncrypter(block, iv)
	buf := make([]byte, 4096)
	for {
		n, err := in.Read(buf)
		if n > 0 {
			c := make([]byte, n)
			stream.XORKeyStream(c, buf[:n])
			if _, werr := out.Write(c); werr != nil {
				return werr
			}
		}
		if err == io.EOF { break }
		if err != nil { return err }
	}
	return nil
}

func main() {
	// 16/24/32 字节密钥
	key := []byte("thisis32bitlongpassphrase!")
	if err := encryptFile("/var/log/myapp/app.log", "/var/log/myapp/app.log.enc", key); err != nil {
		panic(err)
	}
}

提示:生产环境请将密钥托管在 KMS/Vault,并通过最小权限与审计策略保护密钥生命周期。

0
看了该问题的人还看了