¿Instalar máquina virtual como no root?


15

¿Es posible instalar algún software de máquina virtual como usuario no root y ejecutarlo?

¿Qué máquinas virtuales se pueden instalar sin necesidad de acceso root?

Si no es posible, ¿cuál sería la máquina virtual más liviana para usar en algunas máquinas virtuales que ejecutan Windows XP SP3?

Respuestas:


5

Cualquier virtualización real necesita acceso de bajo nivel a la CPU y, por lo tanto, la raíz debe instalarla. Una vez instalado, no necesita ser root para ejecutarlo. Probablemente podría instalar y ejecutar un emulador como no root, como bochs, o un adaptador como wine. Si tiene en mente una aplicación específica de Windows, puede ejecutarla bajo wine (quizás).


posible, pero tendría que solicitar que una aplicación se convierta a mono para que funcione también, lo que sería un gran problema en realidad ni siquiera saber si realmente lo harían, gracias por la respuesta. ¿Sabrías cuáles son las máquinas virtuales más ligeras para ejecutar Windows XP SP3 con 2 aplicaciones de uso de memoria realmente pequeñas?
Prix

Probablemente su mejor apuesta sería el reproductor VMware . Está libre de VMware.
Keith

11

Para KVM , necesita acceso al dispositivo /dev/kvm. Si su usuario puede leer / escribir en este dispositivo, puede ejecutar máquinas virtuales basadas en KVM como su usuario.

En la mayoría de las distribuciones, los miembros del kvmgrupo tienen acceso a este dispositivo, por lo que todo lo que necesita hacer es agregar su usuario al kvmgrupo.

Para la mayoría de las otras tecnologías aceleradas, necesitará módulos de kernel cargados (esto incluye virtualbox y VMWare). Esto casi con certeza requiere acceso a nivel raíz.

Puede ejecutar tecnologías de virtualización no aceleradas como cualquier usuario. Por ejemplo, qemu en modo no acelerado. Tenga en cuenta que será muy lento en comparación con la virtualización acelerada.


agradece que la información no acelerada haya sido útil;)
Prix

7

El modo de usuario Linux es una solución de virtualización de Linux que se ejecuta completamente en el espacio de usuario; no se requieren privilegios de root.

Sin embargo, solo puede ejecutar un invitado Linux dentro de un host Linux, por lo que no es adecuado si desea ejecutar cualquier otra cosa.


4

Una máquina virtual necesita un acceso de nivel bastante bajo al procesador (y a otro hardware) para ser eficiente. Por lo tanto, no verá ningún software de VM con buen rendimiento que pueda instalarse sin root.

En cuanto a las máquinas virtuales livianas, la ligereza se logra al incluir solo las características necesarias. Esto requiere cierto conocimiento sobre el sistema operativo que se ejecutará, por lo que las máquinas virtuales ligeras de código abierto ( Plex86 , LilyVM ) solo admiten sistemas operativos de código abierto. Según esta lógica, podría ser que Microsoft Virtual PC sea más liviano que VirtualBox / VMWare / etc. Pero realmente no lo sé. VirtualBox está disponible en código abierto, es bastante utilizable y siempre ha sido suficiente para mis propósitos (pero he probado otros).


2

Virtualbox 4.0.8 debe instalarse como campo raíz, pero luego puede permitir que los usuarios creen sus propias máquinas virtuales. Solo tienes que ser miembro del grupovboxusers

usermod -G vboxusers USERNAME

Eche un vistazo a este enlace , un buen artículo sobre cómo ejecutarlo sin cabeza, directamente desde el shell. También me gusta mucho que sea compatible con el protocolo RDP, lo que significa que puede usarlo rdesktoppara conectarse.


2

QEmu puede hacer eso. Lo he hecho varias veces. Aunque no es extremadamente eficiente


2

1) Respuesta de tres líneas

Para usar mis imágenes precompiladas / versión compilada de qemu, descárguelo desde aquí y luego descomprímalo:

tar -xvzf qemu_packed.tar.gz

También puede descargar mi imagen de Debian 8 (1.6G) desde aquí :

tar -xvzf test01.qcow2.tar.gz

y finalmente correr

./command.sh

Debería tener un Debian 8 en funcionamiento, en modo texto, con el puerto ssh abierto en el huésped anfitrión en el puerto 22222. Puede iniciar sesión utilizando el usuario "root" y la contraseña "root".

2) Respuesta más larga, haz estas imágenes tú mismo

QEMU es una solución que me permite instalar mi propia imagen de Linux en un servidor en el que no tenía acceso de root. Es muy útil, lo uso, por ejemplo, para hacer ssh inverso sin revelar mi contraseña de usuario principal o con fines educativos. Pero, de hecho, debido a que no puede usar KVM para la virtualización real sin una cuenta raíz, podrá hacer solo la emulación, que puede ser bastante ineficiente (pero para las operaciones de línea de comandos, nunca vi la sobrecarga).

2.1) Paquete qemu

Aquí está la descripción de cómo procedo. El primer paso es hacer qemu "portátil", es decir, utilizable en el servidor sin acceso de root. Para hacerlo, tiene varios métodos, intentaré presentarlos para que pueda elegir el que prefiera.

2.1.a) Método 1: descargue el .deb disponible

Esta solución puede ser realmente rápida de aplicar (básicamente, si funciona, en 1 comando lo obtienes), pero debido a que mi script puede tener errores / puede olvidar algo de lib, puede ser bastante largo descargar manualmente todos los binarios ... Otra ventaja de este método es que puede ejecutarlo en modo no root, directamente en el servidor. La idea de obtener binarios de qemu aquí es obtener el archivo .deb / .rpm (de apt, o de los sitios web en línea que alojan .deb), extraerlo, verificar las dependencias de las bibliotecas usando lddy descargar todas .deblas dependencias que están no está presente en la computadora para extraerlos (los .soarchivos). Debido a que puede ser bastante largo y repetitivo, creé un pequeño script, pero si eres valiente, puedes hacer todo eso manualmente ... Solo toma tiempo. Para usarlo, guarde este script en un archivocreate_qemu_binaries.sh:

#!/usr/bin/env bash
mkdir qemu_extract
cd qemu_extract
echo "########## Downloading qemu... ##########"
apt-get download qemu-system-x86
echo "########## Extracting qemu... ##########"
dpkg -x qemu-system-*.deb .
mkdir -p qemu_packed/lib
cp usr/bin/qemu-system-x86_64 qemu_packed
echo "########## Copy libs... ##########"
ldd usr/bin/qemu-system-x86_64 | grep "=>" | grep -v "not found" | awk '{print "cp "$3" qemu_packed/lib/"}' | bash
mkdir not_found
cd not_found
echo "########## Get not found libs... ##########"
ldd ../usr/bin/qemu-system-x86_64 | grep "not found" | awk '{print $1}' > not_found.txt
echo "########## Download not found libs... ##########"
for lib in $(cat not_found.txt); do echo "=== Dealing with $lib ==="; apt-file search --regexp "/${lib}\$" | sed 's/:.*//' | xargs apt-get download; done
echo "########## Extracting not found libs... ##########"
ls *.deb | xargs -I{} dpkg -x "{}" .
echo "########## Copying not found libs... ##########"
find . | grep ".so" | xargs -I{} cp "{}" ../qemu_packed/lib
cd ..
echo "########## Getting pc-bios... ##########"
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
echo "########## Finished !!! ##########"
echo "The output file should be in the folder qemu_extract/qemu_packed."
echo "Once you have a filesystem image, you can run it using:"
echo "$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -display curses -k fr -redir tcp:22222::22"
echo "Don't forget to replace <your image>"

y ejecutarlo usando:

chmod +x create_qemu_binaries.sh 
./create_qemu_binaries.sh 

todo funciona bien, al final debe tener en la carpeta ./qemu_extract/qemu_packed/un archivo qemu-system-x86_64(el binario principal), una carpeta lib(las librerías que deben tomarse qemu) y una carpeta pc-bios, un conjunto de archivos que qemudebe ejecutarse. Luego puede ejecutar qemuusando (no olvide reemplazar con la imagen de su sistema de archivos):

$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none -redir tcp:22222::22

¡A disfrutar! (si el script no funciona para usted, no dude en preguntarme, lo probé solo en dos computadoras, y redirlo puedo eliminar si no necesita reenvío ssh entre el host y la suposición)

2.1.b) Método 2: si accede a una computadora con acceso root

El primer método necesita una computadora con acceso raíz (o qemuinstalada). Primero instale qemuusando algo como

sudo apt install qemu-system-x86

y luego ubique la ruta absoluta de qemu:

$ which qemu-system-x86_64 
/usr/bin/qemu-system-x86_64

Luego, crea una carpeta para ponerlo:

mkdir -p qemu_packed/lib
cd qemu_packed
cp /usr/bin/qemu-system-x86_64 qemu_packed

y obtenga la lista de bibliotecas vinculadas con qemu:

ldd qemu_packed/qemu-system-x86_64 | awk '{print "cp "$3" qemu_packed/lib"}' | bash

ahora, necesitamos que qemu use el BIOS. Los archivos están disponibles en su sistema, pero no sé por qué están en diferentes carpetas, por lo que creo que es más fácil obtenerlos de las fuentes:

git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed

Ahora, debería funcionar, puede copiar estos archivos en la máquina no root, y simplemente ejecutar qemuusando la siguiente línea (no olvide reemplazar la imagen):

$ LD_LIBRARY_PATH=$(pwd)/lib ./qemu-system-x86_64 -L pc-bios -no-kvm -m 256 -drive if=virtio,file=<your image>.qcow2,cache=none

2.1.c) Método 3: de las fuentes

También puede compilar las fuentes, pero si no tiene todas las bibliotecas instaladas, puede ser complicado evitar usar una computadora rooteada para compilar qemu. Pero supongo que es un poco más confiable si los dos métodos anteriores no funcionan. Luego, una vez que está compilado, obtenga el archivo ejecutable y haga el mismo truco que el anterior para obtener las bibliotecas (usando ldd, todas las bibliotecas ya deberían estar en la computadora) y el archivo pc-bios. Y nuevamente, ejecútelo con el mismo comando.

2.3) Crea tu propia imagen

Si no desea utilizar una imagen de sistema de archivos prefabricada, simplemente siga los numerosos tutoriales utilizando los comandos anteriores en lugar de qemu/qemu-system-x86_64! NB: si también desea utilizar qemu-imgpara crear imágenes como no root, ¡siga el mismo proceso que el anterior!

¡A disfrutar!

NB: si desea usar la pantalla de maldiciones para ejecutarla en un servidor sin GUI, debe agregar en su imagen una línea en la opción de arranque para que no active el búfer de trama en /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"

(lo más importante es lo último, no estoy seguro si es necesario). Tanto como

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text

para que la comida permanezca en modo texto. También es posible que desee habilitar el modo de texto en systemd si no es suficiente.


1
Por favor, chico que me puso -1, ¿podrías explicarme por qué?
tobiasBora

No tengo idea, pero esto es genial, gracias.
wbkang
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.