当前位置: 首页 > 面试题库 >

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

司空通
2023-03-14
问题内容

简而言之…

首先,为什么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,如果我遵循他们的建议,那么它就不起作用。

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


问题答案:

其实,故宫也 没有 建议不要以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中应该有一个选项。

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



 类似资料:
  • 问题内容: 我在Linux(Debian)上开发了C代码。有时,我需要通过执行一些命令 我想知道是否可以通过root用户执行命令。如果不是这种情况,是否有任何功能可以我在C代码上以root身份执行命令(或运行二进制文件)? 问题答案: 在遇到普通用户要执行root命令之前,我们遇到了这种情况,这是我们的解决方案(使用setuid / SUID): 假使,假设: 用户名 : 组别 : C程序文件 :

  • 我使用Ansible安装了Nginx。要在Centos7上安装,我使用了yum软件包,因此默认情况下它是以root用户身份运行的。我希望它在Centos中以不同的用户(前nginx用户)身份启动和运行。当我尝试与其他用户一起运行时,会出现以下错误: nginx的工作。服务失败,因为控制进程已退出,错误代码为。有关详细信息,请参阅“systemctl status nginx.service”和“j

  • 问题内容: 我正在使用Python在系统级别的Linux中进行项目。因此,我想知道,如果我以普通用户身份运行代码,并且正在访问系统文件,那么它应该具有root权限,那么我如何提示输入root密码并以超级用户身份运行其他代码。我想知道,如何以超级用户身份以密码提示运行python脚本。 任何帮助将不胜感激。先感谢您.. 问题答案: 您可以做的另一件事是,如果脚本不是以root身份执行的,则脚本会自动

  • 问题内容: 我需要检测php是否以没有人的身份运行。我该怎么做呢? “ nobody”还有其他名称吗?“ apache”?还有其他吗? 问题答案: 如果可用,您可以使用来探测当前用户帐户,然后使用来获取用户名 。 但是,如果您以安全模式运行(通常是在禁用exec的情况下),则您的PHP进程不太可能在默认值或帐户下运行。

  • 问题内容: 我有一些bash脚本,它们会在指定的时间添加到cron作业中,但是需要以root用户身份执行。我正在尝试运行那些脚本,即crob作业,但是它需要root用户权限,因为我在受限root用户的ubuntuec2实例中运行此作业。以root用户身份运行那些脚本的解决方法是什么。 谢谢 问题答案: 有几种可能性: 1)将脚本添加到root的crontab中。为此,您必须要做或成为root用户,

  • 我正在Docker中制作python Django应用程序的简单图像。但是在构建容器的末尾,它抛出了下一个警告(我正在Ubuntu 20.04上构建):