debian

Node.js日志在Debian上的权限管理

小樊
44
2025-08-07 09:25:56
栏目: 编程语言

一、基础权限设置

  1. 创建日志目录

    sudo mkdir -p /var/log/nodejs-app  # 推荐存放在/var/log下
    sudo chown -R node:node /var/log/nodejs-app  # 确保Node.js运行用户(如node)拥有权限
    sudo chmod -R 750 /var/log/nodejs-app  # 目录权限:所有者可读写执行,组可读执行,其他无权限
    
  2. 配置Node.js应用
    在代码中指定日志路径(以Winston为例):

    const winston = require('winston');
    const logger = winston.createLogger({
      transports: [
        new winston.transports.File({ filename: '/var/log/nodejs-app/error.log', level: 'error' }),
        new winston.transports.File({ filename: '/var/log/nodejs-app/combined.log' })
      ]
    });
    

二、高级权限控制

  1. 文件级权限细化

    • 单个日志文件可设置为640(所有者可读写,组可读,其他无权限):
      sudo chmod 640 /var/log/nodejs-app/error.log
      sudo chown node:adm /var/log/nodejs-app/error.log  # 组可设为adm(系统管理员组)
      
  2. SELinux/AppArmor配置

    • SELinux(若启用):
      sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/log/nodejs-app(/.*)?"
      sudo restorecon -Rv /var/log/nodejs-app
      
    • AppArmor(若启用):
      编辑/etc/apparmor.d/usr.sbin.node,添加:
      /var/log/nodejs-app/ r,
      /var/log/nodejs-app/** rwk,
      
      然后重启AppArmor:
      sudo systemctl reload apparmor
      
  3. 日志轮转管理
    使用logrotate自动归档日志(创建/etc/logrotate.d/nodejs-app):

    /var/log/nodejs-app/*.log {
      daily
      rotate 7
      compress
      missingok
      create 640 node node
      postrotate
        [ -f /var/run/nodejs-app.pid ] && kill -USR1 `cat /var/run/nodejs-app.pid`
      endscript
    }
    

三、安全最佳实践

四、验证与维护

0
看了该问题的人还看了