Converta sua instalação do Windows em uma VM no Linux
Veja como configurei uma VM VirtualBox para usar uma unidade física do Windows em minha estação de trabalho Linux.
Eu uso o VirtualBox frequentemente para criar máquinas virtuais para testar novas versões do Fedora, novos programas aplicativos e muitas ferramentas administrativas como o Ansible. Eu até usei o VirtualBox para testar a criação de um host convidado do Windows.
Nunca usei o Windows como meu sistema operacional principal em nenhum dos meus computadores pessoais ou mesmo em uma VM para realizar alguma tarefa obscura que não possa ser realizada com o Linux. No entanto, sou voluntário em uma organização que usa um programa financeiro que requer Windows. Este programa é executado no computador do gerente do escritório com Windows 10 Pro, que vem pré-instalado.
Este aplicativo financeiro não é especial e um programa Linux melhor poderia facilmente substituí-lo, mas descobri que muitos contadores e tesoureiros são extremamente relutantes em fazer mudanças, por isso ainda não consegui convencer aqueles em nossa organização a migrar .
Este conjunto de circunstâncias, juntamente com um recente susto de segurança, tornou altamente desejável converter o host que executa o Windows para o Fedora e executar o Windows e o programa de contabilidade em uma VM nesse host.
É importante entender que não gosto muito do Windows por vários motivos. As principais que se aplicam a este caso são que eu odiaria pagar por outra licença do Windows – o Windows 10 Pro custa cerca de US$200 – para instalá-lo em uma nova VM. Além disso, o Windows 10 requer informações suficientes ao configurá-lo em um novo sistema ou após uma instalação para permitir que crackers roubem a identidade de alguém, caso o banco de dados da Microsoft seja violado. Ninguém deve precisar fornecer seu nome, número de telefone e data de nascimento para registrar o software.
Começando
O computador físico já possuía um dispositivo de armazenamento NVMe m.2 de 240 GB instalado no único slot m.2 disponível na placa-mãe. Decidi instalar um novo SSD SATA no host e usar o SSD existente com Windows como dispositivo de armazenamento para a VM do Windows. A Kingston tem uma excelente visão geral de vários dispositivos SSD, formatos e interfaces em seu site.
Essa abordagem significava que eu não precisaria fazer uma instalação completamente nova do Windows ou de qualquer software aplicativo existente. Isso também significou que o gerente de escritório que trabalha neste computador usaria o Linux para todas as atividades normais, como e-mail, acesso à web, criação de documentos e planilhas com o LibreOffice. Esta abordagem aumenta o perfil de segurança do host. A única vez que a VM do Windows seria usada seria para executar o programa de contabilidade.
Faça backup primeiro
Antes de fazer qualquer outra coisa, criei uma imagem ISO de backup de todo o dispositivo de armazenamento NVMe. Criei uma partição em uma unidade de armazenamento USB externa de 500 GB, criei um sistema de arquivos ext4 nela e montei essa partição em /mnt. Usei o comando dd para criar a imagem.
Instalei o novo SSD SATA de 500 GB no host e instalei o Fedora 32 Xfce nele a partir de um Live USB. Na reinicialização inicial após a instalação, as unidades Linux e Windows estavam disponíveis no menu de inicialização GRUB2. Neste ponto, o host pode ter inicialização dupla entre Linux e Windows.
Procurando ajuda em todos os lugares da Internet
Agora eu precisava de algumas informações sobre como criar uma VM que usa um disco rígido físico ou SSD como dispositivo de armazenamento. Rapidamente descobri muitas informações sobre como fazer isso na documentação do VirtualBox e na internet em geral. Embora a documentação do VirtualBox tenha me ajudado a começar, ela não está completa, deixando de fora algumas informações críticas. A maioria das outras informações que encontrei na internet também estão bastante incompletas.
Com a ajuda crítica de um de nossos correspondentes do Opensource.com, Joshua Holm, consegui resolver o problema e fazer isso funcionar em um procedimento repetível.
Fazendo funcionar
Na verdade, esse procedimento é bastante simples, embora seja necessário um hack misterioso para fazê-lo funcionar. Os sistemas operacionais Windows e Linux já estavam instalados quando eu estava pronto para esta etapa.
Primeiro, instalei a versão mais recente do VirtualBox no host Linux. O VirtualBox pode ser instalado a partir de repositórios de software de muitas distribuições, diretamente do repositório Oracle VirtualBox ou baixando o arquivo do pacote desejado no site do VirtualBox e instalando localmente. Optei por baixar a versão AMD64, que na verdade é um instalador e não um pacote. Eu uso esta versão para contornar um problema que não está relacionado a este projeto específico.
O procedimento de instalação sempre cria um grupo vboxusers em /etc/group. Adicionei os usuários que pretendem executar esta VM aos grupos vboxusers e disk em /etc/group. É importante adicionar os mesmos usuários ao grupo disk porque o VirtualBox é executado como o usuário que o iniciou e também requer acesso direto ao arquivo especial do dispositivo /dev/sdx para trabalhar neste cenário. Adicionar usuários ao grupo disk fornece esse nível de acesso que eles não teriam de outra forma.
Em seguida, criei um diretório para armazenar as VMs e atribuí a ele a propriedade das permissões root.vboxusers e 775. Usei /vms para o diretório, mas pode ser o que você quiser. Por padrão, o VirtualBox cria novas máquinas virtuais em um subdiretório do usuário que cria a VM. Isso tornaria impossível compartilhar o acesso à VM entre vários usuários sem criar uma enorme vulnerabilidade de segurança. Colocar o diretório VM em um local acessível permite compartilhar as VMs.
Iniciei o VirtualBox Manager como um usuário não root. Em seguida, usei o menu Preferências ==> Geral do VirtualBox para definir a pasta padrão da máquina para o diretório /vms.
Criei a VM sem disco virtual. O Tipo deve ser Windows e a Versão deve ser definida como Windows 10 de 64 bits. Defina uma quantidade razoável de RAM para a VM, mas isso poderá ser alterado posteriormente, desde que a VM esteja desligada. Na página Disco rígido da instalação, escolhi a opção "Não adicionar disco rígido virtual" e cliquei em Criar. A nova VM apareceu na janela do VirtualBox Manager. Este procedimento também criou o diretório /vms/Test1.
Fiz isso usando o menu Avançado e realizei todas as configurações em uma única página, como pode ser visto na Figura 1. O Modo Guiado obtém as mesmas informações, mas requer mais cliques para passe por uma janela para cada item de configuração. Ele fornece um pouco mais de texto de ajuda, mas eu não precisava disso.
opensource. com
Figura 1: Crie uma nova máquina virtual, mas não adicione um disco rígido.
Então eu precisava saber qual dispositivo foi atribuído pelo Linux à unidade bruta do Windows. Como root em uma sessão de terminal, use o comando lshw para descobrir a atribuição de dispositivo para o disco do Windows. Neste caso, o dispositivo que representa todo o dispositivo de armazenamento é /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]#
Em vez de um dispositivo de armazenamento virtual localizado no diretório /vms/Test1, o VirtualBox precisa ter uma maneira de identificar o disco rígido físico a partir do qual será inicializado. Essa identificação é realizada criando um arquivo *.vmdk, que aponta para o disco físico bruto que será usado como dispositivo de armazenamento da VM. Como usuário não root, criei um arquivo vmdk que aponta para todo o 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.
Em seguida, usei a caixa de diálogo VirtualBox Manager File ==> Virtual Media Manager para adicionar o disco vmdk aos discos rígidos disponíveis. Cliquei em Adicionar e o local padrão /vms foi exibido na caixa de diálogo de gerenciamento de arquivos. Selecionei o diretório Test1 e depois o arquivo Test1.vmdk. Em seguida, cliquei em Abrir e o arquivo Test1.vmdk foi exibido na lista de discos rígidos disponíveis. Selecionei-o e cliquei em Fechar.
A próxima etapa foi adicionar esse disco vmdk aos dispositivos de armazenamento de nossa VM. No menu de configurações da VM Test1, selecionei Armazenamento e cliquei no ícone para adicionar um disco rígido. Isso abriu uma caixa de diálogo que mostrava o arquivo do disco virtual Test1vmdk em uma lista intitulada Não anexado. Selecionei esse arquivo e cliquei no botão Escolher. Este dispositivo agora é exibido na lista de dispositivos de armazenamento conectados à VM Test1. O único outro dispositivo de armazenamento nesta VM é uma unidade de CD/DVD-ROM vazia.
Cliquei em OK para concluir a adição deste dispositivo à VM.
Havia mais um item para configurar antes que a nova VM funcionasse. Usando a caixa de diálogo Configurações do VirtualBox Manager para a VM Test1, naveguei até a página System ==> Placa-mãe e marquei a caixa para Ativar EFI. Se você não fizer isso, o VirtualBox irá gerar um erro informando que não consegue encontrar uma mídia inicializável ao tentar inicializar esta VM.
A máquina virtual agora inicializa a partir do disco rígido bruto do Windows 10. No entanto, não consegui fazer login porque não tinha uma conta normal neste sistema e também não tinha acesso à senha da conta de administrador do Windows.
Desbloqueando a unidade
Não, esta seção não trata de quebrar a criptografia do disco rígido. Em vez disso, trata-se de ignorar a senha de uma das muitas contas de administrador do Windows, que ninguém na organização tinha.
Embora eu pudesse inicializar a VM do Windows, não consegui fazer login porque não tinha conta naquele host e pedir senhas às pessoas é uma violação de segurança horrível. No entanto, eu precisava fazer login na VM para instalar o VirtualBox Guest Additions, que forneceria captura e liberação contínuas do ponteiro do mouse, permitiria redimensionar a VM para ser maior que 1024x768 e executar manutenção normal no futuro.
Este é um caso de uso perfeito para a capacidade do Linux de alterar senhas de usuários. Embora eu esteja acessando a conta do administrador anterior para iniciar, neste caso ele não suportará mais este sistema e não conseguirei discernir sua senha ou os padrões que ele usa para gerá-las. Simplesmente limparei a senha do administrador de sistema anterior.
Existe uma ferramenta de software de código aberto muito boa especificamente para esta tarefa. No host Linux, instalei chntpw, que provavelmente significa algo como "Alterar senha do NT".
# dnf -y install chntpw
Desliguei a VM e montei a partição /dev/sdb3 em /mnt. Determinei que /dev/sdb3 é a partição correta porque é a primeira partição NTFS grande que vi na saída do comando lshw que executei anteriormente. Certifique-se de não montar a partição enquanto a VM estiver em execução; isso pode causar corrupção significativa dos dados no dispositivo de armazenamento da VM. Observe que a partição correta pode ser diferente em outros hosts.
Navegue até o diretório /mnt/Windows/System32/config. O programa utilitário chntpw não funciona se esse não for o diretório de trabalho atual (PWD). Inicie o programa.
# 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] ->
O comando chntpw usa uma TUI (Text User Interface), que fornece um conjunto de opções de menu. Quando um dos itens do menu principal é escolhido, geralmente é exibido um menu secundário. Seguindo os nomes claros dos menus, primeiro escolhi o item de 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]
Em seguida, selecionei nossa conta de administrador, john, digitando o RID no prompt. Isso exibe informações sobre o usuário e oferece itens de menu adicionais para gerenciar a conta.
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
Neste ponto, escolhi o item de menu 2, "Desbloquear e ativar conta de usuário", que exclui a senha e me permite fazer login sem senha. A propósito – este é um login automático. Então saí do programa. Certifique-se de desmontar /mnt antes de continuar.
Eu sei, eu sei, mas por que não! Eu já ignorei a segurança nesta unidade e host, então isso não importa nem um pouco. Nesse ponto, fiz login na conta administrativa antiga e criei uma nova conta para mim com uma senha segura. Em seguida, loguei como eu mesmo e excluí a antiga conta de administrador para que ninguém mais pudesse usá-la.
Também existem instruções na internet para usar a conta de Administrador do Windows (01f4 na lista acima). Eu poderia ter excluído ou alterado a senha dessa conta se não houvesse uma conta de administrador organizacional em vigor. Observe também que este procedimento pode ser executado a partir de um USB ativo em execução no host de destino.
Reativando o Windows
Agora eu tinha o SSD do Windows rodando como uma VM no meu host Fedora. No entanto, em uma reviravolta frustrante, depois de funcionar por algumas horas, o Windows exibiu uma mensagem de aviso indicando que eu precisava “Ativar o Windows”.
Depois de seguir muitas outras páginas sem saída, finalmente desisti de tentar reativar usando um código existente porque ele parecia ter sido destruído de alguma forma. Por fim, ao tentar acompanhar uma das sessões de chat de suporte virtual on-line, o aplicativo virtual “Obter ajuda” indicou que minha instância do Windows 10 Pro já estava ativada. Como pode ser esse o caso? Ele sempre quis que eu o ativasse, mas quando tentei, ele disse que já estava ativado.
Ou não
Depois de passar várias horas em três dias fazendo pesquisas e experimentos, decidi voltar a inicializar o SSD original no Windows e voltar a isso mais tarde. Mas então o Windows – mesmo quando inicializado a partir do dispositivo de armazenamento original – exigiu ser reativado.
Pesquisar no site de suporte da Microsoft não ajudou em nada. Depois de ter que me preocupar com o mesmo suporte automatizado de antes, liguei para o número de telefone fornecido apenas para ser informado por um sistema de resposta automatizado que todo o suporte para Windows 10 Pro era fornecido apenas pela Internet. A essa altura, eu estava quase um dia atrasado para colocar o computador em funcionamento e instalá-lo no escritório.
De volta para o Futuro
Finalmente consegui, comprei uma cópia do Windows 10 Home – por cerca de US$120 – e criei uma VM com um dispositivo de armazenamento virtual para instalá-lo.
Copiei um grande número de arquivos de documentos e planilhas para o diretório inicial do gerente do escritório. Reinstalei o programa do Windows que precisávamos e verifiquei com o gerente do escritório se ele funcionava e se os dados estavam todos lá.
Pensamentos finais
Portanto, meu objetivo foi alcançado, literalmente com um dia de atraso e cerca de US$120 a menos, mas usando uma abordagem mais padronizada. Ainda estou fazendo alguns ajustes nas permissões e restaurando a agenda de endereços do Thunderbird; Tenho alguns backups CSV para trabalhar, mas os arquivos *.mab contêm muito poucas informações na unidade do Windows. Eu até usei o comando find do Linux para localizar todos os que estão no dispositivo de armazenamento original.
Desci em várias tocas de coelho e tive que me extrair e recomeçar a cada vez. Encontrei problemas que não estavam diretamente relacionados a este projeto, mas que afetaram meu trabalho nele. Esses problemas incluíam coisas interessantes como montar a partição do Windows em /mnt na minha máquina Linux e receber uma mensagem de que a partição havia sido fechada incorretamente pelo Windows (sim – no meu host Linux) e que havia sido corrigida. a inconsistência. Nem mesmo o Windows conseguiu fazer isso após várias reinicializações por meio do chamado modo de “recuperação”.
Talvez você tenha notado algumas pistas nos dados de saída do utilitário chntpw. Cortei algumas das outras contas de usuário exibidas em meu host por motivos de segurança, mas vi nessas informações que todos os usuários eram administradores. Escusado será dizer que mudei isso. Ainda estou surpreso com as más práticas administrativas que encontro, mas acho que não deveria ficar.
No final, fui forçado a comprar uma licença, mas que era pelo menos um pouco mais barata que a original. Uma coisa que sei é que a parte do Linux funcionou perfeitamente depois que encontrei todas as informações necessárias. O problema estava relacionado à ativação do Windows. Alguns de vocês podem ter conseguido reativar o Windows. Se sim, ainda gostaria de saber como você fez isso, então adicione sua experiência aos comentários.
Esta é mais uma razão pela qual não gosto do Windows e só uso Linux em meus próprios sistemas. É também uma das razões pelas quais estou convertendo todos os computadores da organização para Linux. Só leva tempo e é convincente. Só nos resta este programa de contabilidade e preciso trabalhar com a tesoureira para encontrar um que funcione para ela. Eu entendo isso – gosto das minhas próprias ferramentas e preciso que elas funcionem da maneira que for melhor para mim.