为什么拒绝使用npm开始使用node-dev的权限?


9

我正在尝试以低权限用户启动node.js应用程序。我知道的所有文件均由正确的用户拥有,并且权限设置得相当好。我正在尝试使用脚本文件来执行此操作。我用此命令调用脚本

sudo su - nodejs ./start-apps.sh

Shell脚本运行此命令以启动应用程序

cd "/home/nodejs/my-app"
npm start

npm start记录在这里。基本上,它从package.json文件中拉出要使用的命令,该文件在我们的应用程序中如下所示:

// snip
"scripts": {
    "start": "node-dev app"
  },

它吐出错误:

> 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

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

看起来每个人都应该能够执行它。

的权限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

我已经尝试chown过链接到nodejs:nodejs,但是该脚本已遇到相同的错误。

二进制文件没有出现某些文件权限问题吗?还是这是npm/ node-dev特定的错误?

Answers:


10

第二个node-dev不是可执行文件,并且符号链接指向该文件。尽管符号链接是可执行的(符号链接始终为777),但这是它所指向的文件模式。请注意,调用chmod链接实际上会更改它指向的文件的模式(符号链接权限永远不会更改)。

因此,也许您需要为所有人添加可执行文件:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev

哦,是的,我chmod对符号链接了解不多,我只是尝试过所有权变更。我现在将尝试执行命令的事情-我简直不敢错过。我想我在想.npm肯定会执行目录中的副本。我不知道该怎么检查,因为node-devnpm没有全局安装,所以bash无法识别该node-dev命令。npm只是神奇地弄清楚了在哪里打电话。
Patrick M
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.