Perché l'autorizzazione negata per npm inizia a usare node-dev?


9

Sto cercando di avviare un'applicazione node.js con un utente con autorizzazioni limitate. Tutti i file che conosco sono di proprietà dell'utente corretto e le autorizzazioni sono impostate ragionevolmente bene. Sto cercando di utilizzare un file di script per fare questo. Invoco lo script con questo comando

sudo su - nodejs ./start-apps.sh

Lo script della shell esegue questo comando per avviare l'app

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

npm startè documentato qui . Praticamente estrae il comando per utilizzare il file package.json, che nella nostra app è simile al seguente:

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

E sputa l'errore:

> 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

Questo shsembra dire che sta segnalando errori dal comando shell. Non penso che il problema stia accedendo al npmcomando stesso, perché se lo fosse, l'autorizzazione negata verrebbe sollevata prima di qualsiasi output dal comando npm. Ma solo per escluderlo, ecco le autorizzazioni per il comando npm stesso:

$ 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

Sembra che tutti dovrebbero essere in grado di eseguirlo.

Le autorizzazioni per node-devassomigliare a questo:

$ 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

Ho già provato a chowncollegare il link nodejs:nodejs, ma lo script presenta lo stesso errore.

C'è qualche problema con le autorizzazioni dei file che non vedo nei file binari? O è un errore npm/ node-devspecifico?

Risposte:


10

Il secondo node-devnon è eseguibile e il collegamento simbolico punta a quello. Sebbene il collegamento simbolico sia eseguibile (i collegamenti simbolici sono sempre 777), è la modalità del file che punta a contare; si noti che la chiamata chmodal collegamento in realtà modifica la modalità del file a cui punta (le autorizzazioni del collegamento simbolico non cambiano mai).

Quindi forse devi aggiungere il bit eseguibile per tutti:

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

Oh sì, non sapevo molto con chmodun link simbolico, ho solo provato a cambiare la proprietà. Proverò ora l'esecuzione - non riesco a credere di essermi perso. Immagino che stavo pensando che la copia nella mia .npmdirectory sarebbe stata eseguita di sicuro. Non riuscivo a pensare a come verificarlo, perché node-devnpm non è installato a livello globale, quindi bash non ha riconosciuto il node-devcomando; npm capisce magicamente dove e cosa chiamare.
Patrick M,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.