在 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,並從 臨場 USB 上安裝了 Fedora 32 Xfce 偏好版 。在安裝後的初次重啟時,在 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 的「 偏好 => 一般 」菜單將「 默認機器文件夾 」設置為 /vms
目錄。
我創建的虛擬機沒有虛擬磁碟。「 類型 」 應該是 Windows
,「 版本 」應該設置為 Windows 10 64-bit
。為虛擬機設置一個合理的內存量,但只要虛擬機處於關閉狀態,以後可以更改。在安裝的「 硬碟 」頁面,我選擇了 「 不要添加虛擬硬碟 」,點擊「 創建 」。新的虛擬機出現在VirtualBox 管理器窗口中。這個過程也創建了 /vms/Test1
目錄。
我使用「 高級 」菜單在一個頁面上設置了所有的配置,如圖 1 所示。「 嚮導模式 」可以獲得相同的信息,但需要更多的點擊,以通過一個窗口來進行每個配置項目。它確實提供了更多的幫助內容,但我並不需要。
圖 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 管理器 「 文件 => 虛擬介質管理器 」 對話框將 vmdk 磁碟添加到可用硬碟中。我點擊了「 添加 」,文件管理對話框中顯示了默認的 /vms
位置。我選擇了 Test1
目錄,然後選擇了 Test1.vmdk
文件。然後我點擊「 打開 」,Test1.vmdk
文件就顯示在可用硬碟列表中。我選擇了它,然後點擊「 關閉 」。
下一步就是將這個 vmdk 磁碟添加到我們的虛擬機的存儲設備中。在 「Test1 VM」 的設置菜單中,我選擇了 「 存儲 」,並點擊了添加硬碟的圖標。這時打開了一個對話框,在一個名為「 未連接 」的列表中顯示了 Test1vmdk
虛擬磁碟文件。我選擇了這個文件,並點擊了「 選擇 」按鈕。這個設備現在顯示在連接到 「Test1 VM」 的存儲設備列表中。這個虛擬機上唯一的其他存儲設備是一個空的 CD/DVD-ROM 驅動器。
我點擊了「 確定 」,完成了將此設備添加到虛擬機中。
在新的虛擬機工作之前,還有一個項目需要配置。使用 VirtualBox 管理器設置對話框中的 「Test1 VM」,我導航到 「 系統 => 主板 」頁面,並在 「 啟用 EFI 」的方框中打上勾。如果你不這樣做,當你試圖啟動這個虛擬機時,VirtualBox 會產生一個錯誤,說明它無法找到一個可啟動的介質。
現在,虛擬機從原始的 Windows 10 硬碟驅動器啟動。然而,我無法登錄,因為我在這個系統上沒有一個常規賬戶,而且我也無法獲得 Windows 管理員賬戶的密碼。
解鎖驅動器
不,本節並不是要破解硬碟的加密,而是要繞過眾多 Windows 管理員賬戶之一的密碼,而這些賬戶是不屬於組織中某個人的。
儘管我可以啟動 Windows 虛擬機,但我無法登錄,因為我在該主機上沒有賬戶,而向人們索要密碼是一種可怕的安全漏洞。儘管如此,我還是需要登錄這個虛擬機來安裝 「VirtualBox Guest Additions」,它可以提供滑鼠指針的無縫捕捉和釋放,允許我將虛擬機調整到大於 1024x768 的大小,並在未來進行正常的維護。
這是一個完美的用例,Linux 的功能就是更改用戶密碼。儘管我是訪問之前的管理員的賬戶來啟動,但在這種情況下,他不再支持這個系統,我也無法辨別他的密碼或他用來生成密碼的模式。我就直接清除了上一個系統管理員的密碼。
有一個非常不錯的開源軟體工具,專門用於這個任務。在 Linux 主機上,我安裝了 chntpw
,它的意思大概是:「更改 NT 的密碼」。
# dnf -y install chntpw
我關閉了虛擬機的電源,然後將 /dev/sdb3
分區掛載到 /mnt
上。我確定 /dev/sdb3
是正確的分區,因為它是我在之前執行 lshw
命令的輸出中看到的第一個大的 NTFS 分區。一定不要在虛擬機運行時掛載該分區,那樣會導致虛擬機存儲設備上的數據嚴重損壞。請注意,在其他主機上分區可能有所不同。
導航到 /mnt/Windows/System32/config
目錄。如果當前工作目錄(PWD)不在這裡,chntpw
實用程序就無法工作。請啟動該程序。
# chntpw -i SAM
chntpw version 1.00 140201, (c) Petter N Hagen
Hive <SAM> name (from header): <SystemRootSystem32ConfigSAM>
ROOT KEY at offset: 0x001020 * Subkey indexing type is: 686c <lh>
File size 131072 [20000] bytes, containing 11 pages (+ 1 headerpage)
Used for data: 367/44720 blocks/bytes, unused: 14/24560 blocks/bytes.
<>========<> chntpw Main Interactive Menu <>========<>
Loaded hives: <SAM>
1 - Edit user data and passwords
2 - List groups
- - -
9 - Registry editor, now with full write support!
q - Quit (you will be asked if there is something to save)
What to do? [1] ->
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
,「 解鎖並啟用用戶賬戶 」,這樣就可以刪除密碼,使我可以不用密碼登錄。順便說一下 —— 這就是自動登錄。然後我退出了該程序。在繼續之前,一定要先卸載 /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 的原因之一。只是需要時間和說服力。我們只剩下這一個會計程序了,我需要和財務主管一起找到一個適合她的程序。我明白這一點 —— 我喜歡自己的工具,我需要它們以一種最適合我的方式工作。
via: https://opensource.com/article/21/1/virtualbox-windows-linux
作者:David Both 選題:lujun9972 譯者:wxy 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive