下面是我如何配置 VirtualBox 虛擬機以在我的 Linux 工作站上使用物理的 Windows 操作系統。

我經常使用 VirtualBox 來創建虛擬機來測試新版本的 Fedora、新的應用程序和很多管理工具,比如 Ansible。我甚至使用 VirtualBox 來測試創建一個 Windows 訪客主機。
我從來沒有在我的任何一台個人電腦上使用 Windows 作為我的主要操作系統,甚至也沒在虛擬機中執行過一些用 Linux 無法完成的冷門任務。不過,我確實為一個需要使用 Windows 下的財務程序的組織做志願者。這個程序運行在辦公室經理的電腦上,使用的是預裝的 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 虛擬機的存儲設備。金士頓在其網站上對各種 SSD 設備、外形尺寸和介面做了很好的概述。
這種方法意味著我不需要重新安裝 Windows 或任何現有的應用軟體。這也意味著,在這台電腦上工作的辦公室經理將使用 Linux 進行所有正常的活動,如電子郵件、訪問 Web、使用 LibreOffice 創建文檔和電子表格。這種方法增加了主機的安全性。唯一會使用 Windows 虛擬機的時間是運行會計程序。
先備份
在做其他事情之前,我創建了整個 NVMe 存儲設備的備份 ISO 鏡像。我在 500GB 外置 USB 存儲盤上創建了一個分區,在其上創建了一個 ext4 文件系統,然後將該分區掛載到 /mnt
。我使用dd
命令來創建鏡像。
我在主機中安裝了新的 500GB SATA SSD,並從臨場live USB 上安裝了 Fedora 32 Xfce 偏好版spin。在安裝後的初次重啟時,在 GRUB2 引導菜單上,Linux 和 Windows 操作系統都是可用的。此時,主機可以在 Linux 和 Windows 之間進行雙啟動。
在網上尋找幫助
現在我需要一些關於創建一個使用物理硬碟或 SSD 作為其存儲設備的虛擬機的信息。我很快就在 VirtualBox 文檔和互聯網上發現了很多關於如何做到這一點的信息。雖然 VirtualBox 文檔初步幫助了我,但它並不完整,遺漏了一些關鍵信息。我在互聯網上找到的大多數其他信息也很不完整。
在我們的記者 Joshua Holm 的幫助下,我得以突破這些殘缺的信息,並以一個可重複的流程來完成這項工作。
讓它發揮作用
這個過程其實相當簡單,雖然需要一個玄妙的技巧才能實現。當我準備好這一步的時候,Windows 和 Linux 操作系統已經到位了。
首先,我在 Linux 主機上安裝了最新版本的 VirtualBox。VirtualBox 可以從許多發行版的軟體倉庫中安裝,也可以直接從 Oracle VirtualBox 倉庫中安裝,或者從 VirtualBox 網站上下載所需的包文件並在本地安裝。我選擇下載 AMD64 版本,它實際上是一個安裝程序而不是一個軟體包。我使用這個版本來規避一個與這個特定項目無關的問題。
安裝過程總是在 /etc/group
中創建一個vboxusers
組。我把打算運行這個虛擬機的用戶添加到/etc/group
中的vboxusers
和disk
組。將相同的用戶添加到disk
組是很重要的,因為 VirtualBox 是以啟動它的用戶身份運行的,而且還需要直接訪問/dev/sdx
特殊設備文件才能在這種情況下工作。將用戶添加到disk
組可以提供這種級別的訪問許可權,否則他們就不會有這種許可權。
然後,我創建了一個目錄來存儲虛擬機,並賦予它 root.vboxusers
的所有權和775
的許可權。我使用/vms
用作該目錄,但可以是任何你想要的目錄。默認情況下,VirtualBox 會在創建虛擬機的用戶的子目錄中創建新的虛擬機。這將使多個用戶之間無法共享對虛擬機的訪問,從而不會產生巨大的安全漏洞。將虛擬機目錄放置在一個可訪問的位置,可以共享虛擬機。
我以非 root 用戶的身份啟動 VirtualBox 管理器。然後,我使用 VirtualBox 的「偏好Preferences => 一般General」菜單將「默認機器文件夾Default Machine Folder」設置為 /vms
目錄。
我創建的虛擬機沒有虛擬磁碟。「類型Type」 應該是 Windows
,「版本Version」應該設置為Windows 10 64-bit
。為虛擬機設置一個合理的內存量,但只要虛擬機處於關閉狀態,以後可以更改。在安裝的「硬碟Hard disk」頁面,我選擇了 「不要添加虛擬硬碟Do not add a virtual hard disk」,點擊「創建Create」。新的虛擬機出現在VirtualBox 管理器窗口中。這個過程也創建了/vms/Test1
目錄。
我使用「高級Advanced」菜單在一個頁面上設置了所有的配置,如圖 1 所示。「嚮導模式Guided Mode」可以獲得相同的信息,但需要更多的點擊,以通過一個窗口來進行每個配置項目。它確實提供了更多的幫助內容,但我並不需要。

圖 1:創建一個新的虛擬機,但不要添加硬碟。
然後,我需要知道 Linux 給原始 Windows 硬碟分配了哪個設備。在終端會話中以 root 身份使用 lshw
命令來發現 Windows 磁碟的設備分配情況。在本例中,代表整個存儲設備的設備是/dev/sdb
。
# lshw -short -class disk,volume
H/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 649MiB 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 用戶,我創建了一個 vmdk 文件,指向整個 Windows 設備/dev/sdb
。
$ VBoxManage internalcommands createrawvmdk -filename /vms/Test1/Test1.vmdk -rawdisk /dev/sdb
RAW host disk access VMDK file /vms/Test1/Test1.vmdk created successfully.
然後,我使用 VirtualBox 管理器 「文件File => 虛擬介質管理器Virtual Media Manager」 對話框將 vmdk 磁碟添加到可用硬碟中。我點擊了「添加Add」,文件管理對話框中顯示了默認的 /vms
位置。我選擇了Test1
目錄,然後選擇了Test1.vmdk
文件。然後我點擊「打開Open」,Test1.vmdk
文件就顯示在可用硬碟列表中。我選擇了它,然後點擊「關閉Close」。
下一步就是將這個 vmdk 磁碟添加到我們的虛擬機的存儲設備中。在 「Test1 VM」 的設置菜單中,我選擇了 「存儲Storage」,並點擊了添加硬碟的圖標。這時打開了一個對話框,在一個名為「未連接Not attached」的列表中顯示了 Test1vmdk
虛擬磁碟文件。我選擇了這個文件,並點擊了「選擇Choose」按鈕。這個設備現在顯示在連接到 「Test1 VM」 的存儲設備列表中。這個虛擬機上唯一的其他存儲設備是一個空的 CD/DVD-ROM 驅動器。
我點擊了「確定OK」,完成了將此設備添加到虛擬機中。
在新的虛擬機工作之前,還有一個項目需要配置。使用 VirtualBox 管理器設置對話框中的 「Test1 VM」,我導航到 「系統System => 主板Motherboard」頁面,並在 「啟用 EFIEnable EFI」的方框中打上勾。如果你不這樣做,當你試圖啟動這個虛擬機時,VirtualBox 會產生一個錯誤,說明它無法找到一個可啟動的介質。
現在,虛擬機從原始的 Windows 10 硬碟驅動器啟動。然而,我無法登錄,因為我在這個系統上沒有一個常規賬戶,而且我也無法獲得 Windows 管理員賬戶的密碼。
解鎖驅動器
不,本節並不是要破解硬碟的加密,而是要繞過眾多 Windows 管理員賬戶之一的密碼,而這些賬戶是不屬於組織中某個人的。
儘管我可以啟動 Windows 虛擬機,但我無法登錄,因為我在該主機上沒有賬戶,而向人們索要密碼是一種可怕的安全漏洞。儘管如此,我還是需要登錄這個虛擬機來安裝 「VirtualBox Guest Additions」,它可以提供滑鼠指針的無縫捕捉和釋放,允許我將虛擬機調整到大於 1024×768 的大小,並在未來進行正常的維護。
這是一個完美的用例,Linux 的功能就是更改用戶密碼。儘管我是訪問之前的管理員的賬戶來啟動,但在這種情況下,他不再支持這個系統,我也無法辨別他的密碼或他用來生成密碼的模式。我就直接清除了上一個系統管理員的密碼。
有一個非常不錯的開源軟體工具,專門用於這個任務。在 Linux 主機上,我安裝了 chntpw
,它的意思大概是:「更改 NT 的密碼」。
# dnf -y install chntpw
我關閉了虛擬機的電源,然後將 /dev/sdb3
分區掛載到/mnt
上。我確定/dev/sdb3
是正確的分區,因為它是我在之前執行lshw
命令的輸出中看到的第一個大的 NTFS 分區。一定不要在虛擬機運行時掛載該分區,那樣會導致虛擬機存儲設備上的數據嚴重損壞。請注意,在其他主機上分區可能有所不同。
導航到
目錄。如果當前工作目錄(PWD)不在這裡,
/mnt/Windows/System32/configchntpw
實用程序就無法工作。請啟動該程序。
# chntpw -i SAM
chntpw version 1.00 140201, (c) Petter N Hagen
Hive
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: john
fullname:
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] Normal account | NMS account |
Domain 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 max tries is: 0
Total login count: 47
- - - - User Edit Menu:
1 - Clear (blank) user password
2 - Unlock and enable user account [probably locked now]
3 - Promote user (make user an administrator)
4 - Add user to a group
5 - Remove user from a group
q - Quit editing user, back to user select
Select: [q] > 2
這時,我選擇了菜單項 2
,「解鎖並啟用用戶賬戶Unlock and enable user account」,這樣就可以刪除密碼,使我可以不用密碼登錄。順便說一下 —— 這就是自動登錄。然後我退出了該程序。在繼續之前,一定要先卸載/mnt
。
我知道,我知道,但為什麼不呢! 我已經繞過了這個硬碟和主機的安全問題,所以一點也不重要。這時,我確實登錄了舊的管理賬戶,並為自己創建了一個新的賬戶,並設置了安全密碼。然後,我以自己的身份登錄,並刪除了舊的管理賬戶,這樣別人就無法使用了。
網上也有 Windows Administrator 賬號的使用說明(上面列表中的 01f4
)。如果它不是作為組織管理賬戶,我可以刪除或更改該賬戶的密碼。還要注意的是,這個過程也可以從目標主機上運行臨場 USB 來執行。
重新激活 Windows
因此,我現在讓 Windows SSD 作為虛擬機在我的 Fedora 主機上運行了。然而,令人沮喪的是,在運行了幾個小時後,Windows 顯示了一條警告信息,表明我需要「激活 Windows」。
在看了許許多多的死胡同網頁之後,我終於放棄了使用現有激活碼重新激活的嘗試,因為它似乎已經以某種方式被破壞了。最後,當我試圖進入其中一個在線虛擬支持聊天會話時,虛擬的「獲取幫助」應用程序顯示我的 Windows 10 Pro 實例已經被激活。這怎麼可能呢?它一直希望我激活它,然而當我嘗試時,它說它已經被激活了。
或者不
當我在三天內花了好幾個小時做研究和實驗時,我決定回到原來的 SSD 啟動到 Windows 中,以後再來處理這個問題。但後來 Windows —— 即使從原存儲設備啟動,也要求重新激活。
在微軟支持網站上搜索也無濟於事。在不得不與之前一樣的自動支持大費周章之後,我撥打了提供的電話號碼,卻被自動響應系統告知,所有對 Windows 10 Pro 的支持都只能通過互聯網提供。到現在,我已經晚了將近一天才讓電腦運行起來並安裝回辦公室。
回到未來
我終於吸了一口氣,購買了一份 Windows 10 Home,大約 120 美元,並創建了一個帶有虛擬存儲設備的虛擬機,將其安裝在上面。
我將大量的文檔和電子表格文件複製到辦公室經理的主目錄中。我重新安裝了一個我們需要的 Windows 程序,並與辦公室經理驗證了它可以工作,數據都在那裡。
總結
因此,我的目標達到了,實際上晚了一天,花了 120 美元,但使用了一種更標準的方法。我仍在對許可權進行一些調整,並恢復 Thunderbird 通訊錄;我有一些 CSV 備份,但 *.mab
文件在 Windows 驅動器上包含的信息很少。我甚至用 Linux 的find
命令來定位原始存儲設備上的所有。
我走了很多彎路,每次都要自己重新開始。我遇到了一些與這個項目沒有直接關係的問題,但卻影響了我的工作。這些問題包括一些有趣的事情,比如把 Windows 分區掛載到我的 Linux 機器的 /mnt
上,得到的信息是該分區已經被 Windows 不正確地關閉(是的,在我的 Linux 主機上),並且它已經修復了不一致的地方。即使是 Windows 通過其所謂的「恢復」模式多次重啟後也做不到這一點。
也許你從 chntpw
工具的輸出數據中發現了一些線索。出於安全考慮,我刪掉了主機上顯示的其他一些用戶賬號,但我從這些信息中看到,所有的用戶都是管理員。不用說,我也改了。我仍然對我遇到的糟糕的管理方式感到驚訝,但我想我不應該這樣。
最後,我被迫購買了一個許可證,但這個許可證至少比原來的要便宜一些。我知道的一點是,一旦我找到了所有必要的信息,Linux 這一塊就能完美地工作。問題是處理 Windows 激活的問題。你們中的一些人可能已經成功地讓 Windows 重新激活了。如果是這樣,我還是想知道你們是怎麼做到的,所以請把你們的經驗添加到評論中。
這是我不喜歡 Windows,只在自己的系統上使用 Linux 的又一個原因。這也是我將組織中所有的計算機都轉換為 Linux 的原因之一。只是需要時間和說服力。我們只剩下這一個會計程序了,我需要和財務主管一起找到一個適合她的程序。我明白這一點 —— 我喜歡自己的工具,我需要它們以一種最適合我的方式工作。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/217422.html