Uso VirtualBox con frecuencia para crear máquinas virtuales para probar nuevas versiones de Fedora, nuevos programas de aplicación y muchas herramientas administrativas como Ansible. Incluso he usado VirtualBox para probar la creación de un host invitado de Windows.
Nunca he usado Windows como mi sistema operativo principal en ninguna de mis computadoras personales o incluso en una VM para realizar alguna tarea oscura que no se puede hacer con Linux. Sin embargo, soy voluntario de una organización que utiliza un programa financiero que requiere Windows. Este programa se ejecuta en la computadora del administrador de la oficina con Windows 10 Pro, que viene preinstalado.
Esta aplicación financiera no es especial, y un mejor programa de Linux podría reemplazarla fácilmente, pero descubrí que muchos contadores y tesoreros son extremadamente reacios a realizar cambios, por lo que aún no he podido convencer a los miembros de nuestra organización para que migren. .
Este conjunto de circunstancias, junto con un susto de seguridad reciente, hizo muy deseable convertir el host que ejecuta Windows a Fedora y ejecutar Windows y el programa de contabilidad en una VM en ese host.
Es importante entender que tengo una aversión extrema por Windows por múltiples razones. Los principales que se aplican a este caso son que odiaría pagar otra licencia de Windows (Windows 10 Pro cuesta alrededor de $ 200) para instalarlo en una nueva máquina virtual. Además, Windows 10 requiere suficiente información al configurarlo en un nuevo sistema o después de una instalación para permitir que los piratas informáticos roben la identidad de uno, en caso de que se viole la base de datos de Microsoft. Nadie debería necesitar proporcionar su nombre, número de teléfono y fecha de nacimiento para registrar el software.
Cómo empezar
La computadora física ya tenía un dispositivo de almacenamiento NVMe m.2 de 240 GB instalado en la única ranura m.2 disponible en la placa base. Decidí instalar un nuevo SSD SATA en el host y usar el SSD existente con Windows como dispositivo de almacenamiento para la VM de Windows. Kingston tiene una excelente descripción general de varios dispositivos SSD, factores de forma e interfaces en su sitio web.
Más recursos de Linux
- Hoja de trucos de los comandos de Linux
- Hoja de trucos de comandos avanzados de Linux
- Curso en línea gratuito:Descripción general técnica de RHEL
- Hoja de trucos de red de Linux
- Hoja de trucos de SELinux
- Hoja de trucos de los comandos comunes de Linux
- ¿Qué son los contenedores de Linux?
- Nuestros últimos artículos sobre Linux
Ese enfoque significaba que no tendría que hacer una instalación completamente nueva de Windows o cualquier software de aplicación existente. También significaba que el administrador de la oficina que trabaja en esta computadora usaría Linux para todas las actividades normales, como el correo electrónico, el acceso a la web, la creación de documentos y hojas de cálculo con LibreOffice. Este enfoque aumenta el perfil de seguridad del host. La única vez que se usaría la máquina virtual de Windows es para ejecutar el programa de contabilidad.
Haz una copia de seguridad primero
Antes de hacer nada más, creé una imagen ISO de respaldo de todo el dispositivo de almacenamiento NVMe. Creé una partición en una unidad de almacenamiento USB externa de 500 GB, creé un sistema de archivos ext4 y luego monté esa partición en /mnt . Usé el dd comando para crear la imagen.
Instalé el nuevo SSD SATA de 500 GB en el host e instalé el giro Fedora 32 Xfce desde un Live USB. En el reinicio inicial después de la instalación, tanto las unidades de Linux como las de Windows estaban disponibles en el menú de inicio de GRUB2. En este punto, el host podría tener un arranque dual entre Linux y Windows.
Buscando ayuda en todos los sitios de internet
Ahora necesitaba información sobre cómo crear una máquina virtual que use un disco duro físico o SSD como dispositivo de almacenamiento. Rápidamente descubrí mucha información sobre cómo hacer esto en la documentación de VirtualBox y en Internet en general. Aunque la documentación de VirtualBox me ayudó a comenzar, no está completa y deja fuera información crítica. La mayor parte de la otra información que encontré en Internet también está bastante incompleta.
Con la ayuda fundamental de uno de nuestros corresponsales de Opensource.com, Joshua Holm, pude abrirme camino y hacer que esto funcione en un procedimiento repetible.
Haciendo que funcione
Este procedimiento es en realidad bastante simple, aunque se requiere un truco arcano para que funcione. Los sistemas operativos Windows y Linux ya estaban instalados cuando estuve listo para este paso.
Primero, instalé la versión más reciente de VirtualBox en el host de Linux. VirtualBox se puede instalar desde los repositorios de software de muchas distribuciones, directamente desde el repositorio de Oracle VirtualBox o descargando el archivo del paquete deseado del sitio web de VirtualBox e instalándolo localmente. Elegí descargar la versión AMD64, que en realidad es un instalador y no un paquete. Uso esta versión para sortear un problema que no está relacionado con este proyecto en particular.
El procedimiento de instalación siempre crea un vboxusers grupo en /etc/group . Agregué los usuarios destinados a ejecutar esta VM a los vboxusers y disco grupos en /etc/group . Es importante agregar los mismos usuarios al disco grupo porque VirtualBox se ejecuta como el usuario que lo inició y también requiere acceso directo a /dev/sdx archivo especial de dispositivo para trabajar en este escenario. Adición de usuarios al disco grupo proporciona ese nivel de acceso, que de otro modo no tendrían.
Luego creé un directorio para almacenar las máquinas virtuales y le otorgué la propiedad de root.vboxusers y 775 permisos Usé /vms para el directorio, pero podría ser lo que quieras. De forma predeterminada, VirtualBox crea nuevas máquinas virtuales en un subdirectorio del usuario que crea la VM. Eso haría imposible compartir el acceso a la VM entre múltiples usuarios sin crear una vulnerabilidad de seguridad masiva. Colocar el directorio de VM en una ubicación accesible permite compartir las VM.
Inicié VirtualBox Manager como usuario no root. Luego usé VirtualBox Preferencias ==> General menú para configurar la Carpeta de máquina predeterminada en el directorio /vms .
Creé la máquina virtual sin un disco virtual. El Tipo debería ser Windows y la Versión debe establecerse en Windows 10 de 64 bits . Establezca una cantidad razonable de RAM para la VM, pero esto se puede cambiar más adelante siempre que la VM esté apagada. En el disco duro página de la instalación, elegí la opción "No agregar un disco duro virtual" e hice clic en Crear . La nueva VM apareció en la ventana de VirtualBox Manager. Este procedimiento también creó el /vms/Test1 directorio.
Hice esto usando el Avanzado y realizó todas las configuraciones en una sola página, como se ve en la Figura 1. El Modo guiado obtiene la misma información pero requiere más clics para pasar por una ventana para cada elemento de configuración. Proporciona un poco más de texto de ayuda, pero no lo necesitaba.
Figura 1:Cree una nueva máquina virtual pero no agregue un disco duro.
Luego necesitaba saber qué dispositivo fue asignado por Linux a la unidad de Windows sin formato. Como root en una sesión de terminal, use lshw Comando para descubrir la asignación de dispositivos para el disco de Windows. En este caso, el dispositivo que representa todo el dispositivo de almacenamiento es /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]#
En lugar de un dispositivo de almacenamiento virtual ubicado en /vms/Test1 directorio, VirtualBox necesita tener una forma de identificar el disco duro físico desde el que debe arrancar. Esta identificación se logra creando un *.vmdk archivo, que apunta al disco físico sin formato que se usará como dispositivo de almacenamiento para la máquina virtual. Como usuario no root, creé un vmdk archivo que apunta a todo el dispositivo de 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.
Luego usé el VirtualBox Manager File ==> Virtual Media Manager cuadro de diálogo para agregar el vmdk disco a los discos duros disponibles. Hice clic en Agregar y el /vms predeterminado la ubicación se mostró en el cuadro de diálogo de administración de archivos. Seleccioné la Prueba1 directorio y luego el Test1.vmdk expediente. Luego hice clic en Abrir y Test1.vmdk El archivo se mostró en la lista de discos duros disponibles. Lo seleccioné e hice clic en Cerrar .
El siguiente paso fue agregar este vmdk disk a los dispositivos de almacenamiento para nuestra VM. En el menú de configuración de Test1 VM , seleccioné Almacenamiento e hizo clic en el icono para agregar un disco duro. Esto abrió un cuadro de diálogo que mostraba el Test1vmdk archivo de disco virtual en una lista titulada No adjunto. Seleccioné este archivo e hice clic en Elegir botón. Este dispositivo ahora se muestra en la lista de dispositivos de almacenamiento conectados a la VM de Test1. . El único otro dispositivo de almacenamiento en esta máquina virtual es una unidad de CD/DVD-ROM vacía.
Hice clic en Aceptar para completar la adición de este dispositivo a la máquina virtual.
Había un elemento más para configurar antes de que funcionara la nueva máquina virtual. Uso de la configuración del administrador de VirtualBox cuadro de diálogo para Test1 VM , navegué a Sistema ==> Placa base página y colocó una marca en la casilla para Habilitar EFI . Si no hace esto, VirtualBox generará un error que indica que no puede encontrar un medio de arranque cuando intente arrancar esta máquina virtual.
La máquina virtual ahora arranca desde el disco duro de Windows 10 sin formato. Sin embargo, no pude iniciar sesión porque no tenía una cuenta normal en este sistema y tampoco tenía acceso a la contraseña de la cuenta de administrador de Windows.
Desbloquear la unidad
No, esta sección no se trata de romper el cifrado del disco duro. Más bien, se trata de omitir la contraseña de una de las muchas cuentas de administrador de Windows, que nadie en la organización tenía.
Aunque podía iniciar la máquina virtual de Windows, no podía iniciar sesión porque no tenía una cuenta en ese host y pedirles a las personas sus contraseñas es una violación de seguridad horrible. Sin embargo, necesitaba iniciar sesión en la máquina virtual para instalar VirtualBox Guest Additions , que proporcionaría una captura y liberación perfectas del puntero del mouse, me permitiría cambiar el tamaño de la VM para que sea más grande que 1024x768 y realizar el mantenimiento normal en el futuro.
Este es un caso de uso perfecto para la capacidad de Linux de cambiar las contraseñas de los usuarios. Aunque estoy accediendo a la cuenta del administrador anterior para comenzar, en este caso, ya no admitirá este sistema y no podré discernir su contraseña ni los patrones que usa para generarlos. Simplemente borraré la contraseña del administrador del sistema anterior.
Hay una muy buena herramienta de software de código abierto específicamente para esta tarea. En el host de Linux, instalé chntpw , que probablemente significa algo como "Cambiar contraseña de NT".
# dnf -y install chntpw
Apagué la VM y luego monté el /dev/sdb3 partición en /mnt . Determiné que /dev/sdb3 es la partición correcta porque es la primera partición NTFS grande que vi en la salida de lshw comando que realicé anteriormente. Asegúrese de no montar la partición mientras la máquina virtual se está ejecutando; eso podría causar una corrupción significativa de los datos en el dispositivo de almacenamiento de VM. Tenga en cuenta que la partición correcta puede ser diferente en otros hosts.
Vaya a /mnt/Windows/System32/config directorio. El chntpw programa de utilidad no funciona si ese no es el directorio de trabajo actual (PWD). Inicie el 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] ->
El chntpw El comando utiliza una TUI (interfaz de usuario de texto), que proporciona un conjunto de opciones de menú. Cuando se elige uno de los elementos del menú principal, generalmente se muestra un menú secundario. Siguiendo los nombres de menú claros, primero elegí el elemento de menú 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]
A continuación, seleccioné nuestra cuenta de administrador, john , escribiendo el RID en el indicador. Esto muestra información sobre el usuario y ofrece elementos de menú adicionales para administrar la cuenta.
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
En este punto, elegí el elemento de menú 2 , "Desbloquear y habilitar cuenta de usuario", que elimina la contraseña y me permite iniciar sesión sin contraseña. Por cierto, este es un inicio de sesión automático. Luego salí del programa. Asegúrese de desmontar /mnt antes de continuar.
Lo sé, lo sé, pero ¿por qué no? Ya pasé por alto la seguridad en esta unidad y host, por lo que no importa ni un ápice. En este punto, inicié sesión en la cuenta administrativa anterior y creé una cuenta nueva para mí con una contraseña segura. Luego inicié sesión como yo mismo y eliminé la cuenta de administrador anterior para que nadie más pudiera usarla.
También hay instrucciones en Internet para usar la cuenta de administrador de Windows (01f4 en la lista anterior). Podría haber eliminado o cambiado la contraseña de esa cuenta si no hubiera habido una cuenta de administrador de la organización. Tenga en cuenta también que este procedimiento se puede realizar desde un USB en vivo que se ejecuta en el host de destino.
Reactivación de Windows
Así que ahora tenía el SSD de Windows ejecutándose como una máquina virtual en mi host Fedora. Sin embargo, en un giro frustrante de los acontecimientos, después de ejecutarse durante unas horas, Windows mostró un mensaje de advertencia que indicaba que necesitaba "Activar Windows".
Después de seguir muchas más páginas web sin salida, finalmente desistí de intentar reactivar usando un código existente porque parecía haber sido destruido de alguna manera. Finalmente, al intentar seguir una de las sesiones de chat de soporte virtual en línea, la aplicación virtual "Obtener ayuda" indicó que mi instancia de Windows 10 Pro ya estaba activada. ¿Cómo puede ser este el caso? Seguía queriendo que lo activara, pero cuando lo intenté, dijo que ya estaba activado.
O no
Cuando pasé varias horas durante tres días investigando y experimentando, decidí volver a iniciar el SSD original en Windows y volver a esto en una fecha posterior. Pero entonces Windows, incluso cuando se inició desde el dispositivo de almacenamiento original, exigió que se reactivara.
La búsqueda en el sitio de soporte de Microsoft no fue útil. Después de tener que lidiar con el mismo soporte automatizado que antes, llamé al número de teléfono proporcionado y un sistema de respuesta automática me dijo que todo el soporte para Windows 10 Pro solo se proporcionaba a través de Internet. A estas alturas, tenía casi un día de retraso en hacer funcionar la computadora y volver a instalarla en la oficina.
Regreso al futuro
Finalmente lo aguanté, compré una copia de Windows 10 Home (por alrededor de $120) y creé una máquina virtual con un dispositivo de almacenamiento virtual para instalarlo.
Copié una gran cantidad de archivos de documentos y hojas de cálculo en el directorio de inicio del administrador de la oficina. Reinstalé el único programa de Windows que necesitamos y verifiqué con el administrador de la oficina que funcionaba y que todos los datos estaban allí.
Reflexiones finales
Así que mi objetivo se cumplió, literalmente un día de retraso y alrededor de $ 120 menos, pero utilizando un enfoque más estándar. Todavía estoy haciendo algunos ajustes a los permisos y restaurando la libreta de direcciones de Thunderbird; Tengo algunas copias de seguridad de CSV para trabajar, pero *.mab Los archivos contienen muy poca información en la unidad de Windows. Incluso usé Linux find Comando para ubicar todos los que están en el dispositivo de almacenamiento original.
Bajé por varias madrigueras de conejo y tuve que salir y empezar de nuevo cada vez. Me encontré con problemas que no estaban directamente relacionados con este proyecto, pero que afectaron mi trabajo en él. Esos problemas incluían cosas interesantes como montar la partición de Windows en /mnt en mi caja de Linux y recibí un mensaje de que Windows había cerrado incorrectamente la partición (sí, en mi host de Linux) y que había solucionado la inconsistencia. Ni siquiera Windows podría hacer eso después de múltiples reinicios a través de su llamado modo de "recuperación".
Tal vez notó algunas pistas en los datos de salida del chntpw utilidad. Eliminé algunas de las otras cuentas de usuario que se mostraban en mi host por razones de seguridad, pero vi en esa información que todos los usuarios eran administradores. No hace falta decir que cambié eso. Todavía me sorprenden las malas prácticas administrativas que encuentro, pero supongo que no debería estarlo.
Al final, me vi obligado a comprar una licencia, pero una que fuera al menos un poco menos costosa que la original. Una cosa que sé es que la parte de Linux de esto funcionó perfectamente una vez que encontré toda la información necesaria. El problema estaba relacionado con la activación de Windows. Es posible que algunos de ustedes hayan tenido éxito en la reactivación de Windows. Si es así, me gustaría saber cómo lo hiciste, así que agrega tu experiencia a los comentarios.
Esta es otra razón por la que no me gusta Windows y solo uso Linux en mis propios sistemas. También es una de las razones por las que estoy convirtiendo todas las computadoras de la organización a Linux. Sólo se necesita tiempo y convincente. Solo nos queda este programa de contabilidad, y necesito trabajar con la tesorera para encontrar uno que funcione para ella. Entiendo esto:me gustan mis propias herramientas y necesito que funcionen de la mejor manera para mí.