権限の低いユーザーで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"
},
そして、それはエラーを吐き出します:
> 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
はシェルコマンドからのエラーを報告していると言っているようです。問題が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
が、scripでも同じエラーが発生します。
バイナリファイルでは見られないファイルアクセス許可の問題はありますか?それともnpm
/ node-dev
特定のエラーですか?
chmod
シンボリックリンクを作成することについてあまり知らないので、所有権の変更を試してみました。今から処刑をやってみます-見逃したなんて信じられません。私の.npm
ディレクトリのコピーは確実に実行されると思っていたと思います。node-dev
npmがグローバルにインストールされておらず、bashがnode-dev
コマンドを認識しないため、それを確認する方法を考えることができませんでした。npmは魔法のように、どこで何を呼び出すかを判断します。