¿Por qué se niega el permiso para que npm comience a usar node-dev?

9

Estoy tratando de iniciar una aplicación node.js con un usuario con permisos bajos. Todos los archivos que conozco son propiedad del usuario correcto y tienen permisos establecidos razonablemente bien. Estoy tratando de usar un archivo de script para hacer esto. Invoco el script con este comando

sudo su - nodejs ./start-apps.sh

El script de shell ejecuta este comando para iniciar la aplicación

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

npm startestá documentado aquí . Básicamente, extrae el comando para usar del archivo package.json, que en nuestra aplicación se ve así:

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

Y escupe el error:

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

Eso shparece estar diciendo que informa errores del comando de shell. No creo que el problema sea acceder al npmcomando en sí, porque si lo fuera, el permiso denegado se generaría antes de cualquier salida del comando npm. Pero solo para descartarlo, aquí están los permisos para el comando 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

Parece que todos deberían poder ejecutarlo.

Los permisos para node-devverse así:

$ 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

Ya probé chownel enlace nodejs:nodejs, pero el script experimenta el mismo error.

¿Hay algún problema de permisos de archivos que no veo con los archivos binarios? O se trata de un npm/ node-deverror específico?

Patrick M
fuente

Respuestas:

10

El segundo node-devno es ejecutable, y el enlace simbólico apunta a eso. Aunque el enlace simbólico es ejecutable (los enlaces simbólicos son siempre 777), lo que cuenta es el modo del archivo al que apunta; tenga en cuenta que llamar chmodal enlace en realidad cambia el modo del archivo al que apunta (los permisos de enlace simbólico nunca cambian).

Entonces quizás necesite agregar el bit ejecutable para todos:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
encerrada dorada
fuente
Ah, sí, sabía que no era demasiado con chmodun enlace simbólico, solo intenté el cambio de propiedad. Intentaré la ejecución ahora, no puedo creer que me haya perdido eso. Supongo que estaba pensando que la copia en mi .npmdirectorio se ejecutaría con seguridad. No pude pensar cómo verificar eso, porque node-devnpm no está instalado globalmente, por lo que bash no reconoce el node-devcomando; npm solo mágicamente descubre dónde y a qué llamar.
Patrick M