Pat*_*k M 10 permissions executable symlink node.js npm
我正在尝试使用低权限用户启动 node.js 应用程序。我知道的所有文件都归正确的用户所有,并且权限设置得相当好。我正在尝试使用脚本文件来执行此操作。我用这个命令调用脚本
sudo su - nodejs ./start-apps.sh
Run Code Online (Sandbox Code Playgroud)
shell 脚本运行此命令以启动应用程序
cd "/home/nodejs/my-app"
npm start
Run Code Online (Sandbox Code Playgroud)
npm start被记录在这里。它基本上从 package.json 文件中提取要使用的命令,在我们的应用程序中看起来像这样:
// snip
"scripts": {
"start": "node-dev app"
},
Run Code Online (Sandbox Code Playgroud)
它吐出错误:
> my-app@0.1.0-build.100 start /home/nodejs/my-app
> node-dev app
sh: 1: node-dev: Permission denied
npm ERR! spicoli-authorization@0.1.0-build.100 start: `node-dev app`
npm ERR! Exit status 126
Run Code Online (Sandbox Code Playgroud)
这sh似乎是说它正在报告来自 shell 命令的错误。我不认为问题出在访问npm命令本身,因为如果是这样,权限被拒绝将在 npm 命令的任何输出之前引发。但只是为了排除它,这里是 npm 命令本身的权限:
$ sudo find / ! \( -type d \) -name npm -exec ls -lah {} \;
-rwxr-xr-x 1 root root 274 Nov 12 20:22 /usr/local/src/node-v0.10.22/deps/npm/bin/npm
-rwxr-xr-x 1 root root 274 Nov 12 20:22 /usr/local/lib/node_modules/npm/bin/npm
lrwxrwxrwx 1 root root 38 Jan 14 07:49 /usr/local/bin/npm -> ../lib/node_modules/npm/bin/npm-cli.js
Run Code Online (Sandbox Code Playgroud)
看起来每个人都应该能够执行它。
的权限node-dev如下所示:
$ sudo find / ! \( -type d \) -name node-dev -exec ls -lah {} \;
-rwxr-xr-x 1 nodejs nodejs 193 Mar 3 2013 /home/nodejs/.npm/node-dev/2.1.4/package/bin/node-dev
-rw-r--r-- 1 nodejs nodejs 193 Mar 3 2013 /home/nodejs/spicoli-authorization/node_modules/node-dev/bin/node-dev
lrwxrwxrwx 1 root root 24 Jan 14 07:50 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev -> ../node-dev/bin/node-dev
Run Code Online (Sandbox Code Playgroud)
我已经尝试chown过链接到nodejs:nodejs,但是脚本遇到了同样的错误。
是否存在一些我在二进制文件中没有看到的文件权限问题?或者这是一个npm/node-dev特定的错误?
gol*_*cks 11
第二个node-dev是不可执行的,符号链接指向那个。尽管符号链接是可执行的(符号链接总是 777),但它指向的文件模式才是重要的;请注意,调用chmod链接实际上会更改它指向的文件的模式(符号链接权限永远不会改变)。
所以也许你需要为每个人添加可执行位:
chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
Run Code Online (Sandbox Code Playgroud)