stream浪者默认情况下不安全?

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

按照vagrantup.com上的“入门指南”,我似乎最终得到了一个虚拟机,它接受了2222端口上的SSH连接,这样任何人都可以访问我的虚拟机,并使用默认凭据(用户名=密码= vagrant或vagrant_insecure_private_key)。

这是真的? 如果是,为什么它不被认为是一个严重的安全漏洞? 如果我将敏感数据复制到虚拟机中,该怎么办?

编辑 :对于那些认为互联网上的任何人能够读取您的来源和执行您的虚拟机上的任意代码并不是那么糟糕,我推荐阅读这个博客文章“打破”部分http://blog.ontoillogical。 COM /博客/ 2012/10月31日/磨合和-外的stream浪汉/

简而言之:按预期运行Vagrant也可以让任何人进入你的主机/开发机器(例如,通过使用恶意的git post-commit hook)。

简短的答案是肯定的

为什么?

在build造Vagrant基地箱(手动或使用像Veewee这样的工具来自动化)时,施工人员应遵循stream浪者基地箱规范 ,该规范定义了以下内容:

  1. 用户rootvagrant使用vagrant作为密码
  2. 用户vagrant公钥authentication(无密码)。

stream浪项目为SSH公钥authentication提供了一个不安全的密钥对 ,这样vagrant ssh可以工作。

因为每个人都可以访问私钥,所以任何人都可以使用私钥login到你的虚拟机(假设他们知道你的主机的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会在第一个vagrant up用随机生成的密钥对replace默认的不安全ssh密钥对。

在CHANGELOG中看到 :使用默认的不安全密钥对,stream浪者会自动用一个随机生成的密钥对replace它。 GH-2608

我已经提出这个作为一个问题在stream浪汉的github存储库。 开发人员表示,他们将通过转发的端口可以解决问题。 然而,开发人员不会接受有关从VM中妥协主机环境的问题。 我认为他们是错误的。

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

打破虚拟现实比连接的博客文章更容易。 你不必依靠git钩子来破坏主机,你只需要把任意的ruby代码放到Vagrant文​​件中。

如果可以的话,我会在虚拟机沙箱中运行stream浪汉。 由于我不能,所以我做了一个防火墙。

configuration规则添加一个安全的ssh密钥并删除不安全的密钥和默认密码是一个好主意。

我编写了这个简单的内联shellconfiguration程序,用我的id_rsa.pub换出authorized_keys。 一旦configuration,insecure_private_key不能用于authentication。

 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 

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

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

我想解释为什么stream浪者不一定像你想象的那样不安全。

我想先说一下,因为我相信你们大多数人都已经意识到,由于共享这些盒子的方式,有必要保持对stream浪者箱子的开放访问。 出于这个原因,我相信主要的安全问题是在下载这个盒子后不会改变默认的凭证。 以桥接模式运行这样一台计算机将允许networking上的某个人使用默认凭证进行login。

在我看来,这些框背后的想法是,任何人都可以下载它,并保证它一旦拥有。 我的stream浪安装用一个新的随机生成的ssh密钥replace默认密钥。 我不知道这是否与一个插件,但是我很好奇知道如果无密码的sudo和默认密码也存在安全风险。