在 Debian 上运行的 Golang 程序,对日志加密通常有三种典型场景,下面按“实用程度”给你一套可落地的方案。
思路:Golang 写日志前就加密,存的是密文。
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"encoding/base64"
"io"
"log"
"os"
)
func encrypt(plaintext []byte, key []byte) (string, error) {
block, err := aes.NewCipher(key)
if err != nil {
return "", err
}
gcm, err := cipher.NewGCM(block)
if err != nil {
return "", err
}
nonce := make([]byte, gcm.NonceSize())
if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
return "", err
}
ciphertext := gcm.Seal(nonce, nonce, plaintext, nil)
return base64.StdEncoding.EncodeToString(ciphertext), nil
}
func main() {
key := []byte("32-byte-key-for-aes-256-gcm!!") // 必须 32 字节
msg, _ := encrypt([]byte("user password=123456"), key)
logFile, _ := os.OpenFile("/var/log/app.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600)
log.SetOutput(logFile)
log.Println(msg)
}
✅ 优点
❌ 缺点
适合:你不改代码,只想“日志文件别人看不到”。
sudo apt install ecryptfs-utils
sudo mount -t ecryptfs /var/log/myapp /var/log/myapp
✅ 透明加密
❌ 配置复杂,重启需密码
cryptsetup luksFormat /dev/sdb1
cryptsetup open /dev/sdb1 logdata
mkfs.ext4 /dev/mapper/logdata
✅ 安全性极高
❌ 不适合单文件日志
如果你用 rsyslog / vector / fluentd:
sudo apt install rsyslog-gnutls
*.* @@logserver.example.com:6514
✅ 防中间人
❌ 本地仍明文
不要写死在代码里!
/etc/app/secret.key(权限 600)[Service]
EnvironmentFile=/etc/app/env
agevaultsystemd credentials✅ 最佳实践
Golang AES-GCM 加密
+ 日志文件 0600
+ Debian LUKS
+ 远程 TLS
如果你愿意,我可以:
SecureLogger你现在的日志是: