WSL 中的 nodejs 无法监听 80 端口的解决方法

今天遇到了一个问题。
在使用 vue-cli 启动某个项目的时候,配置设置的是监听端口 80,但是最后启动之后监听端口自动变成了 1024
一开始我以为是哪里配置写错了,于是全局搜索了一下 1024 这个关键字,但是没发现什么问题
然后我开始怀疑是 WSL 的问题,因为在一天之前,我这个项目还在 Window 本机能正常启动并且监听 80 端口
在 Google 了一番 WSL 80 port 类似的关键字一无所获后
我试了一下新建了一个简单的 nodejs 项目

    let http = require("http")
    http.createServer().listen(80)

然后拿 node 运行了一下
果然,报错提示:无权限
然后用 sudo 命令试了一下 sudo node index
由于我用的是 nvm 安装的 nodejs,命令行提示没有 node 这个命令
用 whereis 查找了以下,发现 node 安装在
/home/flowfire/.nvm/versions/node/v12.13.1/bin/node
于是把 node 命令替换成这个完整路径并使用 sudo 调用,发现启动成功了
但是有一个问题,我启动 vue 项目用的是 npm,node 是 npm 内调用的
而 npm 默认我已经配置了环境变量 PATH 的值,所以会直接调用,因此会报 node 命令不存在 的错误
然而由于我不太想修改 root 这个用户的环境变量值,因此使用 sudo + npm的绝对路径 这条路子貌似是走不通
然后我想到,最终执行命令的是 node 这个程序,只要让他使用 root 权限执行命令即可。。。
所以。。。
cd 到 /home/flowfire/.nvm/versions/node/v12.13.1/bin/ 目录
把 node 的所有者改为 root,然后添加 s 权限。
然后直接用 npm run serve ,不需要带 sudo,这样在 npm 调用到 node 的时候就是默认 root 权限。可以成功打开 80 端口。
不过有一个安全隐患就是,这样一来,所有使用 nodejs 执行的程序都默认拥有了 root 权限。。。。

推荐阅读更多精彩内容