linux – 限制对特定用户的KVM虚拟机访问

linux – 限制对特定用户的KVM虚拟机访问,第1张

概述在我的服务器上,我有一个名为“cards2”的KVM虚拟机.它是通过执行(以root身份)创建的: # virt-install --connect qemu:///system --virt-type kvm --name cards2 --ram 2048 --disk /var/kvm/cards2.qcow,size=3 --vcpus=8 --cdrom /var/kvm/debian- 在我的服务器上,我有一个名为“cards2”的KVM虚拟机.它是通过执行(以root身份)创建的:
# virt-install --connect qemu:///system --virt-type kvm --name cards2 --ram 2048 --disk /var/kvm/cards2.qcow,size=3 --vcpus=8 --cdrom /var/kvm/debian-8.5.0-amd64-netinst.iso --vnc --os-type linux --network network=default

该图像具有权限:

# ls -l /var/kvm/cards2.qcow -rwxr-xr-x 1 libvirt-qemu libvirt-qemu 3221225472 Aug 17 18:49 /var/kvm/cards2.qcow

但是我注意到任何具有SSH访问权限的用户都可以通过执行以下命令来访问VM:

virt-vIEwer --connect qemu+ssh://username@hostname.example.com/system vmname

(注意,此命令是远程执行的,而不是在服务器上执行.它通过SSH隧道连接到具有连接URI qemu ssh://username@hostname.example.com的虚拟机管理程序)

用户用户名仅是用户名组的成员.使用用户名帐户进行SSH访问时,虚拟机列表显示为空:

$virsh List --all ID    name                           State----------------------------------------------------

在通过SSH执行以下 *** 作时,我也无法使用套接字进行连接:

$virsh --connect qemu:///system List --allerror: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denIEd

我还尝试删除所有/usr/bin/vir *文件的权限给不在kvm组中的用户:

# chown root:kvm /usr/bin/vir*# chmod o-rx /usr/bin/vir*# ls /usr/bin/vir* -l-rwxr-x--- 1 root kvm  321120 Jul  1 04:46 /usr/bin/virsh-rwxr-x--- 1 root kvm   32184 Dec  7  2013 /usr/bin/virt-alignment-scan-rwxr-x--- 1 root kvm   28128 Dec  7  2013 /usr/bin/virt-cat-rwxr-x--- 1 root kvm    9774 Sep 29  2014 /usr/bin/virt-clone-rwxr-x--- 1 root kvm   10277 Sep 29  2014 /usr/bin/virt-convert-rwxr-x--- 1 root kvm     806 Dec  7  2013 /usr/bin/virt-copy-in-rwxr-x--- 1 root kvm     808 Dec  7  2013 /usr/bin/virt-copy-out-rwxr-x--- 1 root kvm   54584 Dec  7  2013 /usr/bin/virt-df-rwxr-x--- 1 root kvm   33312 Dec  7  2013 /usr/bin/virt-edit-rwxr-x--- 1 root kvm   54536 Dec  7  2013 /usr/bin/virt-filesystems-rwxr-x--- 1 root kvm   30112 Dec  7  2013 /usr/bin/virt-format-rwxr-x--- 1 root kvm   14656 Jul  1 04:46 /usr/bin/virt-host-valIDate-rwxr-x--- 1 root kvm    7944 Sep 29  2014 /usr/bin/virt-image-rwxr-x--- 1 root kvm   44696 Dec  7  2013 /usr/bin/virt-inspector-rwxr-x--- 1 root kvm   36992 Sep 29  2014 /usr/bin/virt-install-rwxr-x--- 1 root kvm    5338 Dec  7  2013 /usr/bin/virt-List-filesystems-rwxr-x--- 1 root kvm    6686 Dec  7  2013 /usr/bin/virt-List-partitions-rwxr-x--- 1 root kvm   53816 Dec  7  2013 /usr/bin/virt-ls-rwxr-x--- 1 root kvm   18641 Dec  7  2013 /usr/bin/virt-make-fs-rwxr-x--- 1 root kvm    9600 Jul  1 04:46 /usr/bin/virt-pki-valIDate-rwxr-x--- 1 root kvm   36264 Dec  7  2013 /usr/bin/virt-rescue-rwxr-x--- 1 root kvm 1322488 Dec  7  2013 /usr/bin/virt-resize-rwxr-x--- 1 root kvm 1231256 Dec  7  2013 /usr/bin/virt-sparsify-rwxr-x--- 1 root kvm 1289592 Dec  7  2013 /usr/bin/virt-sysprep-rwxr-x--- 1 root kvm    8949 Dec  7  2013 /usr/bin/virt-tar-rwxr-x--- 1 root kvm     804 Dec  7  2013 /usr/bin/virt-tar-in-rwxr-x--- 1 root kvm     806 Dec  7  2013 /usr/bin/virt-tar-out-rwxr-x--- 1 root kvm      55 Jul 12  2012 /usr/bin/virtualenv-rwxr-x--- 1 root kvm  132400 May 28  2012 /usr/bin/virt-vIEwer-rwxr-x--- 1 root kvm   23886 Dec  7  2013 /usr/bin/virt-win-reg-rwxr-x--- 1 root kvm    3531 Jul  1 04:46 /usr/bin/virt-xml-valIDate

即使现在我无法通过常规SSH连接访问任何这些命令,我​​仍然可以通过SSH隧道远程执行virt-vIEwer(如上所述)来启动VM.

那么,我该如何才能使特定用户帐户只能访问虚拟机?

编辑:

这是VM启动时在我的/var/log/libvirt/qemu/cards2.log中出现的内容,如果有任何指示:

LC_ALL=C PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin QEMU_AUdio_DRV=none /usr/bin/kvm -S -M pc-1.1 -enable-kvm -m 2048 -smp 8,sockets=8,cores=1,threads=1 -name cards2 -uuID 70905b35-9df3-71c9-d5e9-f804a2826055 -no-user-config -nodefaults -chardev socket,ID=charmonitor,path=/var/lib/libvirt/qemu/cards2.monitor,server,Nowait -mon chardev=charmonitor,ID=monitor,mode=control -rtc base=utc -no-shutdown -device piix3-usb-uhci,ID=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/kvm/cards2.qcow,if=none,ID=drive-IDe0-0-0,format=raw -device IDe-hd,bus=IDe.0,unit=0,drive=drive-IDe0-0-0,ID=IDe0-0-0,bootindex=1 -drive if=none,ID=drive-IDe0-1-0,Readonly=on,format=raw -device IDe-cd,bus=IDe.1,drive=drive-IDe0-1-0,ID=IDe0-1-0 -netdev tap,fd=23,ID=hostnet0 -device rtl8139,netdev=hostnet0,ID=net0,mac=52:54:00:c6:14:68,addr=0x3 -chardev pty,ID=charserial0 -device isa-serial,chardev=charserial0,ID=serial0 -vnc 127.0.0.1:3 -vga cirrus -device virtio-balloon-pci,ID=balloon0,addr=0x4

编辑2:

另一方面,这似乎只是virt-vIEwer的一个问题,而不是virsh.

例如,以下是在远程客户端上执行的一些命令:

$virsh --connect qemu+ssh://unauthorized-user@server.com/systemerror: Failed to connect to the hypervisorerror: End of file while reading data: nc: unix connect Failed: Permission denIEd: input/output error$virsh --connect qemu+ssh://authorized-user@server.com/systemWelcome to virsh,the virtualization interactive terminal.Type:  'help' for help with commands       'quit' to quit
解决方法 我明白了. virt-vIEwer不与libvirtd交互 – 它通过ssh连接到主机并设置隧道以允许访问VM的基于VNC的虚拟显示(在我的情况下为127.0.0.1:5903).这很难解决在127.0.0.1上防火墙VNC的问题.否则,常规用户通常可以自由地与localhost建立TCP连接.我不知道你怎么能只允许root,也许有办法.

也许selinux这样做?

Linux: Allow/restrict IP bind permissions by user

因此,最简单的方法是设置VNC密码.您可以在SSH中执行限制转发和X11转发等 *** 作,但这可能不是100%安全,也可能导致root问题.用户登录后仍可访问127.0.0.1/vnc.

更新

根据Mike(其他答案)和Michael Hampton(评论),您可以使用TLS与VNC进行通信而不是密码,因此如果密码不够好,您将获得相当不错的安全性.对他们两个人的道具,我都不知道.

http://wiki.libvirt.org/page/VNCTLSSetup

https://www.suse.com/documentation/sles11/book_kvm/data/sec_libvirt_connect_remote.html#sec_libvirt_connect_remote_tls

总结

以上是内存溢出为你收集整理的linux – 限制对特定用户的KVM虚拟机访问全部内容,希望文章能够帮你解决linux – 限制对特定用户的KVM虚拟机访问所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/1039042.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-24
下一篇2022-05-24

发表评论

登录后才能评论

评论列表(0条)

    保存