一尘不染

npm如何/为什么不建议以root身份运行?

node.js

简而言之…

首先,为什么npm建议仅以非root用户身份运行它?我不相信高,每一个其他的包管理器(aptyumgempacman)是错误的,需要sudo的。

其次,当我遵循他们的建议(并npm install以非超级用户身份运行)时,它将不起作用(因为非超级用户没有对/ 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!

但是当我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

因此它告诉我我不应该使用sudo,如果我遵循他们的建议,那么它就不起作用。

这导致了我上面的最初问题。


阅读 299

收藏
2020-07-07

共1个答案

一尘不染

其实,故宫也 没有 建议不要以root身份运行。好吧,不再。

在您询问问题的同时,情况已经发生变化。这是自述文件在2011年2月7日的样子:
“不建议将sudo与npm一起使用。任何人都可以发布任何内容,并且软件包安装可以运行任意脚本。” 稍后将其更详细地解释为
“选项4:不推荐使用!您可以一直在所有内容上使用sudo,而忽略令人讨厌的警告,告诉您您这样做太疯狂了。”

参见:https
:
//github.com/isaacs/npm/tree/7288a137f3ea7fafc9d4e7d0001a8cd044d3a22e#readme

现在,实际上已考虑将其 推荐 为安装npm的技术:

简单安装-要使用一个命令安装npm,请执行以下操作:

curl http:/ /npmjs.org/install.sh | 须藤

参见:https
:
//github.com/isaacs/npm/tree/99f804f43327c49ce045ae2c105995636c847145#readme

我的建议是 永远不要这样做, 因为这基本上意味着:

  1. 找出本地DNS(或其他欺骗DNS响应或破坏DNS缓存的人)说的是npmjs.org的IP地址
  2. 在端口80上用该IP(或任何说这是他的IP)与不安全的TCP连接
  3. 信任您认为应该与之对话的路由器(或给您DHCP响应的任何人说您应与之对话)将数据包传递到正确的主机
  4. 可能会经过另一层透明缓存代理
  5. 信任您与TCP连接的另一端之间的所有其他网络
  6. 不知道您与谁有联系
  7. 交叉手指
  8. 通过不安全的HTTP请求install.sh脚本,不进行任何验证
  9. 然后以最大权限在计算机上运行您正在与之交谈的人返回的任何内容,甚至不检查它是什么。

正如您所看到的,从字面上看,这实际上并没有夸张,因为通过不安全的连接从Internet上请求脚本后, 根本 不用 root shell 进行
任何 验证 。至少有5种不同的地方可能出问题,其中任何一种都可能导致攻击者完全控制您的计算机:

  1. DHCP欺骗
  2. ARP欺骗
  3. DNS缓存中毒
  4. DNS响应欺骗
  5. TCP会话劫持

还要注意,使用“ sh”代替“ sudo sh”通常不会降低风险,除非您以无法访问您的私有数据的其他用户身份运行它,通常情况并非如此。

如果可以下载此类脚本,则应该使用HTTPS连接,以便至少可以验证您正在与谁交谈,即使这样,我也必须先阅读才能运行它。不幸的是npmjs.org有一个自签名证书,因此在这种情况下它并没有真正的帮助。

幸运的是,npm在具有有效SSL证书的GitHub上可用,您可以从此处使用安全连接下载npm。参见:github.com/isaacs/npm了解更多信息。但是请确保npm本身不使用不安全的连接来下载它下载的文件-
npm config中应该有一个选项。

希望能帮助到你。祝好运!

2020-07-07