เป็นไปได้หรือไม่ที่จะติดตั้งซอฟต์แวร์เครื่องเสมือนในฐานะผู้ใช้ที่ไม่ใช่รูทและใช้งานได้?
VM ชนิดใดที่สามารถติดตั้งได้โดยไม่ต้องมีการเข้าถึงรูท
หากเป็นไปไม่ได้เครื่องเสมือนน้ำหนักเบาที่สุดจะใช้กับ Windows xp sp3 ของ VM ที่กำลังทำงานอยู่หรือไม่
เป็นไปได้หรือไม่ที่จะติดตั้งซอฟต์แวร์เครื่องเสมือนในฐานะผู้ใช้ที่ไม่ใช่รูทและใช้งานได้?
VM ชนิดใดที่สามารถติดตั้งได้โดยไม่ต้องมีการเข้าถึงรูท
หากเป็นไปไม่ได้เครื่องเสมือนน้ำหนักเบาที่สุดจะใช้กับ Windows xp sp3 ของ VM ที่กำลังทำงานอยู่หรือไม่
คำตอบ:
การจำลองเสมือนจริงใด ๆ จำเป็นต้องมีการเข้าถึง CPU ในระดับต่ำดังนั้นรากจะต้องติดตั้ง เมื่อติดตั้งแล้วคุณไม่จำเป็นต้องรูทเพื่อใช้งาน คุณอาจจะติดตั้งและรันโปรแกรมจำลองที่ไม่ใช่รูทเช่น bochs หรืออะแดปเตอร์เช่นไวน์ หากคุณมีแอพ Windows ที่เฉพาะเจาะจงอยู่ในใจคุณสามารถเรียกใช้ภายใต้ไวน์ (อาจ)
สำหรับKVM/dev/kvm
คุณจำเป็นต้องเข้าถึงอุปกรณ์ หากผู้ใช้ของคุณสามารถอ่าน / เขียนไปยังอุปกรณ์นี้คุณสามารถเรียกใช้เครื่องเสมือนที่ใช้ KVM เป็นผู้ใช้ของคุณ
สมาชิกส่วนใหญ่ของkvm
กลุ่มมีสิทธิ์เข้าถึงอุปกรณ์นี้ดังนั้นสิ่งที่คุณต้องทำคือเพิ่มผู้ใช้ของคุณในkvm
กลุ่ม
สำหรับเทคโนโลยีเร่งความเร็วอื่น ๆ ส่วนใหญ่คุณจะต้องโหลดโมดูลเคอร์เนล (ซึ่งรวมถึง virtualbox และ VMWare) นี่เกือบจะแน่นอนต้องมีการเข้าถึงระดับราก
คุณสามารถเรียกใช้เทคโนโลยีการจำลองเสมือนแบบไม่เร่งความเร็วในฐานะผู้ใช้ใด ๆ ตัวอย่างเช่นqemuในโหมดที่ไม่เร่งความเร็ว โปรดระวังว่ามันจะช้ามากเมื่อเทียบกับการจำลองเสมือนแบบเร่งความเร็ว
โหมดผู้ใช้ Linuxเป็นโซลูชั่นการจำลองเสมือนของ Linux ที่ทำงานใน userspace โดยไม่ต้องใช้สิทธิ์รูท
อย่างไรก็ตามมันสามารถเรียกใช้แขกของ Linux ภายในโฮสต์ Linux เท่านั้นดังนั้นจึงไม่เหมาะหากคุณต้องการเรียกใช้สิ่งอื่น
เครื่องเสมือนต้องการการเข้าถึงโปรเซสเซอร์ (และฮาร์ดแวร์อื่น ๆ ) ในระดับต่ำเพื่อให้มีประสิทธิภาพ ดังนั้นคุณจะไม่เห็นซอฟต์แวร์ VM ที่ทำงานได้ดีซึ่งสามารถติดตั้งแบบไม่รูทได้
สำหรับเครื่องเสมือนน้ำหนักเบาความสว่างนั้นทำได้โดยการรวมคุณสมบัติที่จำเป็นเท่านั้น สิ่งนี้ต้องการความรู้บางอย่างเกี่ยวกับระบบปฏิบัติการที่จะใช้งานดังนั้น VM แบบน้ำหนักเบาโอเพนซอร์ส ( Plex86 , LilyVM ) รองรับระบบปฏิบัติการโอเพ่นซอร์สเท่านั้น ด้วยเหตุผลนี้มันอาจเป็นได้ว่า Microsoft Virtual PC นั้นมีน้ำหนักเบากว่า VirtualBox / VMWare / etc แต่ฉันไม่รู้จริงๆ VirtualBox มีอยู่ในโอเพ่นซอร์สค่อนข้างใช้งานได้และเพียงพอสำหรับวัตถุประสงค์ของฉันเสมอ (แต่ฉันได้ลองใช้คนอื่น)
Virtualbox 4.0.8 จำเป็นต้องติดตั้งเป็นรูทออฟ แต่หลังจากนั้นคุณสามารถให้ผู้ใช้สร้าง VM ของตัวเองได้ คุณเพียงแค่ต้องเป็นสมาชิกของกลุ่มvboxusers
usermod -G vboxusers USERNAME
ลองดูที่ลิงค์นี้บทความที่ดีเกี่ยวกับวิธีการเรียกใช้หัวขาดตรงจากเปลือก ฉันยังขุดว่ามันรองรับโปรโตคอล RDP ซึ่งหมายความว่าคุณสามารถใช้rdesktop
เชื่อมต่อได้
QEmu สามารถทำเช่นนั้นได้ ฉันทำไปแล้วหลายครั้ง แม้ว่าจะไม่ค่อยมีประสิทธิภาพก็ตาม
หากต้องการใช้ภาพ qemu ที่สร้างไว้ล่วงหน้า / รวบรวมจากดาวน์โหลดที่นี่จากนั้นยกเลิกการบีบอัดมัน:
tar -xvzf qemu_packed.tar.gz
คุณสามารถดาวน์โหลดเดเบียน 8 ภาพ (1.6G) ได้ที่นี่ :
tar -xvzf test01.qcow2.tar.gz
และในที่สุดก็วิ่ง
./command.sh
คุณควรมี Debian 8 ที่ใช้งานได้ในโหมดข้อความโดยที่พอร์ต ssh เปิดขึ้นในโฮสต์แขกที่พอร์ต 22222 คุณสามารถเข้าสู่ระบบโดยใช้ผู้ใช้ "root" และรหัสผ่าน "root"
QEMU เป็นวิธีการแก้ปัญหาที่ให้ฉันติดตั้งอิมเมจ linux ของฉันเองบนเซิร์ฟเวอร์ที่ฉันไม่มีสิทธิ์เข้าถึงรูต มันมีประโยชน์มากฉันใช้มันเพื่อทำ reverse ssh โดยไม่เปิดเผยรหัสผ่านผู้ใช้หลักหรือเพื่อการศึกษา แต่แน่นอนเพราะคุณไม่สามารถใช้ KVM สำหรับการจำลองเสมือนจริงโดยไม่ต้องใช้บัญชีรูทคุณจะสามารถทำการจำลองเท่านั้นซึ่งไม่มีประสิทธิภาพ (แต่สำหรับการดำเนินงานบรรทัดคำสั่งฉันไม่เคยเห็นค่าใช้จ่าย)
qemu
นี่คือคำอธิบายวิธีดำเนินการของฉัน ขั้นตอนแรกคือการทำให้ qemu "พกพา" กล่าวคือสามารถใช้งานได้บนเซิร์ฟเวอร์ที่ไม่มีการเข้าถึงรูท ในการทำเช่นนั้นคุณมีหลายวิธีฉันจะพยายามนำเสนอวิธีการเหล่านั้นเพื่อให้คุณสามารถเลือกวิธีที่คุณต้องการ
โซลูชันนี้สามารถนำไปใช้ได้อย่างรวดเร็ว (โดยปกติถ้าใช้งานได้ใน 1 คำสั่งคุณจะได้รับ) แต่เนื่องจากสคริปต์ของฉันอาจมีข้อผิดพลาด / อาจลืม lib บางอย่างจึงอาจค่อนข้างนานในการดาวน์โหลดไบนารีทั้งหมดด้วยตนเอง ... ข้อดีอื่น ๆ ของวิธีนี้คือคุณสามารถเรียกใช้ได้ในโหมดที่ไม่ใช่รูทบนเซิร์ฟเวอร์โดยตรง แนวคิดในการรับ 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
(libs ที่ต้องดำเนินการด้วย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
ถ้าคุณไม่ต้องการส่งต่อระหว่างโฮสต์และเดา)
วิธีแรกต้องการคอมพิวเตอร์ที่มีการเข้าถึงรูท (หรือ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
ตอนนี้เราต้องได้รับไบออสจาก qemu ไฟล์มีอยู่ในระบบของคุณ แต่ฉันไม่รู้ว่าทำไมมันอยู่ในโฟลเดอร์ที่แตกต่างกันดังนั้นฉันคิดว่ามันง่ายกว่าที่จะรับไฟล์จากแหล่งที่มา:
git clone https://github.com/qemu/qemu.git
cp -r qemu/pc-bios qemu_packed
cd qemu_packed
ทีนี้มันน่าจะทำงานได้คุณสามารถคัดลอกไฟล์เหล่านี้ไปยังเครื่องที่ไม่ใช่รูทและเพียงแค่เรียก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
คุณสามารถรวบรวมแหล่งต่าง ๆ ได้ แต่ถ้าคุณไม่มีการติดตั้งไลบรารีทั้งหมดอาจเป็นเรื่องยากที่จะหลีกเลี่ยงการใช้คอมพิวเตอร์รูทเพื่อคอมไพล์ qemu แต่ฉันคิดว่ามันน่าเชื่อถือกว่านี้เล็กน้อยหากทั้งสองวิธีข้างต้นไม่ได้ผล จากนั้นเมื่อคอมไพล์แล้วให้รับไฟล์ที่ปฏิบัติการได้และทำตามวิธีเดียวกันกับข้างต้นเพื่อรับldd
ไลบรารี่ (โดยใช้ไลบรารี่ทั้งหมดควรจะมีอยู่ในคอมพิวเตอร์แล้ว) และไฟล์ pc-bios และอีกครั้งรันด้วยคำสั่งเดียวกัน
หากคุณไม่ต้องการใช้อิมเมจระบบไฟล์ที่สร้างไว้แล้วเพียงทำตามบทช่วยสอนจำนวนมากโดยใช้คำสั่งด้านบนแทนqemu/qemu-system-x86_64
! หมายเหตุ: หากคุณต้องการใช้qemu-img
เพื่อสร้างภาพที่ไม่ใช่รูทให้ทำตามขั้นตอนเดียวกับข้างต้น!
สนุก !
หมายเหตุ: หากคุณต้องการใช้จอแสดงผล curses เพื่อเรียกใช้บนเซิร์ฟเวอร์ที่ไม่มี GUI คุณควรเพิ่มบรรทัดลงในอิมเมจในตัวเลือกการบูตเพื่อไม่ให้เปิดเฟรมบัฟเฟอร์ใน/etc/default/grub
:
GRUB_CMDLINE_LINUX_DEFAULT="vga=normal nofb nomodeset bochs_drm.fbdev=off"
(ที่สำคัญที่สุดคืออันสุดท้ายฉันไม่แน่ใจว่าจำเป็นหรือไม่) รวมไปถึง
GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=text
เพื่อให้ด้วงนั้นอยู่ในโหมดข้อความ คุณอาจต้องการเปิดใช้งานโหมดข้อความใน systemd หากยังไม่เพียงพอ