以下是我如何配置VirtualBox虚拟机以在我的Linux工作站上使用物理Windows操作系统。我经常使用VirtualBox创建虚拟机来测试新版本的Fedora、新应用程序和许多管理工具,例如Ansible。我什至使用VirtualBox来测试创建Windows来宾主机。我从未在我的任何PC上使用Windows作为我的主要操作系统,我什至从未在虚拟机中执行过一些Linux无法完成的模糊任务。但是,我确实为需要在Windows下使用财务程序的组织做志愿者。该程序在预装Windows10Pro的办公室经理PC上运行。这个财务应用程序没什么特别的,更好的Linux程序可以很容易地取代它,但我发现许多会计和财务主管非常不愿意做出改变,所以我没能说服我们组织的人接受迁移。这种情况的结合,再加上最近的安全恐慌,让我非常渴望将运行Windows的主机转换为Fedora,并在该主机上的虚拟机中运行Windows和会计程序。重要的是要了解我出于多种原因非常不喜欢Windows。主要原因是我不想再花钱购买另一个Windows许可证(Windows10Pro大约需要200美元),只是为了将它安装在新的虚拟机上。此外,Windows10在新系统上设置时或安装后需要足够的信息,如果Microsoft的数据库遭到破坏,黑客可能会窃取一个人的身份。没有人需要提供他们的姓名、电话号码和出生日期才能注册软件。这台物理计算机在主板上唯一可用的m.2插槽中安装了240GBNVMem.2SSD存储设备。我决定在主机上安装一个新的SATASSD,并使用带有Windows的现有SSD作为Windows虚拟机的存储。金士顿在其网站上很好地概述了各种SSD设备、外形尺寸和接口。这种方法意味着我不需要重新安装Windows或任何现有的应用程序。这也意味着在这台计算机上工作的办公室经理将使用Linux进行所有正常活动,例如电子邮件、访问网络、使用LibreOffice创建文档和电子表格。这种方法增加了主机的安全性。我唯一会使用Windows虚拟机的时间是运行会计程序。先备份在做任何其他事情之前,我创建了整个NVMe存储设备的备份ISO映像。我在一个500GB的外部USB记忆棒上创建了一个分区,在上面创建了一个ext4文件系统,并将该分区挂载在/mnt。我使用dd命令来创建图像。我在主机中安装了一个新的500GBSATASSD,并从liveUSB安装了Fedora32Xfcepreferencespin。安装后首次重新引导时,GRUB2引导菜单上同时提供Linux和Windows操作系统。此时主机可以在Linux和Windows之间进行双启动。在线寻求帮助现在我需要一些有关创建使用物理硬盘或SSD作为其存储设备的虚拟机的信息。我很快在VirtualBox文档和Internet上找到了很多关于如何执行此操作的信息。虽然VirtualBox文档最初对我有所帮助,但它并不完整并且缺少一些关键信息。我在互联网上找到的大多数其他信息也很不完整。在我们的记者JoshuaHolm的帮助下,我得以突破这些信息片段,并以可重复的过程完成这项工作。使它工作的过程实际上非常简单,尽管它需要一个微妙的技巧才能实现。当我准备好执行此步骤时,Windows和Linux操作系统已经就位。首先,我在Linux主机上安装了最新版本的VirtualBox。VirtualBox可以从许多分发存储库安装,直接从OracleVirtualBox存储库安装,或者通过从VirtualBox网站下载所需的包文件并在本地安装。我选择下载的是AMD64版本,其实是一个安装程序而不是一个包。我正在使用这个版本来规避与这个特定项目无关的问题。安装过程总是在/etc/group中创建一个vboxusers组。我将打算运行这个虚拟机的用户添加到/etc/group中的vboxusers和磁盘组中。将同一用户添加到磁盘组很重要,因为VirtualBox以启动它的用户身份运行,并且在这种情况下还需要直接访问/dev/sdx特殊设备文件才能工作。将用户添加到磁盘组可提供他们在其他情况下无法获得的这种级别的访问权限。然后我创建了一个目录来存储虚拟机并赋予它root.vboxusers所有权和775权限。我为该目录使用了/vms,但它可以是您想要的任何内容。默认情况下,VirtualBox在创建它们的用户的子目录中创建新的虚拟机。这将导致无法在不造成巨大安全漏洞的情况下在多个用户之间共享对虚拟机的访问。通过将虚拟机目录放在可访问的位置,可以共享虚拟机。我以非root用户身份启动VirtualBox管理器。然后,我使用VirtualBox的“Preferences=>General”菜单将“DefaultMachineFolder”设置为/vms目录。我创建的虚拟机没有虚拟磁盘。“类型”应为Windows,“版本”应设置为Windows1064位。为虚拟机设置合理的内存量,但只要关闭虚拟机电源,以后就可以更改。在安装的“硬盘”页面,我选择了“不添加虚拟硬盘”,点击“创建”。新虚拟机出现在VirtualBox管理器窗口中。此过程还创建了/vms/Test1目录。我使用Advanced菜单在一个页面上设置了所有配置,如图1所示。“GuidedMode”可以获得相同的信息,但需要更多的点击才能通过每个配置项的窗口。它确实提供了更多的帮助内容,但我并不需要它。图1:创建一个新的虚拟机,但不添加硬盘。然后,我需要知道Linux分配给原始Windows硬盘的设备。在终端会话中以root身份使用lshw命令来发现Windows磁盘的设备分配。在这个例子中,代表整个存储设备的设备是/dev/sdb。#lshw-short-classdisk,volumeH/W路径设备类描述===============================================================/0/100/17/0/dev/sda磁盘500GBCT500MX500SSD1/0/100/17/0/1卷2047MiBWindowsFAT卷/0/100/17/0/2/dev/sda2卷4GiBEXT4卷/0/100/17/0/3/dev/sda3卷459GiBLVM物理卷/0/100/17/1/dev/cdrom磁盘DVD+-RWDU-8A5LH/0/100/17/0.0.0/dev/sdb磁盘256GBTOSHIBAKSG60ZMV/0/100/17/0.0.0/1/dev/sdb1卷649MiBWindowsFAT卷/0/100/17/0.0.0/2/dev/sdb2卷127MiB保留分区/0/100/17/0.0.0/3/dev/sdb3卷236GiBWindowsNTFS卷/0/100/17/0.0.0/4/dev/sdb4volume989MiBWindowsNTFSvolume[root@office1etc]#VirtualBox而不是将虚拟存储设备放在/vms/Test1目录下,需要有一种方法来识别物理硬盘从启动。此标识是通过创建一个*.vmdk文件来实现的,该文件指向将成为虚拟机存储设备的原始物理磁盘。作为非root用户,我创建了一个指向整个Windows设备/dev/sdb的vmdk文件。$VBoxManageinternalcommandscreaterawvmdk-filename/vms/Test1/Test1.vmdk-rawdisk/dev/sdbRAWhostdiskaccessVMDKfile/vms/Test1/Test1.vmdk创建成功。然后,我使用VirtualBox管理器“File=>VirtualMediaVirtualMediaManager对话框将vmdk磁盘添加到可用硬盘。我单击“添加”,文件管理对话框显示默认的/vms位置。我选择了Test1目录,然后是Test1.vmdk文件。然后我点击“打开”,Test1.vmdk文件显示在可用硬盘列表中,我选择它并点击“关闭”。下一步是添加这个vmdk磁盘到我们虚拟机的存储设备。在“Test1VM”的设置菜单中,我选择“存储”并单击图标添加硬盘。一个对话框打开,在标题为“未附加”的列表中显示Test1vmdk虚拟磁盘文件.我选择了文件并点击了“选择”按钮。这个设备现在出现在连接到“Test1VM”的存储设备列表中。这个虚拟机上唯一的其他存储设备是一个空的CD/DVD-ROM驱动器。我点击“确定”,我完成了将这个设备添加到虚拟机。还有一项需要在新虚拟机运行之前进行配置。使用VirtualBox管理器设置对话框中的“Test1VM”,我导航到“System=>Motherboard”页面并勾选“EnableEFIEnableEFI”框。如果您不这样做,当您尝试启动虚拟机时,VirtualBox将生成一个错误,指出它找不到可启动媒体。虚拟机现在从原始Windows10硬盘驱动器启动。但是,我无法登录,因为我在系统上没有普通账户,而且我也无法获取Windows管理员账户的密码。解锁驱动器不,本节不是关于破解硬盘驱动器的加密,而是关于绕过不属于组织中某人的众多Windows管理员帐户之一的密码。虽然我可以启动WindowsVM,但我无法登录,因为我在该主机上没有帐户,而且要求人们提供密码是一个可怕的安全漏洞。尽管如此,我还是需要登录到这个VM来安装“VirtualBoxGuestAdditions”,它提供了鼠标指针的无缝捕捉和释放,允许我将VM大小调整到大于1024x768,并在以后进行正常维护。这是一个完美的用例,Linux的一个特性是更改用户密码。虽然我是用以前管理员的账号开机的,但是现在他已经不支持这个系统了,我也看不出他的密码,也看不出他生成密码的模式。我直接清除了之前系统管理员的密码。有一个非常好的开源软件工具专门用于此任务。在Linux主机上,我安装了chntpw,大致意思是:“更改NT的密码”。#dnf-yinstallchntpw我关闭虚拟机并将/dev/sdb3分区挂载到/mnt。我确定/dev/sdb3是正确的分区,因为它是我在上一个lshw命令的输出中看到的第一个大型NTFS分区。请务必不要在虚拟机运行时挂载该分区,否则会导致虚拟机存储设备上出现严重的数据损坏。请注意,其他主机上的分区可能不同。导航到/mnt/Windows/System32/config目录。如果当前工作目录(PWD)不在此处,chntpw实用程序将无法工作。请启动程序。#chntpw-iSAMchntpwversion1.00140201,(c)PetterNHagenHive
