在 CentOS 上配置 Node.js 的“权限”,通常分为几种常见场景。下面按最常见需求给你一套实用方案。
不要用 root 直接跑 Node 服务,这是最常见的安全配置。
useradd -m nodeuser
passwd nodeuser
chown -R nodeuser:nodeuser /var/www/your-node-app
chmod -R 755 /var/www/your-node-app
su nodeuser
cd /var/www/your-node-app
node app.js
Node 默认不能绑定 <1024 端口(如 80)。
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
}
}
Node 跑在 3000,Nginx 用 root 跑 80。
setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/node
⚠️ 有安全风险,仅测试用。
[Unit]
Description=Node.js App
After=network.target
[Service]
User=nodeuser
WorkingDirectory=/var/www/your-node-app
ExecStart=/usr/bin/node app.js
Restart=always
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start yourapp
systemctl enable yourapp
chmod 755 目录
chmod 644 文件
chmod 600 .env # 配置文件
npm install -g xxx
# Error: EACCES
npm config set prefix ~/.npm-global
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
如果 Node 起不来且日志有 Permission denied:
getenforce
临时关闭测试:
setenforce 0
正式环境应配置策略,而不是关 SELinux。
| 问题 | 原因 |
|---|---|
| EACCES | 用户无权访问目录 |
| port in use | 端口被占用 |
| cannot bind 80 | 非 root 用户 |
| Permission denied (selinux) | SELinux 限制 |
如果你能说清楚:
我可以直接给你一条最合适的配置命令。