Debian 上 Node.js 的权限管理实践
一 运行身份与最小权限
sudo useradd -m -s /bin/bash nodeappsudo usermod -aG sudo nodeapp/etc/ssh/sshd_config:PermitRootLogin no,PasswordAuthentication no~/.ssh/authorized_keys,重启 sshd:sudo systemctl restart sshd二 进程隔离与系统服务权限
/etc/systemd/system/nodeapp.service:[Unit]
Description=Node.js App
After=network.target
[Service]
Type=simple
User=nodeapp
Group=nodeapp
WorkingDirectory=/opt/nodeapp
ExecStart=/usr/bin/node /opt/nodeapp/app.js
Restart=on-failure
# 仅授予绑定低端口的能力(如 80/443),避免 root
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
# 安全增强
NoNewPrivileges=yes
ProtectSystem=strict
PrivateTmp=yes
ProtectHome=yes
RestrictAddressFamilies=AF_INET AF_INET6
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload && sudo systemctl enable --now nodeapp三 文件与目录权限
sudo mkdir -p /var/log/myapp
sudo chown -R root:adm /var/log/myapp
sudo chmod 750 /var/log/myapp
sudo setfacl -m u:nodeapp:rwx /var/log/myapp # 仅对 nodeapp 开放写入
/etc/logrotate.d/myapp):/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
sudo chown -R nodeapp:nodeapp /opt/nodeapp
sudo find /opt/nodeapp -type d -exec chmod 755 {} \;
sudo find /opt/nodeapp -type f -exec chmod 644 {} \;
sudo chmod 700 /opt/nodeapp/.env
/etc/apparmor.d/usr.bin.node 片段:/var/log/myapp/ r,
/var/log/myapp/** rwk,
sudo systemctl reload apparmor。四 网络与端口访问控制
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable
五 依赖与运行时的安全加固
sudo apt update && sudo apt upgrade -ynpm audit fix,或使用 Snyk 持续监测供应链风险