Próbuję uruchomić aplikację node.js z użytkownikiem o niskim poziomie uprawnień. Wszystkie pliki, które znam, są własnością właściwego użytkownika i mają odpowiednio ustawione uprawnienia. Próbuję użyć do tego pliku skryptu. Wzywam skrypt za pomocą tego polecenia
sudo su - nodejs ./start-apps.sh
Skrypt powłoki uruchamia to polecenie, aby uruchomić aplikację
cd "/home/nodejs/my-app"
npm start
npm start
jest tutaj udokumentowane . W zasadzie wyciąga polecenie do użycia z pliku package.json, który w naszej aplikacji wygląda następująco:
// snip
"scripts": {
"start": "node-dev app"
},
I wyrzuca błąd:
> 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
To sh
wydaje się mówić, że zgłasza błędy z polecenia powłoki. Nie sądzę, że problemem jest dostęp do npm
samej komendy, ponieważ gdyby tak było, odmowa uprawnień zostałaby podniesiona przed jakimkolwiek wyjściem z komendy npm. Ale żeby to wykluczyć, oto uprawnienia do samej komendy 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
Wygląda na to, że każdy powinien móc to wykonać.
Uprawnienia do node-dev
wygląda następująco:
$ 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
Próbowałem już chown
podać link do nodejs:nodejs
, ale skrypt zawiera ten sam błąd.
Czy jest jakiś problem z uprawnieniami do plików, którego nie widzę w przypadku plików binarnych? Czy też jest to npm
/ node-dev
specyficzny błąd?
chmod
dowiązaniu symbolicznym, po prostu próbowałem zmiany własności. Spróbuję teraz wykonać egzekucję - nie mogę uwierzyć, że to przegapiłem. Myślę, że myślałem, że kopia w moim.npm
katalogu na pewno zostanie wykonana. Nie mogłem wymyślić, jak to sprawdzić, ponieważnode-dev
npm nie jest zainstalowany globalnie, więc bash nie rozpoznałnode-dev
polecenia; npm po prostu magicznie domyśla się, gdzie i jak zadzwonić.