web-dev-qa-db-ja.com

npmの権限がnode-devの使用を拒否されるのはなぜですか?

権限の低いユーザーでnode.jsアプリケーションを起動しようとしています。私が知っているすべてのファイルは正しいユーザーが所有しており、適切に設定されたアクセス許可を持っています。これを行うためにスクリプトファイルを使用しようとしています。このコマンドでスクリプトを呼び出します

Sudo su - nodejs ./start-apps.sh

シェルスクリプトはこのコマンドを実行してアプリを起動します

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

npm startここに記載 です。基本的には、使用するコマンドをpackage.jsonファイルから取り出します。このファイルは、アプリでは次のようになります。

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

そして、それはエラーを吐き出します:

> [email protected] start /home/nodejs/my-app
> node-dev app

sh: 1: node-dev: Permission denied

npm ERR! [email protected] 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

私はすでにchowning the link to nodejs:nodejsを試しましたが、スクリプトは同じエラーを経験します。

バイナリファイルでは見られないファイルアクセス許可の問題はありますか?または、これはnpm/node-dev固有のエラーですか?

9
Patrick M

二番目 node-devは実行可能ではなく、シンボリックリンクはそれを指します。シンボリックリンクは実行可能ですが(シンボリックリンクは常に777です)、それが指すファイルのモードです。リンク上でchmodを呼び出すと、実際にそれが指すファイルのモードが変更されることに注意してください(シンボリックリンクのアクセス許可は変更されません)。

したがって、おそらく、すべての人に実行可能ビットを追加する必要があります。

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