Pourquoi l'autorisation est-elle refusée pour que npm commence à utiliser node-dev?

9

J'essaie de démarrer une application node.js avec un utilisateur à faibles autorisations. Tous les fichiers que je connais appartiennent au bon utilisateur et les autorisations sont assez bien définies. J'essaie d'utiliser un fichier script pour ce faire. J'invoque le script avec cette commande

sudo su - nodejs ./start-apps.sh

Le script shell exécute cette commande pour démarrer l'application

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

npm startest documenté ici . Il extrait essentiellement la commande à utiliser du fichier package.json, qui dans notre application ressemble à ceci:

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

Et cela crache l'erreur:

> [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

Cela shsemble dire qu'il signale des erreurs de la commande shell. Je ne pense pas que le problème soit d'accéder à la npmcommande elle-même, car si c'était le cas, l'autorisation refusée serait levée avant toute sortie de la commande npm. Mais juste pour l'exclure, voici les autorisations pour la commande npm elle-même:

$ 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

Il semble que tout le monde devrait pouvoir l'exécuter.

Les autorisations pour node-devressembler à ceci:

$ 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

J'ai déjà essayé chownle lien vers nodejs:nodejs, mais le script rencontre la même erreur.

Y a-t-il un problème d'autorisations de fichiers que je ne vois pas avec les fichiers binaires? Ou s'agit-il d'une erreur npm/ node-devspécifique?

Patrick M
la source

Réponses:

10

Le second node-devn'est pas exécutable, et le lien symbolique pointe vers cela. Bien que le lien symbolique soit exécutable (les liens symboliques sont toujours 777), c'est le mode du fichier vers lequel il pointe qui compte; notez que l'appel chmodsur le lien change en fait le mode du fichier vers lequel il pointe (les permissions des liens symboliques ne changent jamais).

Alors peut-être que vous devez ajouter le bit exécutable pour tout le monde:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
boucle d'or
la source
Oh ouais, je ne savais pas grand-chose avec chmodun lien symbolique, j'ai juste essayé le changement de propriétaire. Je vais essayer l'exécution maintenant - je ne peux pas croire que j'ai raté ça. Je suppose que je pensais que la copie dans mon .npmrépertoire serait exécutée à coup sûr. Je ne pouvais pas penser comment vérifier cela, car node-devnpm n'est pas installé globalement, donc bash ne reconnaît pas la node-devcommande; npm trouve par magie où et quoi appeler.
Patrick M