首先,为什么npm建议它应该只作为非root运行?我不相信高,每一个其他的包管理器(apt,yum,gem,pacman)是错误的,需要sudo的.
其次,当我按照他们的建议(并npm install以非root身份运行)时,它将无效(因为非root用户没有/ usr/local/lib的权限).我如何遵循他们的建议?我不会chown -R $USER /usr/local/lib,因为这对我来说似乎是一个非常糟糕的主意.
我通过(自述文件中的说明)安装了npmcurl http://npmjs.org/install.sh | sudo sh.
当我运行时sudo npm install mongoose,npm告诉我不要以root身份运行它:
npm ERR! sudon't!
npm ERR! sudon't! Running npm as root is not recommended!
npm ERR! sudon't! Seriously, don't do this!
npm ERR! sudon't!
Run Code Online (Sandbox Code Playgroud)
但是当我npm install mongoose没有sudo 运行时,我得到以下内容:
npm info it worked if it ends with ok
npm info using npm@0.2.17
npm info using node@v0.4.0-pre
npm info fetch http://registry.npmjs.org/mongoose/-/mongoose-1.0.7.tgz
npm info calculating sha1 /tmp/npm-1297199132405/1297199132406-0.7044695958029479/tmp.tgz
npm info shasum b3573930a22066fbf3ab745a79329d5eae75b8ae
npm ERR! Could not create /usr/local/lib/node/.npm/.cache/mongoose/1.0.7/package.tgz
npm ERR! Failed creating the tarball.
npm ERR! This is very rare. Perhaps the 'gzip' or 'tar' configs
npm ERR! are set improperly?
npm ERR!
npm ERR! couldn't pack /tmp/npm-1297199132405/1297199132406-0.7044695958029479/contents/package to /usr/local/lib/node/.npm/.cache/mongoose/1.0.7/package.tgz
npm ERR! Error installing mongoose@1.0.7
npm ERR! Error: EACCES, Permission denied '/usr/local/lib/node/.npm/.cache/mongoose'
npm ERR! There appear to be some permission problems
npm ERR! See the section on 'Permission Errors' at
npm ERR! http://github.com/isaacs/npm#readme
npm ERR! This will get better in the future, I promise.
npm not ok
Run Code Online (Sandbox Code Playgroud)
所以它告诉我不应该使用sudo,如果我按照他们的建议则不行.
这导致我上面的初步问题.
Zed*_*Zed 50
其实,故宫也没有建议不要以root身份运行.好了,不再了.
它在您提出问题的同时发生了变化.这就是自述文件在2011年2月7日的样子:"使用sudo与npm是非常不推荐的.任何人都可以发布任何内容,包安装可以运行任意脚本." 稍后将更详细地解释为"选项4:不推荐使用!我们可以一直使用sudo来处理所有事情,并忽略令人难以置信的令人讨厌的警告,告诉你这样做是疯了."
请参阅:https://github.com/isaacs/npm/tree/7288a137f3ea7fafc9d4e7d0001a8cd044d3a22e#readme
现在它实际上被认为是安装npm 的推荐技术:
简单安装 - 要使用一个命令安装npm,请执行以下操作:
curl http://npmjs.org/install.sh | sudo sh
请参阅:https://github.com/isaacs/npm/tree/99f804f43327c49ce045ae2c105995636c847145#readme
我的建议是永远不要这样做,因为它基本上意味着:
正如你可以看到这是真的,从字面上看,没有夸张赋予root的shell到无论你在使用不安全的连接从互联网上寻求一个脚本后,没有任何验证.这里至少有5种不同的东西可能出错,其中任何一种都可能导致攻击者完全控制你的机器:
另请注意,使用"sh"代替"sudo sh"通常风险不小,除非您将其作为无法访问您的私人数据的其他用户运行,通常情况并非如此.
您应该使用HTTPS连接(如果可用)下载此类脚本,这样您至少可以验证您正在与谁通话,即使这样我也不会在没有先阅读的情况下运行它.不幸的是,npmjs.org有一个自签名证书,所以在这种情况下它并没有真正的帮助.
幸运的是,npm在GitHub上可用,它具有有效的SSL证书,您可以从中使用安全连接下载它.有关详细信息,请参阅:github.com/isaacs/npm.但要确保npm本身不使用不安全的连接来下载它下载的文件 - 在npm config中应该有一个选项.
希望能帮助到你.祝好运!
Sco*_*and 20
简单的答案是,出于众所周知的安全原因,Web服务器永远不应该以root身份运行,因此这也适用于npm命令.
要重新开始,请删除之前的Node.js和npm安装以及这些文件/目录:
mv ~/.npmrc ~/.npmrc~prior
mv ~/.npm ~/.npm~prior
mv ~/tmp ~/tmp.~prior
mv ~/.npm-init.js ~/.npm-init.js~prior
Run Code Online (Sandbox Code Playgroud)
解决方案:将Node.js(随npm一起提供)安装为NON root(无sudo)
直接从https://nodejs.org/en/download/下载源代码
自己执行以下操作(Linux/OS X)
cd node-v8.1.2 # into expanded source dir
export NODE_PARENT=${HOME}/node-v8.1.2 # put this into your ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
随意改变以上出口到任何适当的位置
./configure --prefix=${NODE_PARENT}
make -j4 # for dual core ... use -j8 for quad core CPU
make install
Run Code Online (Sandbox Code Playgroud)
它将Node.js和npm的二进制文件以及它的模块存储库放入$ NODE_PARENT,这是一个$ USER拥有的目录,然后允许你自己发出后续的npm install xxx命令.
要获取node和npm的二进制文件,请更改〜/ .bashrc中的PATH环境变量:
export PATH=${NODE_PARENT}/bin:${PATH}
export NODE_PATH=${NODE_PARENT}/lib/node_modules
Run Code Online (Sandbox Code Playgroud)
然后将包安装到该目录(全局),而不是当前目录(本地),总是传入-g标志(全局):
npm install -g someModule
Run Code Online (Sandbox Code Playgroud)
注意 - 在任何时候你都不执行任何npm或与root/sudo相关的节点.
| 归档时间: |
|
| 查看次数: |
28955 次 |
| 最近记录: |