Mengapa izin ditolak untuk NPM mulai menggunakan node-dev?

9

Saya mencoba memulai aplikasi node.js dengan pengguna dengan izin rendah. Semua file yang saya tahu dimiliki oleh pengguna yang benar dan izinnya diatur dengan cukup baik. Saya mencoba menggunakan file skrip untuk melakukan ini. Saya memohon naskah dengan perintah ini

sudo su - nodejs ./start-apps.sh

Script shell menjalankan perintah ini untuk memulai aplikasi

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

npm startadalah didokumentasikan di sini . Ini pada dasarnya menarik perintah untuk menggunakan file package.json, yang dalam aplikasi kita terlihat seperti ini:

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

Dan itu memuntahkan kesalahan:

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

Itu shsepertinya mengatakan bahwa itu melaporkan kesalahan dari perintah shell. Saya tidak berpikir masalah mengakses npmperintah itu sendiri, karena jika ya, izin yang ditolak akan dinaikkan sebelum ada keluaran dari perintah npm. Tetapi untuk mengesampingkannya, berikut adalah izin untuk perintah npm itu sendiri:

$ 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

Sepertinya semua orang harus bisa menjalankannya.

Izin untuk node-devtampilan seperti ini:

$ 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

Saya sudah mencoba chowntautannya nodejs:nodejs, tetapi skrip mengalami kesalahan yang sama.

Apakah ada beberapa masalah izin file yang tidak saya lihat dengan file biner? Atau apakah ini merupakan kesalahan npm/ node-devspesifik?

Patrick M
sumber

Jawaban:

10

Yang kedua node-devtidak dapat dieksekusi, dan symlink menunjuk ke sana. Meskipun symlink dapat dieksekusi (symlink selalu 777), itu adalah mode dari file yang ditunjuknya yang diperhitungkan; perhatikan bahwa memanggil chmodtautan sebenarnya mengubah mode file yang ditunjuknya (izin symlink tidak pernah berubah).

Jadi mungkin Anda perlu menambahkan bit yang dapat dieksekusi untuk semua orang:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev
goldilocks
sumber
Oh ya, saya tahu tidak banyak dengan chmodsymlink, saya hanya mencoba perubahan kepemilikan. Saya akan mencoba hal eksekusi sekarang - saya tidak percaya saya melewatkan itu. Saya kira saya berpikir bahwa salinan di .npmdirektori saya pasti akan dieksekusi. Saya tidak bisa memikirkan cara memeriksanya, karena node-devnpm tidak diinstal secara global, jadi bash tidak mengenali node-devperintah; NPM hanya secara ajaib mengetahui di mana & apa yang harus dihubungi.
Patrick M