Почему отказано в разрешении на запуск npm с использованием node-dev?

9

Я пытаюсь запустить приложение 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, но сценарий вызывает ту же ошибку.

Есть ли проблема с правами доступа к файлам, которую я не вижу с двоичными файлами? Или это npm/ node-devконкретная ошибка?

Патрик М
источник

Ответы:

10

Второй node-devне является исполняемым, и символическая ссылка указывает на это. Хотя символическая ссылка является исполняемой (символические ссылки всегда 777), это режим файла, на который он указывает, который считается; обратите внимание, что обращение chmodк ссылке фактически меняет режим файла, на который она указывает (разрешения символической ссылки никогда не меняются).

Так что, возможно, вам нужно добавить исполняемый бит для всех:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
лютик золотистый
источник
О да, я мало что знал с chmodсимволической ссылкой, я просто попытался сменить владельца. Сейчас я попробую казнь - не могу поверить, что пропустила это. Я думаю, я думал, что копия в моем .npmкаталоге будет выполнена наверняка. Я не мог придумать, как это проверить, потому что node-devглобально не установлен npm, поэтому bash не распознает node-devкоманду; npm просто волшебным образом выясняет, куда и как позвонить.
Патрик М