Tại sao quyền bị từ chối cho npm bắt đầu sử dụng nút-dev?


9

Tôi đang cố gắng khởi động ứng dụng node.js với người dùng có quyền thấp. Tất cả các tệp tôi biết đều thuộc quyền sở hữu của người dùng chính xác và có quyền được thiết lập hợp lý. Tôi đang cố gắng sử dụng một tập tin kịch bản để làm điều này. Tôi gọi kịch bản với lệnh này

sudo su - nodejs ./start-apps.sh

Kịch bản shell chạy lệnh này để khởi động ứng dụng

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

npm startđược ghi lại ở đây . Về cơ bản, nó lấy lệnh để sử dụng tệp pack.json, trong ứng dụng của chúng ta trông như thế này:

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

Và nó phát ra lỗi:

> 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

Điều đó shdường như đang nói rằng đó là báo cáo lỗi từ lệnh shell. Tôi không nghĩ rằng vấn đề là tự truy cập vào npmlệnh, bởi vì nếu có, quyền bị từ chối sẽ được đưa ra trước bất kỳ đầu ra nào từ lệnh npm. Nhưng để loại trừ nó ra, đây là các quyền cho chính lệnh 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

Có vẻ như mọi người sẽ có thể thực hiện nó.

Các quyền cho node-devgiao diện như thế này:

$ 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

Tôi đã thử chowning liên kết đến nodejs:nodejs, nhưng scrip gặp lỗi tương tự.

Có một số vấn đề về quyền tập tin mà tôi không thấy với các tệp nhị phân? Hay đây là một lỗi npm/ node-devcụ thể?

Câu trả lời:


10

Thứ hai node-devlà không thể thực thi và symlink trỏ đến đó. Mặc dù symlink có thể thực thi được (symlink luôn là 777), nhưng đây là chế độ của tệp mà nó trỏ tới số đó; lưu ý rằng việc gọi chmodvào liên kết thực sự thay đổi chế độ của tệp mà nó trỏ tới (quyền liên kết tượng trưng không bao giờ thay đổi).

Vì vậy, có lẽ bạn cần thêm bit thực thi cho mọi người:

chmod 755 /home/nodejs/spicoli-authorization/node_modules/.bin/node-dev

Ồ vâng, tôi biết không nhiều với chmod'một liên kết tượng trưng, ​​tôi chỉ thử thay đổi quyền sở hữu. Tôi sẽ thử điều thực thi ngay bây giờ - tôi không thể tin rằng tôi đã bỏ lỡ điều đó. Tôi đoán rằng tôi đã nghĩ rằng bản sao trong .npmthư mục của tôi sẽ được thực hiện chắc chắn. Tôi không thể nghĩ làm thế nào để kiểm tra điều đó, bởi vì node-devkhông phải npm được cài đặt trên toàn cầu, vì vậy bash không nhận ra node-devlệnh; npm chỉ cần kỳ diệu tìm ra nơi & những gì để gọi.
Patrick M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.