Ubuntu16.04下NVM安装的NodeJS无法被非root用户访问的解决问询
解决非root用户无法访问Node.js的问题
你遇到的核心问题是目录权限链的访问限制——虽然Node.js的二进制文件本身对所有用户开放了执行权限,但它藏在root的家目录里,默认情况下非root用户连进入/root目录的权限都没有,更别说往下走到node所在的路径了。下面给你两个可行的解决方案,你可以根据需求选择:
方案一:调整目录权限(快速但需注意安全)
这个方法不需要移动文件,只要给非root用户开放到node文件的目录访问权限就行:
- 首先给root家目录添加其他用户的执行权限(执行权限对目录来说就是允许进入,这里不要给读权限,避免非root能查看root家目录里的其他文件):
chmod o+x /root - 接着依次给node所在的各级目录也加上执行权限:
做完这些,非root用户再执行chmod o+x /root/.nvm chmod o+x /root/.nvm/versions chmod o+x /root/.nvm/versions/node chmod o+x /root/.nvm/versions/node/v8.9.3 chmod o+x /root/.nvm/versions/node/v8.9.3/binnode -v应该就能正常返回版本号了。
方案二:复制文件到公共目录(更安全推荐)
如果不想开放root家目录的权限,更稳妥的做法是把node和npm复制到系统公共的可执行目录(比如/usr/local/bin):
- 复制node二进制文件:
cp /root/.nvm/versions/node/v8.9.3/bin/node /usr/local/bin/ - 顺便把npm也复制过去(如果需要的话):
cp /root/.nvm/versions/node/v8.9.3/bin/npm /usr/local/bin/ - 确保复制后的文件权限正确,所有用户都能执行:
之后非root用户就能直接通过chmod 755 /usr/local/bin/node /usr/local/bin/npmnode命令访问了,而且完全不需要碰root家目录的权限。
额外检查:PATH环境变量
如果做完上面的操作还是提示找不到node,记得检查非root用户的PATH里有没有包含/usr/bin或者/usr/local/bin。可以执行:
echo $PATH
如果没看到目标目录,让用户在~/.bashrc或者~/.profile里添加一行:
export PATH=$PATH:/usr/local/bin
然后执行source ~/.bashrc让修改立刻生效。
内容的提问来源于stack exchange,提问作者James Newton




