ทำไมสิทธิ์ปฏิเสธสำหรับ 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แล้ว แต่ Scrip พบข้อผิดพลาดเดียวกัน

มีปัญหาการอนุญาตไฟล์ที่ฉันไม่เห็นด้วยหรือไม่? หรือข้อผิดพลาดนี้npm/ node-devเฉพาะ?

คำตอบ:


10

ที่สองnode-devไม่สามารถใช้งานได้และ symlink ชี้ไปที่ แม้ว่า symlink นั้นจะสามารถเรียกใช้งานได้ (symlink จะมีค่า 777 เสมอ) แต่ก็เป็นโหมดของไฟล์ที่ชี้ไปที่จำนวนนั้น โปรดทราบว่าการเรียกchmodใช้ลิงก์จะเปลี่ยนโหมดของไฟล์ที่ชี้ไป (การอนุญาต symlink จะไม่เปลี่ยนแปลง)

ดังนั้นบางทีคุณต้องเพิ่มบิตที่สามารถเรียกใช้งานได้สำหรับทุกคน:

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

โอ้ใช่ฉันรู้ไม่มากกับการchmod'เชื่อมโยง symlink ฉันแค่ลองเปลี่ยนความเป็นเจ้าของ ฉันจะลองดำเนินการตอนนี้ - ฉันไม่อยากเชื่อเลยว่าจะพลาด ฉันคิดว่าฉันคิดว่าการคัดลอกใน.npmไดเรกทอรีของฉันจะถูกดำเนินการอย่างแน่นอน ฉันไม่สามารถคิดวิธีการตรวจสอบได้เพราะnode-devไม่ได้ติดตั้งทั่วโลกดังนั้นจึงไม่รู้จักnode-devคำสั่งbash NPM เป็นเพียงตัวเลขที่น่าอัศจรรย์ว่าจะโทรหาที่ไหนและอย่างไร
Patrick M
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.