node-dev를 사용하여 npm에 대한 권한이 거부 된 이유는 무엇입니까?


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는 항상 777 임), 해당 카운트를 가리키는 파일의 모드입니다. chmod링크 를 호출 하면 실제로 파일의 모드가 변경됩니다 (symlink 권한은 절대 변경되지 않음).

따라서 모든 사람을 위해 실행 가능 비트를 추가해야 할 수도 있습니다.

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

그래, 나는 chmod심볼릭 링크 를 많이 사용하지 않았다 , 나는 단지 소유권 변경을 시도했다. 나는 지금 처형을 시도 할 것이다-나는 그것을 놓쳤다는 것을 믿을 수 없다. 내 .npm디렉토리 의 사본이 확실히 실행될 것이라고 생각한 것 같습니다 . node-dev전 세계적으로 npm이 설치되어 있지 않기 때문에 bash가 node-dev명령을 인식하지 못 하기 때문에 확인 방법을 생각할 수 없었습니다 . npm은 어디에서 무엇을 불러야할지 마 법적으로 알아냅니다.
Patrick M
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.