Чому дозволу заборонено для 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-devnpm не встановлений глобально, тому bash не розпізнає node-devкоманду; npm просто магічно визначає, куди і що зателефонувати.
Патрік М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.