编辑2 :TL; DR: 2013年答案是肯定的,但此漏洞已修复
按照vagrantup.com上的入门说明,我似乎最终得到了一个在端口2222上接受SSH连接的虚拟机,这样任何人都可以获得对我的VM的root访问权限并使用默认值读取我的主机工作目录凭证(用户名=密码= vagrant或vagrant_insecure_private_key)。
这是真的吗?如果是,为什么它不被视为一个巨大的安全漏洞?如果我将敏感数据复制到VM怎么办?
编辑:对于那些认为互联网上的任何人能够阅读您的资源并在您的VM上执行任意代码的人并不是那么糟糕的人,我建议您阅读本节中的“突破”部分博文http://blog.ontoillogical.com/blog/2012/10/31/breaking-in-and-out-of-vagrant/
简而言之:“按预期”运行Vagrant也可以让任何人闯入您的主机/开发机器(例如,使用恶意git post-commit挂钩)。
答案 0 :(得分:96)
简短回答是是。
<强>为什么吗
在构建Vagrant基本框(手动或使用像Veewee这样的工具进行自动化)时,构建器会遵循定义以下内容的vagrant base boxes specifications:
root
和vagrant
使用 vagrant 作为密码vagrant
的公钥认证(无密码)。 Vagrant项目为SSH公钥身份验证提供了一个不安全的key pair,以便vagrant ssh
可以正常工作。
因为每个人都可以访问私钥,所以任何人都可以使用私钥登录您的虚拟机(假设他们知道您的主机IP,端口默认为2222,作为转发规则。)
不安全的OOTB。但是,您可以从~vagrant/.ssh/authorized_keys
中删除可信密钥并添加您自己的密码vagrant
和root
,然后将其视为相对安全。
<强>更新强>
自Vagrant 1.2.3起,默认SSH转发端口绑定到127.0.0.1,因此只允许本地连接[GH-1785]。
重要更新
由于Vagrant 1.7.0(PR #4707)Vagrant将使用第一个vagrant up
上随机生成的密钥对替换默认的不安全ssh密钥对。
请参阅CHANGELOG:使用默认的不安全密钥对,Vagrant会自动将其替换为第一个vagrant up
上随机生成的密钥对。 GH-2608
答案 1 :(得分:10)
我已经把这个问题作为流浪汉的github存储库上的问题提出来了。开发人员表示,他们将解决转发端口外部可用的问题。但是,开发人员不接受有关从VM中破坏主机环境的问题。我认为他们是危险的错误。
https://github.com/mitchellh/vagrant/issues/1785
突破vm比链接的博客帖子更容易。您不必依赖git钩子来破坏主机,只需将任意ruby代码放入Vagrant文件中。
如果可以的话,我会在VM沙箱中运行vagrant。因为我做不到,所以我用防火墙做了。最好有配置规则来添加安全的ssh密钥,并删除不安全的密钥和默认密码。
答案 2 :(得分: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
答案 3 :(得分:7)
从Vagrant 1.2.3开始,默认是绑定到localhost而不是公共接口,避免了外部连接问题。
答案 4 :(得分:1)
只是想补充说有一个Vagrant插件可以解决这个问题:vagrant-rekey-ssh。它会更改VM的默认密码,并删除不安全的SSH密钥。
答案 5 :(得分:0)
我想解释为什么Vagrant不一定像你想象的那样不安全。
我首先要说的是,我相信你们大多数人都已经知道,由于这些盒子的共享方式,有必要保持对Vagrant盒子的开放访问。出于这个原因,我认为主要的安全问题是在下载框后不会更改默认凭据。以桥接模式运行此类计算机将允许网络上的某人使用默认凭据进行ssh。
在我看来,这些盒子背后的想法是任何人都可以下载它,并在它拥有后保护它。我的vagrant安装使用随机生成的新ssh密钥替换默认密钥。我不确定是否使用插件,但我很想知道无密码的sudo和默认密码是否也存在安全风险。