Converti la tua installazione Windows in una VM su Linux
Ecco come ho configurato una VM VirtualBox per utilizzare un'unità Windows fisica sulla mia workstation Linux.
Utilizzo spesso VirtualBox per creare macchine virtuali per testare nuove versioni di Fedora, nuovi programmi applicativi e molti strumenti amministrativi come Ansible. Ho persino utilizzato VirtualBox per testare la creazione di un host guest Windows.
Non ho mai utilizzato Windows come sistema operativo principale su nessuno dei miei personal computer o anche in una macchina virtuale per eseguire attività oscure che non possono essere eseguite con Linux. Faccio, tuttavia, volontariato per un'organizzazione che utilizza un programma finanziario che richiede Windows. Questo programma funziona sul computer del direttore dell'ufficio su Windows 10 Pro, che è stato preinstallato.
Questa applicazione finanziaria non è speciale e un programma Linux migliore potrebbe facilmente sostituirla, ma ho scoperto che molti contabili e tesorieri sono estremamente riluttanti ad apportare modifiche, quindi non sono ancora riuscito a convincere quelli della nostra organizzazione a migrare .
Questo insieme di circostanze, insieme a un recente allarme per la sicurezza, ha reso altamente desiderabile convertire l'host che esegue Windows in Fedora e eseguire Windows e il programma di contabilità in una VM su quell'host.
È importante capire che ho un'estrema antipatia per Windows per molteplici ragioni. Le principali che si applicano a questo caso sono che detesterei pagare un'altra licenza Windows (Windows 10 Pro costa circa $200) per installarla su una nuova VM. Inoltre, Windows 10 richiede informazioni sufficienti durante la configurazione su un nuovo sistema o dopo un'installazione per consentire ai cracker di rubare l'identità di qualcuno in caso di violazione del database Microsoft. Nessuno dovrebbe aver bisogno di fornire il proprio nome, numero di telefono e data di nascita per registrare il software.
Iniziare
Il computer fisico aveva già un dispositivo di archiviazione NVMe m.2 da 240 GB installato nell'unico slot m.2 disponibile sulla scheda madre. Ho deciso di installare un nuovo SSD SATA nell'host e di utilizzare l'SSD esistente con Windows come dispositivo di archiviazione per la VM Windows. Kingston offre un'eccellente panoramica dei vari dispositivi SSD, fattori di forma e interfacce sul suo sito web.
Questo approccio significava che non avrei avuto bisogno di eseguire un'installazione completamente nuova di Windows o di qualsiasi software applicativo esistente. Significava anche che il direttore dell'ufficio che lavora su questo computer utilizzerebbe Linux per tutte le normali attività come la posta elettronica, l'accesso al Web, la creazione di documenti e fogli di calcolo con LibreOffice. Questo approccio aumenta il profilo di sicurezza dell'host. L'unica volta in cui verrà utilizzata la macchina virtuale Windows è per eseguire il programma di contabilità.
Prima esegui il backup
Prima di fare qualsiasi altra cosa, ho creato un'immagine ISO di backup dell'intero dispositivo di archiviazione NVMe. Ho creato una partizione su un'unità di archiviazione USB esterna da 500 GB, ho creato un file system ext4 su di essa e quindi ho montato la partizione su /mnt. Ho usato il comando dd per creare l'immagine.
Ho installato il nuovo SSD SATA da 500 GB nell'host e ho installato su di esso la rotazione Fedora 32 Xfce da un Live USB. Al riavvio iniziale dopo l'installazione, sia le unità Linux che quelle Windows erano disponibili nel menu di avvio di GRUB2. A questo punto, l'host potrebbe essere dual-boot tra Linux e Windows.
In cerca di aiuto in tutti i luoghi Internet
Ora avevo bisogno di alcune informazioni sulla creazione di una VM che utilizza un disco rigido fisico o un SSD come dispositivo di archiviazione. Ho scoperto rapidamente molte informazioni su come eseguire questa operazione nella documentazione di VirtualBox e in Internet in generale. Sebbene la documentazione di VirtualBox mi abbia aiutato a iniziare, non è completa e tralascia alcune informazioni critiche. Anche la maggior parte delle altre informazioni che ho trovato su Internet sono piuttosto incomplete.
Con l'aiuto fondamentale di uno dei nostri corrispondenti di Opensource.com, Joshua Holm, sono riuscito a superare il problema e a far funzionare il tutto con una procedura ripetibile.
Farlo funzionare
Questa procedura è in realtà abbastanza semplice, anche se è necessario un trucco arcano per farla funzionare. I sistemi operativi Windows e Linux erano già installati quando ero pronto per questo passaggio.
Innanzitutto, ho installato la versione più recente di VirtualBox sull'host Linux. VirtualBox può essere installato dai repository software di molte distribuzioni, direttamente dal repository Oracle VirtualBox o scaricando il file del pacchetto desiderato dal sito Web di VirtualBox e installandolo localmente. Ho scelto di scaricare la versione AMD64, che in realtà è un programma di installazione e non un pacchetto. Utilizzo questa versione per aggirare un problema che non è correlato a questo particolare progetto.
La procedura di installazione crea sempre un gruppo vboxusers in /etc/group. Ho aggiunto gli utenti destinati a eseguire questa VM ai gruppi vboxusers e disk in /etc/group. È importante aggiungere gli stessi utenti al gruppo disco perché VirtualBox viene eseguito come l'utente che lo ha avviato e richiede anche l'accesso diretto al file speciale del dispositivo /dev/sdx per lavorare in questo scenario. L'aggiunta di utenti al gruppo disco fornisce quel livello di accesso che altrimenti non avrebbero.
Ho quindi creato una directory per archiviare le VM e le ho assegnato la proprietà delle autorizzazioni root.vboxusers e 775. Ho usato /vms per la directory, ma potrebbe essere qualsiasi cosa tu voglia. Per impostazione predefinita, VirtualBox crea nuove macchine virtuali in una sottodirectory dell'utente che crea la VM. Ciò renderebbe impossibile condividere l’accesso alla VM tra più utenti senza creare un’enorme vulnerabilità della sicurezza. Il posizionamento della directory della VM in una posizione accessibile consente la condivisione delle VM.
Ho avviato VirtualBox Manager come utente non root. Ho quindi utilizzato il menu Preferenze ==> Generale di VirtualBox per impostare la cartella macchina predefinita sulla directory /vms.
Ho creato la VM senza disco virtuale. Il Tipo dovrebbe essere Windows e la Versione dovrebbe essere impostata su Windows 10 a 64 bit. Imposta una quantità ragionevole di RAM per la VM, ma questa può essere modificata in seguito purché la VM sia spenta. Nella pagina Disco rigido dell'installazione, ho scelto "Non aggiungere un disco rigido virtuale" e ho fatto clic su Crea. La nuova VM è apparsa nella finestra VirtualBox Manager. Questa procedura ha creato anche la directory /vms/Test1.
L'ho fatto utilizzando il menu Avanzate e ho eseguito tutte le configurazioni su un'unica pagina, come mostrato nella Figura 1. La Modalità guidata ottiene le stesse informazioni ma richiede più clic per passare attraverso una finestra per ciascun elemento di configurazione. Fornisce qualcosa in più in termini di testo di aiuto, ma non ne avevo bisogno.
opensource.com
Figura 1: crea una nuova macchina virtuale ma non aggiungi un disco rigido.
Quindi avevo bisogno di sapere quale dispositivo era stato assegnato da Linux all'unità Windows grezza. Come root in una sessione terminale, utilizza il comando lshw per scoprire l'assegnazione del dispositivo per il disco di Windows. In questo caso, il dispositivo che rappresenta l'intero dispositivo di archiviazione è /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]#
Invece di un dispositivo di archiviazione virtuale situato nella directory /vms/Test1, VirtualBox deve avere un modo per identificare il disco rigido fisico da cui deve essere avviato. Questa identificazione viene eseguita creando un file *.vmdk, che punta al disco fisico grezzo che verrà utilizzato come dispositivo di archiviazione per la VM. Come utente non root, ho creato un file vmdk che punta all'intero dispositivo 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.
Ho quindi utilizzato la finestra di dialogo VirtualBox Manager File ==> Virtual Media Manager per aggiungere il disco vmdk ai dischi rigidi disponibili. Ho fatto clic su Aggiungi e la posizione /vms predefinita è stata visualizzata nella finestra di dialogo di gestione dei file. Ho selezionato la directory Test1 e poi il file Test1.vmdk. Ho quindi fatto clic su Apri e il file Test1.vmdk è stato visualizzato nell'elenco dei dischi rigidi disponibili. L'ho selezionato e ho fatto clic su Chiudi.
Il passo successivo è stato aggiungere questo disco vmdk ai dispositivi di archiviazione per la nostra VM. Nel menu delle impostazioni per Test1 VM, ho selezionato Archiviazione e ho fatto clic sull'icona per aggiungere un disco rigido. Si è aperta una finestra di dialogo che mostrava il file del disco virtuale Test1vmdk in un elenco intitolato Non allegato. Ho selezionato questo file e ho fatto clic sul pulsante Scegli. Questo dispositivo è ora visualizzato nell'elenco dei dispositivi di archiviazione collegati alla VM Test1. L'unico altro dispositivo di archiviazione su questa VM è un'unità CD/DVD-ROM vuota.
Ho fatto clic su OK per completare l'aggiunta di questo dispositivo alla VM.
C'era un altro elemento da configurare prima che la nuova VM funzionasse. Utilizzando la finestra di dialogo Impostazioni VirtualBox Manager per la VM Test1, sono passato alla pagina Sistema ==> Scheda madre e ho selezionato la casella Abilita EFI. Se non lo fai, VirtualBox genererà un errore indicando che non riesce a trovare un supporto avviabile quando tenti di avviare questa VM.
La macchina virtuale ora si avvia dal disco rigido grezzo di Windows 10. Tuttavia, non sono riuscito ad accedere perché non avevo un account normale su questo sistema e non avevo accesso alla password per l'account amministratore di Windows.
Sblocco dell'unità
No, questa sezione non riguarda la violazione della crittografia del disco rigido. Si tratta piuttosto di bypassare la password di uno dei tanti account amministratore di Windows, di cui nessuno all'interno dell'organizzazione disponeva.
Anche se potevo avviare la VM Windows, non potevo accedere perché non avevo un account su quell'host e chiedere alle persone le loro password è un'orribile violazione della sicurezza. Tuttavia, dovevo accedere alla VM per installare le VirtualBox Guest Additions, che avrebbero fornito l'acquisizione e il rilascio senza interruzioni del puntatore del mouse, mi avrebbero consentito di ridimensionare la VM in modo che fosse più grande di 1024x768 ed eseguire normale manutenzione futura.
Questo è un caso d'uso perfetto per la funzionalità Linux di modificare le password degli utenti. Anche se sto accedendo all'account dell'amministratore precedente per iniziare, in questo caso non supporterà più questo sistema e non sarò in grado di discernere la sua password o i modelli che utilizza per generarli. Cancellerò semplicemente la password dell'amministratore di sistema precedente.
Esiste uno strumento software open source molto interessante specifico per questo compito. Sull'host Linux ho installato chntpw, che probabilmente significa qualcosa come "Cambia password NT".
# dnf -y install chntpw
Ho spento la VM e poi ho montato la partizione /dev/sdb3 su /mnt. Ho determinato che /dev/sdb3 è la partizione corretta perché è la prima partizione NTFS di grandi dimensioni che ho visto nell'output del comando lshw eseguito in precedenza. Assicurati di non montare la partizione mentre la VM è in esecuzione; ciò potrebbe causare un danneggiamento significativo dei dati sul dispositivo di archiviazione della VM. Tieni presente che la partizione corretta potrebbe essere diversa su altri host.
Passare alla directory /mnt/Windows/System32/config. Il programma di utilità chntpw non funziona se questa non è la directory di lavoro attuale (PWD). Avviare il programma.
# chntpw -i SAM
chntpw version 1.00 140201, (c) Petter N Hagen
Hive <SAM> name (from header): <\SystemRoot\System32\Config\SAM>
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] ->
Il comando chntpw utilizza una TUI (Text User Interface), che fornisce una serie di opzioni di menu. Quando viene scelta una delle voci del menu principale, solitamente viene visualizzato un menu secondario. Seguendo i nomi chiari dei menu, ho scelto innanzitutto la voce di menu 1.
What to do? [1] -> 1
===== chntpw Edit User Info & Passwords ====
| RID -|---------- Username ------------| Admin? |- Lock? --|
| 01f4 | Administrator | ADMIN | dis/lock |
| 03ec | 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]
Successivamente, ho selezionato il nostro account amministratore, john, digitando il RID quando richiesto. Visualizza informazioni sull'utente e offre voci di menu aggiuntive per gestire l'account.
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
A questo punto ho scelto la voce di menu 2, "Sblocca e attiva account utente", che cancella la password e mi consente di accedere senza password. A proposito, questo è un accesso automatico. Poi sono uscito dal programma. Assicurati di smontare /mnt prima di procedere.
Lo so, lo so, ma perché no! Ho già aggirato la sicurezza su questa unità e host, quindi non ha alcuna importanza. A questo punto, ho effettuato l'accesso al vecchio account amministrativo e ho creato un nuovo account per me con una password sicura. Quindi ho effettuato l'accesso come me stesso e ho eliminato il vecchio account amministratore in modo che nessun altro potesse utilizzarlo.
Su Internet si trovano anche le istruzioni per l'utilizzo dell'account amministratore di Windows (01f4 nell'elenco sopra). Avrei potuto eliminare o modificare la password di quell'account se non fosse stato presente un account amministratore aziendale. Si noti inoltre che questa procedura può essere eseguita da una USB live in esecuzione sull'host di destinazione.
Riattivazione di Windows
Quindi ora avevo l'SSD di Windows in esecuzione come VM sul mio host Fedora. Tuttavia, in una frustrante serie di eventi, dopo essere stato in esecuzione per alcune ore, Windows ha visualizzato un messaggio di avviso che indicava che dovevo "Attivare Windows".
Dopo aver seguito molte altre pagine web senza uscita, alla fine ho rinunciato a provare a riattivarlo utilizzando un codice esistente perché sembrava essere stato in qualche modo distrutto. Infine, quando ho tentato di seguire una delle sessioni di chat di supporto virtuale online, l'applicazione virtuale "Ottieni aiuto" ha indicato che la mia istanza di Windows 10 Pro era già attivata. Come può essere così? Continuava a volerlo attivare, ma quando ho provato mi ha detto che era già attivato.
O no
Dopo aver trascorso diverse ore nell'arco di tre giorni facendo ricerche e sperimentazioni, ho deciso di tornare ad avviare l'SSD originale in Windows e di tornarci su in un secondo momento. Ma poi Windows, anche se avviato dal dispositivo di archiviazione originale, ha richiesto di essere riattivato.
La ricerca nel sito di supporto Microsoft non è stata utile. Dopo aver dovuto armeggiare con lo stesso supporto automatizzato di prima, ho chiamato il numero di telefono fornito solo per sentirmi dire da un sistema di risposta automatica che tutto il supporto per Windows 10 Pro veniva fornito solo tramite Internet. A questo punto, ero in ritardo di quasi un giorno nel far funzionare e installare il computer in ufficio.
Ritorno al futuro
Alla fine l'ho fatto, ho acquistato una copia di Windows 10 Home – per circa $120 – e ho creato una VM con un dispositivo di archiviazione virtuale su cui installarlo.
Ho copiato un gran numero di documenti e fogli di calcolo nella directory home del direttore dell'ufficio. Ho reinstallato l'unico programma Windows di cui avevamo bisogno e ho verificato con il responsabile dell'ufficio che funzionasse e che i dati fossero tutti lì.
Pensieri finali
Quindi il mio obiettivo è stato raggiunto, letteralmente con un giorno di ritardo e circa 120 dollari in meno, ma utilizzando un approccio più standard. Sto ancora apportando alcune modifiche ai permessi e ripristinando la rubrica di Thunderbird; Ho alcuni backup CSV su cui lavorare, ma i file *.mab contengono pochissime informazioni sull'unità Windows. Ho anche usato il comando find di Linux per individuare tutti quelli sul dispositivo di archiviazione originale.
Sono andato in una serie di tane di coniglio e ho dovuto tirarmi fuori e ricominciare da capo ogni volta. Ho riscontrato problemi che non erano direttamente correlati a questo progetto, ma che hanno influenzato il mio lavoro su di esso. Questi problemi includevano cose interessanti come montare la partizione Windows su /mnt sulla mia macchina Linux e ricevere un messaggio che la partizione era stata chiusa in modo improprio da Windows (sì, sul mio host Linux) e che il problema era stato risolto l'incoerenza. Nemmeno Windows potrebbe farlo dopo più riavvii attraverso la cosiddetta modalità di "ripristino".
Forse hai notato alcuni indizi nei dati di output dell'utilità chntpw. Ho eliminato alcuni degli altri account utente visualizzati sul mio host per motivi di sicurezza, ma da tali informazioni ho visto che tutti gli utenti erano amministratori. Inutile dire che l'ho cambiato. Sono ancora sorpreso dalle pessime pratiche amministrative che incontro, ma immagino che non dovrei esserlo.
Alla fine sono stato costretto ad acquistare una licenza, ma almeno un po' meno costosa dell'originale. Una cosa che so è che la parte Linux ha funzionato perfettamente una volta trovate tutte le informazioni necessarie. Il problema riguardava l'attivazione di Windows. Alcuni di voi potrebbero essere riusciti a riattivare Windows. Se è così, mi piacerebbe comunque sapere come hai fatto, quindi aggiungi la tua esperienza ai commenti.
Questo è ancora un altro motivo per cui non mi piace Windows e utilizzo Linux solo sui miei sistemi. È anche uno dei motivi per cui sto convertendo tutti i computer dell'organizzazione a Linux. Ci vuole solo tempo e convinzione. Ci è rimasto solo questo programma di contabilità e devo collaborare con la tesoriera per trovarne uno che funzioni per lei. Lo capisco: mi piacciono i miei strumenti e ho bisogno che funzionino nel modo migliore per me.