温馨提示×

nodejs日志linux权限怎么设

小樊
38
2026-09-29 17:39:55
栏目: 编程语言

在 Linux 上给 Node.js 日志设置权限,通常要兼顾 安全、可写、便于排查问题 三个点。下面按常见场景说明。


一、日志文件放哪里?

推荐目录(避免权限混乱):

  • /var/log/your-app/
  • /srv/your-app/logs/

不推荐:

  • 项目根目录(容易误提交、权限混乱)
  • /tmp(可能被清理)

二、创建日志目录并设置权限(推荐做法)

假设你的 Node.js 以 appuser 用户运行:

sudo mkdir -p /var/log/your-app
sudo chown -R appuser:appuser /var/log/your-app
sudo chmod 750 /var/log/your-app

说明:

  • 750:属主可读写执行,组用户可读执行,其他无权限
  • 如果只有 Node 进程写日志,不需要组权限,可用 700

三、日志文件本身的权限

Node.js 启动时自动创建日志文件时,权限受 umask 影响。

常见安全设置:

# 文件权限 640(属主读写,组只读)
sudo chmod 640 /var/log/your-app/*.log

如果你手动创建:

sudo touch /var/log/your-app/app.log
sudo chown appuser:appuser /var/log/your-app/app.log
sudo chmod 640 /var/log/your-app/app.log

四、Node.js 运行用户很关键

查看 Node 运行用户:

ps -ef | grep node

原则:

  • 日志目录必须对 Node 运行用户 可写
  • 不要用 root 跑 Node(安全风险)

示例(用 systemd):

[Service]
User=appuser
Group=appuser

五、使用日志库时的注意事项

Winston / Pino / Bunyan

确保:

  • 日志目录已存在
  • Node 用户有写权限

Winston 示例:

const winston = require('winston');
const path = require('path');

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({
      filename: '/var/log/your-app/app.log'
    })
  ]
});

六、日志轮转(很重要)

用 logrotate 防止日志爆盘:

sudo vim /etc/logrotate.d/your-app

示例:

/var/log/your-app/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 640 appuser appuser
    sharedscripts
    postrotate
        systemctl reload your-app
    endscript
}

七、常见错误

❌ 权限不足

EACCES: permission denied, open '/var/log/your-app/app.log'

✅ 确认目录和文件属主是 Node 运行用户

❌ 用 root 跑 Node
✅ 用普通用户 + 最小权限

❌ 日志目录 777
✅ 太危险,避免


八、推荐权限总结

对象 权限 说明
日志目录 750 / 700 Node 用户属主
日志文件 640 属主读写,组只读
运行用户 非 root 安全第一

如果你用的是 Docker / PM2 / systemd / Kubernetes,可以告诉我,我可以给你更具体的配置示例。

0 踩