温馨提示×

centos golang日志权限怎么设

小樊
38
2026-10-03 03:47:24
栏目: 编程语言

在 CentOS 上部署 Golang 程序时,日志文件的权限问题通常出现在以下几种场景:

  1. 程序以什么用户运行(root / 普通用户)
  2. 日志写到哪个目录(/var/log、项目目录、/tmp)
  3. 日志是否被 logrotate 切割
  4. systemd 对文件权限的限制

下面按常见用法给你一套稳妥方案。


一、最推荐:日志放 /var/log/你的项目

1️⃣ 创建日志目录

sudo mkdir -p /var/log/myapp

2️⃣ 创建专用用户(推荐)

sudo useradd -r -s /sbin/nologin myapp

3️⃣ 设置目录权限

sudo chown myapp:myapp /var/log/myapp
sudo chmod 750 /var/log/myapp

Golang 代码中:

logFile, _ := os.OpenFile(
    "/var/log/myapp/app.log",
    os.O_CREATE|os.O_WRONLY|os.O_APPEND,
    0644,
)

二、用 systemd 管理 Golang 程序(重点)

service 文件示例

[Unit]
Description=My Go App
After=network.target

[Service]
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always

# 安全相关
NoNewPrivileges=true
ProtectSystem=full
ReadWritePaths=/var/log/myapp

[Install]
WantedBy=multi-user.target

⚠️ 注意

  • ProtectSystem=full 会禁止写 /var/log
  • 必须加 ReadWritePaths=/var/log/myapp

三、日志权限推荐值

文件 权限 说明
日志目录 750 仅属主可写
日志文件 640 防其他用户读
程序二进制 755 root 拥有
sudo chmod 640 /var/log/myapp/app.log

四、如果用了 logrotate(很重要)

sudo vim /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    create 0640 myapp myapp
}

create 保证新日志权限正确。


五、常见坑总结

❌ root 写日志,普通用户跑程序 → 权限拒绝
❌ /home/user 下写日志 → systemd 可能禁止
❌ SELinux 拦截 → 看 /var/log/audit/audit.log

SELinux 快速排查

sudo setenforce 0

如果好了,说明是 SELinux:

sudo semanage fcontext -a -t var_log_t "/var/log/myapp(/.*)?"
sudo restorecon -Rv /var/log/myapp

六、最简单但不推荐

chmod 777 /var/log/myapp

⚠️ 仅本地测试用,生产千万别。


如果你愿意,可以告诉我:

  • 是否用 systemd
  • 日志库(log / zap / logrus)
  • 是否 SELinux 开启

我可以直接给你完整可抄的配置。

0 踩