三 文章首页 实时留言 网络邻居 开往 虫洞
返回

让服务在非 Root 权限下使用 80 或 443 端口

2026-01-07 13:59:38
分类: Linux 标签: 系统运维

有段时间自己写 web server 的时候考虑到想直接绑定 80 和 443 端口,但默认情况下 Linux 只有 root 用户或经过提权才能绑定 1024 以下的端口(如 80、443)。此时如果既不想用特权用户权限跑某个服务(避免安全问题),也想使用这些端口,那就需要一些配置。

方法 1:iptables 端口转发


例子:将 80 端口流量转发到 8080

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

此时外部已经可以通过 80 端口访问服务的 8080 端口服务,但本机是无法这样访问的。可以加上以下条件解决:

sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080

如果需要移除以上规则,则可以:

sudo iptables -t nat -D PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -D OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080

方法 2:setcap 设置 CAP_NET_BIND_SERVICE 权限


赋予某个程序使用 1024 以下端口的权限:

sudo /sbin/setcap 'cap_net_bind_service=+ep' ~/.bun/bin/bun

这里 ~/.bun/bin/bun 可以换成任何程序,如 node.js、python、go

一般我比较推荐方法2,相比于方法1没有中转开销。