在 Linux 上设置 JS(Node.js)日志文件的权限,通常分三种场景来说:日志文件本身权限、运行用户权限、日志目录权限。下面给你一套常见、安全的做法。
假设日志文件是:
/var/log/myapp/app.log
sudo chown appuser:appuser /var/log/myapp/app.log
sudo chmod 640 /var/log/myapp/app.log
含义:
appuser:运行 Node.js 的用户640:
✅ 最常用、最安全
日志目录也要正确,否则写不进去:
sudo chown -R appuser:appuser /var/log/myapp
sudo chmod 750 /var/log/myapp
750:
❌ 不要用 root 跑 Node
✅ 用普通用户,例如 appuser
ps aux | grep node
如果看到 root node,建议改:
sudo useradd -r -s /bin/false appuser
sudo chown -R appuser:appuser /your/app/path
su appuser -s /bin/bash -c "node app.js"
或用 pm2:
pm2 start app.js --uid appuser --gid appuser
在代码里确保:
fs.writeFileSync('/var/log/myapp/app.log', data, { mode: 0o640 })
或日志库(如 winston / pino):
new winston.transports.File({
filename: '/var/log/myapp/app.log',
mode: 0o640
})
如果你用 systemd:
[Service]
User=appuser
Group=appuser
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
原因:
解决:
sudo chown appuser:appuser /var/log/myapp -R
/var/log/myapp 750 appuser:appuser
/var/log/myapp/*.log 640 appuser:appuser
Node 运行用户 = appuser
如果你用的是 Docker / pm2 / nginx 反代 / 某个具体日志库,可以告诉我,我给你更精确的方案。