--- +简介:从主机运行VirtualBox guest虚拟机中GUI应用程序最安全的方法是什么?
VBoxManage guestcontrol --username U run ...
VBoxManage guestcontrol --username U --password P run ...
VBoxManage guestcontrol --username U --passwordfile PF run ...
或ssh
(什么网络模式:NAT
,...)
--- + DETAIL
我刚刚开始使用VirtualBox,之前有过VMWare,Parallels,Xen的经验 - 我发布了之前我在VMX aka VT上工作过。总的来说,我熟悉虚拟化,但对配置软件所需的咒语并不熟悉。
主持人:MacOS Sierra
访客:Windows 10 Pro(Microsoft的设备,WinDev1612Sys
)
我想将此虚拟机用于两个目的:(1)运行旧的Windows GUI应用程序(FrameMaker)。 (2)运行Windows Outlook,当Outlook for MacOS不够好时。另外(3),一些Windows应用程序开发/可移植性测试。
我不仅要以交互方式运行Windows GUI应用程序(FrameMaker),还要编写脚本。我使用FrameMaker的内置ExtendScript,通过VBoxManage guestcontrol run ...
从MacOS调用
(如果有人关心,我从Parallels切换,因为我无法让prlctl
传递命令行参数,甚至没有为.BAT
指定command.exe
脚本来运行;以及编辑Parallels Tools创建的.app包的旧技巧不再有效 - 任何编辑包内容的尝试,例如AppParam.pva
,导致捆绑被删除。可能是安全策略。我浪费了太多时间试图让Parallels运行参数化的自动化脚本;而虚拟guestcontrol
在我尝试时就运行了。使VirtualBox的seamless
不如Parallels coherent
模式好。)
但是...
--- ++ ps
可以查看命令行选项,例如--password
和--passwordfile
VBoxManage guestcontrol --username U --password P run ...
很可怕,因为在MacOS上运行ps alxwww
的任何用户都可以看到命令行选项。任何此类用户都可以看到密码。
类似于VBoxManage guestcontrol --username U --passwordfile PF run ...
任何此类用户都可以看到--passwordfile
选项 - 据我所知,任何此类用户都可以执行相同的命令。即它与看--password
一样好/坏。 (如果guestcontrol
运行以某种方式限制为仅允许此类访问,如果主机和访客用户名相同,则可能更安全 - 但AFAICT,则不受支持。)
--- ++无密码访客帐户是可怕的
如果访客帐户没有密码,则ps
无法显示任何内容 - 但这让我感到害怕。同样,似乎任何主机用户(包括不是我的任何人)都可以访问无密码访客帐户。 (同样,主机和访客用户名匹配无密码操作的guestcontrol
限制可能更安全 - 但是,仍然没有密码是可怕的。想象一下,如果我配置桥接网络,我的Mac不在NAT后面(但无论如何我可能都搞砸了。)
--- ++不允许我Mac上的其他用户
现在,我通常不允许除我以外的用户使用我的Mac。但是......我可能,如果我天真地信任操作系统用户进程安全性,我忘记了VirtualBox的旧安装。问题是VirtualBox guestcontrol
具有安全边界而不是扩展以包括所有主机用户ID
--- ++将VirtualBox锁定,以便我只能使用它
可能我可以更改文件权限,这样我才能运行VirtualBox安装工具。如果VirtualBox安装Mac驱动程序,也是设备专用文件。但此外......我碰巧知道如果VirtualBox使用的是英特尔VMX / VT硬件虚拟化硬件,它可能会捕获MacOS文件系统权限无法控制的内容。
(顺便说一下,这是因为不允许用户级虚拟机管理程序而需要管理程序在内核中运行所带来的安全风险。分层虚拟机,伙计!!!!(我们只会在另一代之后到达那里)虚拟机安全入侵。))
但我还不太了解VirtualBox这么做。快速浏览似乎没有迹象表明VirtualBox旨在简化这一过程。 (请告诉我。)
--- +密码,而非命令行
如果我们必须将密码传递给访客,最好不要在命令行上。
我似乎记得ssh
一次有一个--password
命令行选项。显然没有安全感。现代ssh似乎没有这样的选择。可能我的记忆错了。但肯定有人想要在命令行上输入密码,例如Ubuntu中的sshpass
包(sshpass -p 'YourPassword' ssh
- user @ host https://unix.stackexchange.com/questions/38737/ssh-login-with-clear-text-password-as-a-parameter)
ssh
通过提示输入密码来避免在命令行上输入密码 - 从ps
看不到密码。或者通过拥有公钥/私钥文件(但这只是与文件系统权限一样好(特别是如果公钥和私钥没有分开)。或者使用ssh-agent
。
如果VBoxManage guestcontrol
使用类似的东西,我会感觉更好。
哎呀,如果密码文件在主机文件系统上而不是访客上,我会对guestcontrol --passwordfile
感觉更好。在文件中使用密码不是很好,但是比在命令行上更好,并且如果保持在一起而不是分开,则相当于密钥文件。我有理由相信我只能在MacOS中创建一个可读的文件。 ; - }
嗯......我想知道VBoxManage guestcontrol
联机帮助页中是否存在错误 - 如果--passwordfile
是主机文件,而不是来宾文件?这会更有意义,并解释为什么我无法让--passwordfile guestfile
工作。
这是我最大的希望。
--- + VirtualBox API
如果VBoxManage guestcontrol
只能以命令行可见的形式传递密码,那么我可以编写自己的脚本吗?
如果有必要的话,肯定会有人做这件事。 (我希望没有必要。)
--- +为什么客人和主人之间没有ssh?
所有其他方法都失败了,我可以在guest虚拟机中运行一个ssh服务器,而ssh in。毕竟,ssh在隐藏ps
等密码和其他身份验证令牌方面做得相当不错,
(我更喜欢使用VBoxManage guestcontrol
。设置较少,错误配置较少。但ssh非常标准。)
如果我想运行ssh,VirtualBox的网络应该如何配置?
仅限主机可能是最安全的 - 但这不允许我在没有更多废话的情况下在访客中使用Outlook。
我喜欢在VirtualBox NAT后面运行访客(此外,Mac可能也支持一层或多层NAT,无论是在家还是工作)。
但如果访客位于VirtualBox NAT之后,则会阻止从主机到访客的ssh。所以我必须向前移动。但我可能不想转发来自外部世界的请求,只能转发本地主机。
看起来像是
VBoxManage modifyvm ...
[--natpf<1-N> [<rulename>],
tcp|udp,
[<hostip>],<hostport>,
[<guestip>],<guestport>]
可能会成功。
联机帮助页示例
VBoxManage modifyvm "VM name" --natpf1 "guestssh,tcp,127.0.0.1,2222,,22"
将所有TCP流量从localhost 2222转发到端口22上的guest虚拟机。
这看起来是对的吗?
测试显示这是有效的 - 但测试并未显示没有安全问题。
我真正想要的是hostonly用于来自主机的来宾的流量和用于传出的NAT的组合。
(嗯...在像Parallels这样的其他虚拟机上,问题是ssh workingm但是ssh无法启动GUI应用程序。还没有在VirtualBox上测试过。)
--- +结论
那么,最好的方法是什么?
我希望有人已经明白这一点。
我可以设置NAT和ssh,假设GUI应用程序正常工作。
但如果guestcontrol
是安全的,我会更喜欢它。即使只是一个doc bug,--passwordfile
是主文件而不是guest文件。
或许我不应该担心隐藏ps
中的内容。许多人似乎不在乎。但我很在意。