流浪汉缺乏安全感?

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

通过遵循 agrantup.com 上的入门指南,我似乎得到了一台接受端口2222上的 SSH 连接的虚拟机,这样任何人都可以使用默认凭证(username = password = 凭空或凭空 _ security _ private _ key)从根访问我的 VM 并读取我的主机工作目录。

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

编辑 : 对于那些认为互联网上的任何人都可以读取你的源代码并在你的虚拟机上执行任意代码并不是那么糟糕的人,我建议阅读这篇博客文章中的“突破”部分 < a href = “ http://blog.ontoollogical.com/blog/2012/10/31/break-in-and-out-of-vasrant/”rel = “ norefrer”> http://blog.ontoillogical.com/blog/2012/10/31/Breaking-in-and-out-of-vagrant/

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

42819 次浏览

简短的答案是 是的

为什么?

当构建流浪者基本框时(手动或使用诸如 Veewee 之类的工具自动化) ,构建器遵循定义如下的 流浪者基座盒规格:

  1. 用户 rootvagrant使用 流浪汉作为密码
  2. 用户的公共密钥认证(无密码)。

流浪者计划为 SSH 公共密钥认证提供了一个不安全的 < strong > 密钥对 ,因此 vagrant ssh可以正常工作。

因为每个人都可以访问私钥,所以任何人都可以使用私钥登录到您的 VM (假设他们知道主机的 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上用随机生成的密钥对替换缺省的不安全的 ssh 密钥对。

请参见 彻底改变: 使用默认的不安全密钥对,Vagrant 将在第一个 vagrant up上自动用随机生成的密钥对替换它。GH-2608

我在 github 的流浪汉存储库中提出了这个问题。开发人员已经表示,他们将修复外部可用的转发端口的问题。然而,开发人员不接受关于从 VM 中损害主机环境的问题。我认为他们错得很危险。

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

打破虚拟机比博客链接建议的更容易。您不必依赖 git 钩子来破坏主机,只需将任意的 Ruby 代码放入 Vagrant 文件中即可。

如果可以的话,我会在虚拟机沙盒里运行流浪者,因为我做不到,所以我只能用防火墙。

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

在 Vagrant 1.2.3中,默认情况下是绑定到 localhost 而不是公共接口,从而避免了外部连接问题。

我编写了这个简单的内联 shell 提供程序,以便用 id _ rsa 交换  已授權 _ key。酒吧。一旦提供了,就不能使用 security _ 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

只是想补充说,有一个流浪者插件,解决这个问题: 流浪汉。它更改 VM 的默认密码,并删除不安全的 SSH 密钥。

我想解释一下为什么流浪汉并不像你想的那样缺乏安全感。

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

在我看来,这些盒子背后的想法是,任何人都可以下载它,并保护它一旦它是在他们的拥有。我的随机安装用一个新的、随机生成的 ssh 密钥替换了默认密钥。我不确定这是否是通过插件完成的,但是我很好奇无密码的 sudo 和默认密码是否也存在安全风险。