Warum wird die Berechtigung für den Start von npm mit node-dev verweigert?

9

Ich versuche, eine Anwendung node.js mit einem Benutzer mit geringen Berechtigungen zu starten. Alle mir bekannten Dateien gehören dem richtigen Benutzer und haben recht gut festgelegte Berechtigungen. Ich versuche, eine Skriptdatei zu verwenden, um dies zu tun. Ich rufe das Skript mit diesem Befehl auf

sudo su - nodejs ./start-apps.sh

Das Shell-Skript führt diesen Befehl aus, um die App zu starten

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

npm startist hier dokumentiert . Grundsätzlich wird der zu verwendende Befehl aus der Datei package.json abgerufen, die in unserer App folgendermaßen aussieht:

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

Und es spuckt den Fehler aus:

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

Das shscheint zu sagen, dass es Fehler vom Shell-Befehl meldet. Ich glaube nicht, dass das Problem darin besteht, auf den npmBefehl selbst zuzugreifen , da sonst die verweigerte Berechtigung vor jeder Ausgabe des Befehls npm ausgelöst würde. Aber um es auszuschließen, hier sind die Berechtigungen für den Befehl npm selbst:

$ 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

Es sieht so aus, als ob jeder in der Lage sein sollte, es auszuführen.

Die Berechtigungen für node-devsehen folgendermaßen aus:

$ 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

Ich habe bereits versucht, chownden Link zu zu nodejs:nodejserstellen, aber beim Scrip tritt der gleiche Fehler auf.

Gibt es ein Problem mit den Dateiberechtigungen, das ich bei den Binärdateien nicht sehe? Oder ist das ein npm/ node-devspezifischer Fehler?

Patrick M.
quelle

Antworten:

10

Die zweite node-devist nicht ausführbar, und der Symlink zeigt darauf. Obwohl der Symlink ausführbar ist (Symlinks sind immer 777), zählt der Modus der Datei, auf die er verweist. Beachten Sie, dass das Aufrufen chmoddes Links tatsächlich den Modus der Datei ändert , auf die es verweist (Symlink-Berechtigungen ändern sich nie).

Vielleicht müssen Sie das ausführbare Bit für alle hinzufügen:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
Goldlöckchen
quelle
Oh ja, ich wusste nicht viel über chmodeinen Symlink, ich habe nur versucht, den Besitzer zu wechseln. Ich werde jetzt die Hinrichtungssache ausprobieren - ich kann nicht glauben, dass ich das verpasst habe. Ich denke, ich dachte, dass die Kopie in meinem .npmVerzeichnis sicher ausgeführt werden würde. Ich konnte mir nicht vorstellen, wie ich das überprüfen soll, da node-devnpm nicht global installiert ist und bash den node-devBefehl nicht erkennt . npm findet auf magische Weise heraus, wo und wie man anruft.
Patrick M