下面是我如何配置VirtualBox虚拟机,以便在我的Linux工作站上使用物理Windows操作系统。
我经常用VirtualBox创建虚拟机来测试新版本的Fedora,新的应用和很多管理工具,比如Ansible。我甚至使用VirtualBox来测试Windows访客主机的创建。
我从来没有在我的任何一台个人电脑上使用Windows作为我的主要操作系统,我甚至没有在虚拟机中执行过一些Linux无法完成的冷门任务。然而,我确实为一个需要在Windows下使用财务程序的组织做志愿者。这个程序运行在office ***nager的电脑上,使用预装的Windows 10 Pro。
这个金融应用并不特殊。一个更好的Linux程序可以很容易地取代它,但我发现许多会计和财务主管极不愿意做出改变,所以我一直未能说服我们组织中的人进行迁移。
这一系列的情况,再加上最近的安全恐慌,让我非常渴望将运行Windows的主机转换成Fedora,在这台主机上的虚拟机中运行Windows和记账程序。
重要的是要明白,我非常不喜欢Windows,原因有很多。主要原因是我不想为了安装在新的虚拟机上而花钱购买另一个Windows许可证(Windows 10 Pro的价格约为200美元)。此外,Windows 10在新系统上设置时或安装后都需要足够的信息。如果微软的数据库被攻破,黑客可以窃取一个人的身份。没有人需要提供他的名字,电话号码和出生日期来注册这个软件。
开始
该物理计算机在主板上唯一可用的m.2插槽中安装了240GB NVME m.2 SSD存储设备。我决定在主机上安装一个新的SATA SSD,并使用Windows现有的SSD作为Windows虚拟机的存储设备。Kingston在其网站上很好地概述了各种SSD设备、尺寸和接口。
这种方法意味着我不需要重新安装Windows或任何现有的应用软件。这也意味着在这台计算机上工作的办公室经理将使用Linux进行所有正常的活动,如收发电子邮件、访问Web以及用LibreOffice创建文档和电子表格。这种方法增加了主机的安全性。您将使用Windows虚拟机的唯一时间是运行记帐程序。
首先备份
在做任何事情之前,我创建了整个NVMe存储设备的备份ISO映像。我在一个500GB的外置USB存储盘上创建了一个分区,在上面创建了一个ext4文件系统,然后将分区挂载到/mnt。我使用dd命令创建镜像。
我在主机和Fedora 32 Xfce Pro spin中安装了新的500GB SATA SSD。安装后第一次重新启动时,Linux和Windows操作系统都可以在GRUB2启动菜单中找到。此时,主机可以在Linux和Windows之间双重启动。
在线寻求帮助
现在,我需要一些关于创建使用物理硬盘或SSD作为存储设备的虚拟机的信息。我很快在VirtualBox文档和互联网上找到了很多关于如何做到这一点的信息。虽然VirtualBox文档最初对我有所帮助,但它并不完整,还遗漏了一些关键信息。我在网上找到的其他大部分信息也很不完整。
在我们的记者约书亚·霍尔姆(Joshua Holm)的帮助下,我得以突破这些不完整的信息,在一个可重复的过程中完成这项工作。
让它工作。
这个过程其实挺简单的,虽然需要一个神秘的技能来实现。当我准备好这一步时,Windows和Linux操作系统已经就位。
首先,我在Linux主机上安装了最新版本的VirtualBox。VirtualBox可以从许多分发软件仓库安装,或者直接从Oracle VirtualBox软件仓库安装,或者从VirtualBox网站下载所需的软件包文件并在本地安装。我选择了下载AMD***版本,它其实是一个安装程序,而不是一个软件包。我用这个版本来规避一个与这个特定项目无关的问题。
安装过程总是在/etc/group中创建一个vboxusers组。我将打算运行该虚拟机的用户添加到/etc/group中的vboxusers和disk组。将同一个用户添加到磁盘组是很重要的,因为VirtualBox以启动它的用户的身份运行,并且它还需要直接访问/dev/sdx特殊设备文件才能在这种情况下工作。将用户添加到磁盘组可以提供这种级别的访问权限,否则他们不会拥有这种权限。
然后,我创建了一个目录来存储虚拟机,并给了它root.vboxusers的所有权和775的权限。我使用/vms作为目录,但是它可以是您想要的任何目录。默认情况下,VirtualBox会在创建虚拟机的用户的子目录中创建新的虚拟机。这将防止多个用户共享对虚拟机的访问,从而不会产生巨大的安全漏洞。您可以通过将虚拟机目录放在可访问的位置来共享虚拟机。
我以非root用户身份启动了VirtualBox Manager。然后,我用VirtualBox的“Preferences = >”。常规菜单将默认的机器文件夹设置为/vms目录。
我创建的虚拟机没有虚拟磁盘。“Type Type”应该是Windows,“Version”应该设置为Windows 10 ***位。为虚拟机设置合理的内存量,但只要虚拟机关闭,就可以在以后更改内存量。在安装的“硬盘”页面,我选择了“不要添加虚拟硬盘”,点击了“创建”。的新虚拟机将出现在VirtualBox管理器窗口中。这个过程还会创建/vms/Test1目录。
我使用“Advanced Advanced”菜单在一个页面上设置所有配置,如图1所示。“引导模式”可以获得相同的信息,但它需要更多的点击来通过一个窗口执行每个配置项。确实提供了更多的帮助,但是我不需要。
图1:创建一个新的虚拟机,但不添加硬盘。
然后,我需要知道Linux把哪个设备分配给了原来的Windows硬盘。在终端会话中以root用户身份使用lshw命令来发现Windows磁盘的设备分配。在本例中,代表整个存储设备的设备是/dev/sdb。
# lshw -short -class disk,volumeH/W path Device Class Description=========================================================/0/100/17/0 /dev/sda disk 500GB CT500MX500SSD1/0/100/17/0/1 volume 2047MiB Windows FAT volume/0/100/17/0/2 /dev/sda2 volume 4GiB EXT4 volume/0/100/17/0/3 /dev/sda3 volume 459GiB LVM Physical Volume/0/100/17/1 /dev/cdrom disk DVD+-RW DU-8A5LH/0/100/17/0.0.0 /dev/sdb disk 256GB TOSHIBA KSG60ZMV/0/100/17/0.0.0/1 /dev/sdb1 volume ***9MiB Windows FAT volume/0/100/17/0.0.0/2 /dev/sdb2 volume 127MiB reserved partition/0/100/17/0.0.0/3 /dev/sdb3 volume 236GiB Windows NTFS volume/0/100/17/0.0.0/4 /dev/sdb4 volume 989MiB Windows NTFS volume[root@office1 etc]#
VirtualBox不需要将虚拟存储设备放在/vms/Test1目录中。相反,它需要一种方法来识别启动的物理硬盘。这种认可是通过创建一个*。指向将成为虚拟机存储设备的原始物理磁盘的vmdk文件。作为非root用户,我创建了一个指向整个Windows设备/dev/sdb的vmdk文件。
$ VBoxManage internalcom***nds createrawvmdk -filename /vms/Test1/Test1.vmdk -rawdisk /dev/sdbRAW host disk access VMDK file /vms/Test1/Test1.vmdk created successfully.
然后,我使用VirtualBox ***nager的“file file = >: Virtual Media Manager”对话框将vmdk磁盘添加到可用硬盘中。我单击“添加添加”,默认的/vms位置显示在文件管理对话框中。我选择了Test1目录,然后是Test1.vmdk文件。然后我单击“打开”,Test1.vmdk文件显示在可用硬盘列表中。我选中它,然后点击“关闭关闭”。
下一步是将这个vmdk磁盘添加到我们虚拟机的存储设备中。在“Test1 VM”的设置菜单中,我选择了“存储Storage”,点击图标添加硬盘。此时会打开一个对话框,Test1vmdk虚拟磁盘文件显示在一个名为“未连接”的列表中。我选择了这个文件并点击了“选择”按钮。该设备现在显示在连接到“Test1 VM”的存储设备列表中。该虚拟机上唯一的其他存储设备是空的CD/DVD-ROM驱动器。
我单击“OK ”,完成了将该设备添加到虚拟机的操作。
在新的虚拟机工作之前,还有一个项目需要配置。使用VirtualBox Manager的设置对话框中的“Test1 VM”,我导航到“System System = >: Motherboard”页面,并勾选“Enable EFI EFI”框。否则,当您尝试启动该虚拟机时,VirtualBox将生成一个错误,指示它找不到可引导介质。
现在,虚拟机从原来的Windows 10硬盘启动。但是,我无法登录,因为我在这个系统上没有常规帐户,我无法获得Windows管理员帐户的密码。
解锁驱动器
不是,这一节不是破解硬盘的加密,而是绕过众多Windows管理员账号中的一个账号的密码,这个账号不属于组织中的某个人。
虽然我可以启动Windows虚拟机,但是我无法登录,因为我在这个主机上没有帐户,并且要求人们输入密码是一个可怕的安全漏洞。尽管如此,我仍然需要登录这台虚拟机来安装“VirtualBox Guest Additions”,它可以提供鼠标指针的无缝捕获和释放,并允许我将虚拟机调整为大于1024 ×78,并在以后进行正常维护。
这是一个完美的用例。Linux的功能是修改用户密码。虽然我访问了以前的管理员帐户来启动它,但在这种情况下,他不再支持这个系统,我无法说出他的密码或他用来生成密码的模式。我刚刚清除了最后一个系统管理员的密码。
有一个非常好的开源软件工具专门用于这项任务。在Linux主机上,我安装了chntpw,大概意思是:“修改NT的密码”。
# dnf -y install chntpw
我关闭了虚拟机的电源,然后在/mnt上挂载了/dev/sdb3分区。我确信/dev/sdb3是正确的分区,因为它是我之前在执行lshw命令的输出中看到的第一个大型NTFS分区。不要在虚拟机运行时挂载此分区,这将导致虚拟机存储设备上的数据严重损坏。请注意,其他主机上的分区可能有所不同。
导航到
/mnt/windows/system32/config目录。如果当前工作目录(PWD)不在这里,chntpw实用程序将无法工作。请启动程序。
# chntpw -i SAMchntpw version 1.00 140201, (c) Petter N HagenHive
chntpw命令使用TUI(文本用户界面),它提供了一组菜单选项。当选择一个主菜单项时,通常会显示一个二级菜单。根据明确的菜单名称,我首先选择了菜单项1。
What to do? [1] -> 1===== chntpw Edit User Info & Passwords ====| RID -|---------- Username ------------| Admin? |- Lock? --|| 01f4 | Administrator | ADMIN | dis/lock || 03eb | john | ADMIN | dis/lock || 01f7 | DefaultAccount | | dis/lock || 01f5 | Guest | | dis/lock || 01f8 | WDAGUtilityAccount | | dis/lock |Please enter user number (RID) or 0 to exit: [3e9]
接下来,我选择我们的管理帐户john,并在提示时输入RID。这将显示用户的信息,并提供额外的菜单项来管理帐户。
Please enter user number (RID) or 0 to exit: [3e9] 03eb================= USER EDIT ====================RID : 1003 [03eb]Username: johnfullname:comment :homedir :00000221 = Users (which has 4 members)00000220 = Administrators (which has 5 members)Account bits: 0x0214 = Disabled | Homedir req. | Passwd not req. | Temp. duplicate | [X] Nor***l account | NMS account | Do***in trust ac | Wks trust act. | Srv trust act |[X] Pwd don't expir | Auto lockout | (unknown 0x08) | (unknown 0x10) | (unknown 0x20) | (unknown 0x40) |Failed login count: 0, while ***x tries is: 0Total login count: 47- - - - User Edit Menu: 1 - Clear (blank) user password 2 - Unlock and enable user account [probably locked now] 3 - Promote user (***ke user an administrator) 4 - Add user to a group 5 - Remove user from a group q - Quit editing user, back to user selectSelect: [q] > 2
这时,我选择了菜单项2,“解锁并启用用户帐户”,这样我就可以删除我的密码并在没有密码的情况下登录。顺便说一下,这是自动登录。然后我退出了这个项目。请确保在继续之前卸载/mnt。
我知道,我知道,但是为什么不呢!我已经绕过了这个硬盘和主机的安全问题,所以完全没关系。这时候我确实登录了旧的管理账号,给自己新建了一个账号,设置了安全密码。然后,我以自己的身份登录,删除了旧的管理账号,这样别人就不能用了。
使用Windows管理员帐户的说明也可以在线获得(上面列表中的01f4)。如果不是作为组织管理帐户,我可以删除或更改帐户的密码。还应该注意,这个过程也可以通过从目标主机运行现场USB来执行。
再次激活Windows
因此,我现在让Windows SSD在我的Fedora主机上作为虚拟机运行。然而令人沮丧的是,在运行了几个小时后,Windows显示了一条警告信息,要求我“激活Windows”。
看了很多死路一条的网页,我终于放弃了用现有激活码重新激活的尝试,因为它好像已经被某种方式破坏了。最后,当我试图进入一个在线虚拟支持聊天会话时,虚拟“获得帮助”应用程序显示我的Windows 10 Pro实例已被激活。这怎么可能呢?它一直想让我激活它,可是我一试,它就说已经激活了。
或不是
当我在三天内花了几个小时做研究和实验时,我决定回到原来的SSD并引导进入Windows,稍后再处理这个问题。但是后来Windows——即使是从原来的存储设备启动,也要求重新激活。
在微软的支持网站上搜索也没有用。在不得不像以前一样去找自动支持的麻烦后,我拨通了提供的电话号码,但被自动响应系统告知,只能通过互联网提供对Windows 10 Pro的所有支持。到现在为止,我已经晚了将近一天才把电脑运行起来并安装回办公室。
回到未来
我终于喘了口气,买了一份Windows 10 Home,大概120美元,用虚拟存储设备创建了一个虚拟机,安装在上面。
我将大量文档和电子表格文件***到办公室经理的主目录中。我重新安装了一个我们需要的Windows程序,并与办公室经理核实了它的工作情况和数据。
摘要
因此,我的目标实现了,事实上,晚了一天,花费了120美元,但使用了更标准的方法。我还在对权限做一些调整,恢复雷鸟通讯录;我有一些CSV备份,但是*。***b文件包含的Windows驱动器信息很少。我甚至使用Linux的find命令来定位所有的原始存储设备。
走了很多弯路,每次都要从头再来。我遇到了一些和这个项目没有直接关系的问题,但是影响了我的工作。这些问题包括一些有趣的事情,比如在我的Linux机器的/mnt上挂载Windows分区,得到分区被Windows错误关闭的信息(是的,在我的Linux主机上),它已经修复了不一致的问题。即使在Windows通过其所谓的“恢复”模式重启多次后,它也无法做到这一点。
也许你从chntpw工具的输出数据中发现了一些线索。出于安全考虑,我删除了主机上显示的一些其他用户账号,但从这些信息中可以看出,所有用户都是管理员。不用说,我也改了。我仍然对我遇到的糟糕的管理风格感到惊讶,但我认为我不应该这样。
最后被迫买了许可证,不过这个许可证至少比原来的便宜。我知道的一件事是,一旦我找到了所有必要的信息,Linux块将完美地工作。问题是处理窗口激活。你们中的一些人可能已经成功重新激活了Windows。如果有,我还是想知道你是怎么做到的,所以请在评论里加上你的经历。
这也是我不喜欢Windows,只在自己的系统上使用Linux的另一个原因。这也是我把公司里所有的电脑都换成Linux的原因之一。只是需要时间和说服。这是我们唯一剩下的会计程序。我需要和财务主管一起为她找到合适的程序。我明白这一点——我喜欢我自己的工具,我需要它们以最适合我的方式工作。
本文来自夜遇投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/577553.html