73

编辑 2:TL;DR:2013 年的答案是肯定的,但这个缺陷已经修复

按照 vagrantup.com 上的入门说明,我似乎最终得到了一个在端口 2222 上接受 SSH 连接的虚拟机,这样任何人都可以使用默认凭据(用户名)获得对我的 VM 的 root 访问权限并读取我的主机工作目录=password=vagrant 或 vagrant_insecure_private_key)。

这是真的?如果是,为什么不认为它是一个巨大的安全漏洞?如果我将敏感数据复制到 VM 会怎样?

编辑:对于那些认为互联网上的任何人都能够阅读您的源代码并在您的 VM 上执行任意代码的人来说还不错,我建议您阅读这篇博文 http://blog.ontoillogical 中的“突破”部分。 com/blog/2012/10/31/闯入和走出流浪者/

简而言之:“按预期”运行 Vagrant 还可以让任何人闯入您的主机/开发机器(例如,通过使用恶意 git post-commit 钩子)。

4

6 回答 6

100

简短的回答是YES

为什么?

在构建 Vagrant base box(手动或使用 Veewee 等工具自动化)时,构建者遵循vagrant base box 规范,该规范定义了以下内容:

  1. 用户rootvagrant使用vagrant作为密码
  2. 用户的公钥认证(无密码)vagrant

Vagrant 项目为 SSH 公钥身份验证提供了一个不安全的密钥对vagrant ssh,因此可以正常工作。

因为每个人都可以访问私钥,所以任何人都可以使用私钥登录您的虚拟机(假设他们知道您的主机 IP,端口默认为 2222 作为转发规则。)

它不是安全的 OOTB。但是,您可以从中删除受信任的密钥~vagrant/.ssh/authorized_keys并添加自己的密钥,更改密码vagrantroot然后它被认为是相对安全的。

更新

从 Vagrant 1.2.3 开始,默认情况下 SSH 转发端口绑定到 127.0.0.1,因此只允许本地连接 [GH-1785]。

重要更新

从 Vagrant 1.7.0 ( PR #4707 ) 开始,Vagrant 将首先用随机生成的密钥对替换默认的不安全 ssh 密钥对vagrant up

请参阅CHANGELOG:使用默认的不安全密钥对,Vagrant 会在 first 上自动将其替换为随机生成的密钥对vagrant upGH-2608

于 2013-02-05T23:55:58.693 回答
10

我已在 github 存储库中将此问题作为 vagrant 的问题提出。开发人员表示他们将解决转发端口在外部可用的问题。然而,开发人员不接受有关从 VM 破坏主机环境的问题。我认为他们大错特错。

https://github.com/mitchellh/vagrant/issues/1785

脱离 vm 比链接的博客文章建议的要容易。您不必依赖 git 挂钩来破坏主机,只需将任意 ruby​​ 代码放入 Vagrant 文件即可。

如果可以的话,我会在虚拟机沙箱中运行 vagrant。既然不能,我就凑合着用防火墙。

最好有配置规则来添加安全 ssh 密钥,并删除不安全的密钥和默认密码。

于 2013-06-04T13:57:55.007 回答
9

我编写了这个简单的内联 shell 配置程序,用我的 id_rsa.pub 替换了 authorized_keys。一旦提供了 insecure_private_key 就不能用于身份验证。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

# ...

  config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'" # avoids 'stdin: is not a tty' error.

  config.ssh.private_key_path = ["#{ENV['HOME']}/.ssh/id_rsa","#{ENV['HOME']}/.vagrant.d/insecure_private_key"]

  config.vm.provision "shell", inline: <<-SCRIPT
    printf "%s\n" "#{File.read("#{ENV['HOME']}/.ssh/id_rsa.pub")}" > /home/vagrant/.ssh/authorized_keys
    chown -R vagrant:vagrant /home/vagrant/.ssh
  SCRIPT

end
于 2014-02-01T01:21:10.773 回答
7

从 Vagrant 1.2.3 开始,默认绑定到 localhost 而不是公共接口,避免了外部连接问题。

于 2013-09-18T17:49:37.613 回答
1

只是想补充一点,有一个 Vagrant 插件可以解决这个问题:vagrant-rekey-ssh。它会更改 VM 的默认密码,并删除不安全的 SSH 密钥。

于 2014-12-03T20:48:43.953 回答
0

我想解释一下为什么 Vagrant 不一定像你想象的那样不安全。

首先我想说的是,我相信你们中的大多数人已经意识到,有必要保持对 Vagrant 盒子的开放访问,因为这些盒子是共享的。出于这个原因,我认为主要的安全问题不是在下载盒子后更改默认凭据。在桥接模式下运行这样的机器将允许网络上的某人使用默认凭据进行 ssh。

It appears to me that the idea behind these boxes is that anyone can download it, and secure it once it is in their possession. My vagrant installation replaces default keys with a new, randomly generated ssh key. I am not sure if this is being done with a plugin, however I am curious to know if the password-less sudo and default password also present a security risk.

于 2015-11-09T17:33:56.873 回答