Установить виртуальную машину без полномочий root?

15

Можно ли установить какое-либо программное обеспечение виртуальной машины как пользователь без полномочий root и запустить его?

Какие виртуальные машины можно установить без необходимости root-доступа?

Если это невозможно, какую виртуальную машину легче всего использовать для нескольких виртуальных машин под управлением Windows XP SP3?

Prix
источник

Ответы:

5

Любая реальная виртуализация требует низкоуровневого доступа к ЦП, и поэтому root должен установить его. После установки вам не нужно быть пользователем root для запуска. Возможно, вы могли бы установить и запустить эмулятор без полномочий root, такой как bochs, или адаптер, такой как wine. Если у вас есть конкретное приложение для Windows, вы можете просто запустить его под Wine (возможно).

Кит
источник
возможно, но я должен был бы попросить преобразовать приложение в моно, чтобы оно также работало, что было бы большой проблемой, даже не зная, действительно ли они это сделают, спасибо за ответ. Вы случайно не знаете, какие самые легкие виртуальные машины для простого запуска Windows XP с 3 действительно маленькими приложениями использования памяти?
Приз
Вероятно, лучшим выбором будет игрок VMware . Это бесплатно от VMware.
Кит
11

Для KVM вам нужен доступ к устройству /dev/kvm. Если ваш пользователь может читать и писать на этом устройстве, вы можете запускать виртуальные машины на основе KVM в качестве пользователя.

В большинстве дистрибутивов участники kvmгруппы имеют доступ к этому устройству, поэтому все, что вам нужно сделать, это добавить своего пользователя в kvmгруппу.

Для большинства других ускоренных технологий вам понадобятся загруженные модули ядра (в том числе virtualbox и VMWare). Это почти наверняка требует доступа на уровне root.

Вы можете запускать технологии неускоренной виртуализации как любой пользователь. Например, qemu в неускоренном режиме. Имейте в виду, что это будет очень медленно по сравнению с ускоренной виртуализацией.

jmtd
источник
спасибо, что неускоренная информация была полезна;)
Prix
7

Пользовательский режим Linux - это решение для виртуализации Linux, которое работает полностью в пространстве пользователя - никаких привилегий root не требуется.

Однако он может запускать гостевую систему Linux только на хосте Linux, поэтому он не подходит, если вы хотите запустить что-нибудь еще.

Риккардо Мурри
источник
4

Виртуальная машина нуждается в достаточно низкоуровневом доступе к процессору (и другому оборудованию), чтобы быть эффективной. Поэтому вы не увидите ни одного хорошо работающего программного обеспечения для виртуальных машин, которое можно установить без полномочий root.

Что касается легких виртуальных машин, легкость достигается только за счет включения необходимых функций. Это требует определенных знаний об ОС, которая будет работать, и поэтому облегченные виртуальные машины с открытым исходным кодом ( Plex86 , LilyVM ) поддерживают только операционные системы с открытым исходным кодом. По этой логике может показаться, что Microsoft Virtual PC легче, чем VirtualBox / VMWare / и т. Д. но я действительно не знаю VirtualBox доступен с открытым исходным кодом, вполне пригоден для использования и всегда был достаточен для моих целей (но я пробовал другие).

StackExchange печально танцует
источник
2

Virtualbox 4.0.8 должен быть установлен как рут-доступ, но после этого вы можете позволить пользователям создавать собственные виртуальные машины. Вы просто должны быть членом группыvboxusers

usermod -G vboxusers USERNAME

Посмотрите на эту ссылку , хорошая статья, как запустить ее без головы, прямо из оболочки. Я также действительно понимаю, что он поддерживает протокол RDP, то есть вы можете просто использовать его rdesktopдля подключения.

Bas Keur
источник
2

QEmu может сделать это. Я делал это несколько раз. Не очень производительный, хотя

Marco
источник
2

1) Ответ на три строки

Чтобы использовать мои готовые изображения / скомпилированную версию qemu, загрузите ее отсюда , а затем распакуйте:

tar -xvzf qemu_packed.tar.gz

Вы также можете скачать мое изображение Debian 8 (1.6G) отсюда :

tar -xvzf test01.qcow2.tar.gz

и, наконец, запустить

./command.sh

У вас должен быть работающий Debian 8, в текстовом режиме, с открытым портом ssh в гостевой системе на порту 22222. Вы можете войти, используя пользователя «root» и пароль «root».

2) Более длинный ответ, сделайте эти изображения самостоятельно

QEMU - это действительно решение, которое позволяет мне устанавливать мой собственный образ linux на сервер, на котором у меня нет прав root. Это очень полезно, я использую его, например, для обратного ssh без раскрытия моего основного пароля пользователя или для образовательных целей. Но на самом деле, поскольку вы не можете использовать KVM для реальной виртуализации без учетной записи root, вы сможете выполнять только эмуляцию, которая может быть довольно неэффективной (но для операций из командной строки я никогда не видел издержек).

2.1) Пакет qemu

Вот описание того, как я продолжаю. Первый шаг - сделать qemu «переносимым», то есть используемым на сервере без корневого доступа. Для этого у вас есть несколько методов, я постараюсь представить их, чтобы вы могли выбрать тот, который вы предпочитаете.

2.1.a) Метод 1: скачать доступный .deb

Это решение может быть очень быстро применено (в основном, если оно работает, в 1 команде вы получаете его), но поскольку мой скрипт может содержать ошибки / может забыть некоторую библиотеку, может быть довольно долго загружать все двоичные файлы вручную ... Другое преимущество этого метода заключается в том, что вы можете запустить его в режиме без полномочий root прямо на сервере. Идея получить двоичные файлы qemu заключается в том, чтобы получить файл .deb / .rpm (из apt или с веб-сайтов, на которых размещен .deb), извлечь его, проверить с помощью зависимостей библиотек lddи загрузить все .debзависимости, которые отсутствует на компьютере для их извлечения ( .soфайлы). Поскольку он может быть довольно длинным и повторяющимся, я создал небольшой сценарий, но если вы смелы, вы можете сделать все это вручную ... Это займет время. Чтобы использовать его, сохраните этот скрипт в файлcreate_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>"

и запустите его, используя:

chmod +x create_qemu_binaries.sh 
./create_qemu_binaries.sh 

все работает нормально, в конце вы должны иметь в папке ./qemu_extract/qemu_packed/один файл qemu-system-x86_64(основной бинарный файл), одну папку lib(библиотеки, которые нужно взять с собой qemu) и одну папку pc-bios, набор файлов, которые qemuнеобходимо запустить. Затем вы можете запустить qemuс помощью (не забудьте заменить на образ вашей файловой системы):

$ 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

Наслаждайтесь ! (если сценарий не работает для вас, не стесняйтесь спрашивать меня, я протестировал его только на двух компьютерах и redirмогу удалить, если вам не нужна пересылка ssh между хостом и предположением)

2.1.b) Способ 2: если вы получаете доступ к компьютеру с root-доступом

Первому способу нужен компьютер с root-доступом (или qemuустановлен). Сначала установите qemuчто-то вроде

sudo apt install qemu-system-x86

а затем найдите абсолютный путь к QEMU:

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

Затем создайте папку для ее размещения:

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

и получите список библиотек, связанных с qemu:

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

Теперь нам нужно использовать BIOS для qemu. Файлы доступны в вашей системе, но я не знаю, почему они находятся в разных папках, поэтому я думаю, что проще получить их из источников:

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

Теперь это должно работать, вы можете скопировать эти файлы на компьютер без полномочий root и просто запустить, qemuиспользуя следующую строку (не забудьте заменить изображение):

$ 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) Метод 3: из источников

Вы также можете скомпилировать исходники, но если у вас не установлены все библиотеки, может быть сложно избежать использования корневого компьютера для компиляции qemu. Но я думаю, что это немного более надежно, если вышеупомянутые два метода не работают. Затем, после его компиляции, получите исполняемый файл и проделайте тот же трюк, что и выше, чтобы получить библиотеки (используя lddвсе библиотеки должны быть уже на компьютере) и файл pc-bios. И снова, запустите его с той же командой.

2.3) Создайте свой собственный образ

Если вы не хотите использовать готовый образ файловой системы, просто следуйте многочисленным учебникам, используя приведенные выше команды вместо qemu/qemu-system-x86_64! Примечание: если вы также хотите использовать qemu-imgдля создания изображений без полномочий root, выполните тот же процесс, что и выше!

Наслаждайтесь !

NB: если вы хотите использовать отображение curses для запуска его на сервере без графического интерфейса, вы должны добавить в свой образ строку в параметре загрузки, чтобы он не включал буфер кадров в /etc/default/grub:

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

(самое важное - последнее, я не уверен, нужно ли это). Также как и

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text

так, чтобы grub оставался в текстовом режиме. Вы также можете включить текстовый режим в systemd, если этого недостаточно.

tobiasBora
источник
1
Пожалуйста, парень, который поставил мне -1, не могли бы вы объяснить, почему?
ТобиасБора
Понятия не имею, но это здорово, спасибо.
wbkang