Простой способ определить технологию виртуализации

TL; DR: Во многих случаях Вы видите, получили ли к файлу доступ; однако, невозможно сказать, была ли копия сделана или нет.

Это кажется этим atime был бы обновлен при использовании cp (если noatime в действительности); однако, делая любую другую операцию чтения (как grep somestring $filename) также коснулся бы файла.

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

Кроме того, это только касается непривилегированных нападений онлайн. Если у меня есть физический доступ, я мог бы перезагрузить в дистрибутив живого CD, смонтировать раздел, только для чтения, скопировать что-либо от него (или даже сделать полный образ диска) и не будет никаких меток на разделе (кроме увеличенного счетчика монтирования).

120
06.09.2013, 23:56
16 ответов

dmidecode -s system-product-name

Я протестировал на Рабочей станции VMware, VirtualBox, QEMU с KVM, автономном QEMU с Ubuntu как гость ОС. Другие добавили дополнительные платформы, с которыми они знакомы также.

Технологии виртуализации

  • VMware Workstation

    root@router:~# dmidecode -s system-product-name
    VMware Virtual Platform
    
  • VirtualBox

    root@router:~# dmidecode -s system-product-name
    VirtualBox
    
  • Qemu с KVM

    root@router:~# dmidecode -s system-product-name
    KVM
    
  • Qemu (эмулирован)

    root@router:~# dmidecode -s system-product-name
    Bochs
    
  • Microsoft VirtualPC

    root@router:~# dmidecode | egrep -i 'manufacturer|product'
    Manufacturer: Microsoft Corporation
    Product Name: Virtual Machine
    
  • Virtuozzo

    root@router:~# dmidecode
    /dev/mem: Permission denied
    
  • Xen

    root@router:~# dmidecode | grep -i domU
    Product Name: HVM domU
    

На чистом металле это возвращает идентификацию модели компьютера или материнской платы.

/dev/disk/by-id

Если Вы не имеете прав работать dmidecode затем можно использовать:

Технология виртуализации: QEMU

ls -1 /dev/disk/by-id/

Вывод

[root@host-7-129 ~]# ls -1 /dev/disk/by-id/
ata-QEMU_DVD-ROM_QM00003
ata-QEMU_HARDDISK_QM00001
ata-QEMU_HARDDISK_QM00001-part1
ata-QEMU_HARDDISK_QM00002
ata-QEMU_HARDDISK_QM00002-part1
scsi-SATA_QEMU_HARDDISK_QM00001
scsi-SATA_QEMU_HARDDISK_QM00001-part1
scsi-SATA_QEMU_HARDDISK_QM00002
scsi-SATA_QEMU_HARDDISK_QM00002-part1

Ссылки

131
27.01.2020, 19:29
  • 1
    Hyper-V возвращается почти бесполезный Virtual Machine для dmidecode -s system-product-name. Нет ничего очевидного под/dev/disk/by-id также. фактор, кажется, обнаруживает hyperv путем рассмотрения вывода lspci. –  Zoredache 07.09.2013, 02:39
  • 2
    Откройте проверку VZ на /proc/user_beancounters –  exussum 07.09.2013, 15:45
  • 3
    +1 для /proc/user_beancounters по OpenVZ, который вероятен на дешевом VPS's как пример. –  m3nda 21.01.2015, 04:37
  • 4
    Оба dmidecode и /dev/disk/by-id решения перестали работать в контейнере Докера. Посмотрите, что unix.stackexchange.com/a/257207/106572 –  Martin Bramwell 23.01.2016, 19:35
  • 5
    с qemu 2.5.0 (по крайней мере), dmidecode -s system-product-name возвращает универсальное аппаратное описание вместо "KVM" или "Bochs", показанного выше. Для меня эта строка Standard PC (i440FX + PIIX, 1996). dmidecode -s system-manufacturer возвращает намного меньше универсальной строки QEMU. Так как qemu позволяет данным DMI быть обеспеченными, я подозреваю, что dmidecode относительно легко одурачить - неважно, считанное поле. –  Mark 27.02.2016, 00:46

Желательный метод

lshw

Эта команда производит следующий вывод на различных технологических гостях VM.

$ sudo lshw -class system

Вывод

  • KVM

    mungr                     
        description: Computer
        product: KVM
        vendor: Red Hat
        width: 64 bits
        capabilities: smbios-2.4 dmi-2.4 vsyscall64 vsyscall32
    
  • Виртуальное поле

    fedora17                  
        description: Computer
        product: VirtualBox ()
        vendor: innotek GmbH
        version: 1.2
        serial: 0
        width: 64 bits
        capabilities: smbios-2.5 dmi-2.5 vsyscall32
    
  • VMware

    partedmagic
        description: Computer
        product: VMware Virtual Platform ()
        vendor: VMware, Inc.
        version: None
        serial: VMware-56 4d 94 a0 53 e3 f3 c6-f9 a6 eb 1a 89 70 04 57
        width: 32 bits
        capabilities: smbios-2.4 dmi-2.4 smp-1.4 smp
    

Сценарии

Если Вы находитесь на Ubuntu/Debian существует пакет open-vm-tools может быть установлен. Это обеспечивает vmware-checkvm. Это возвращает только цифру. A 0 средства это - VM, a 1 средства это - физическая система.

Менее желательные методы

Если это - KVM /proc/scsi/scsi и ethtool опции обнаруживаются следующим образом:

SCSI

$ cat /proc/scsi/scsi 
Attached devices:
Host: scsi1 Channel: 00 Id: 00 Lun: 00
  Vendor: QEMU     Model: QEMU DVD-ROM     Rev: 0.9.
  Type:   CD-ROM                           ANSI  SCSI revision: 05

ethtool

$ ethtool -i eth0
driver: virtio_net
version: 
firmware-version: 
bus-info: virtio0
supports-statistics: no
supports-test: no
supports-eeprom-access: no
supports-register-dump: no
supports-priv-flags: no

virtio_net является частью KVM. /proc/scsi/scsi говорит Вам, что Вы находитесь в VM, и что Вы - наиболее вероятный KVM.

dmesg

Используя следующие команды grep'луг через dmesg журнал.

$ sudo dmesg | grep -i virtual
  • VMware

    VMware vmxnet virtual NIC driver
     Vendor: VMware    Model: Virtual disk      Rev: 1.0 
    hda: VMware Virtual IDE CDROM Drive, ATAPI CD/DVD-ROM drive
    
  • QEmu или KVM

    Если "-cpu host" опция не использовалась, QEmu и KVM идентифицируют себя как:

    CPU: AMD QEMU Virtual CPU version 0.9.1 stepping 03
    

    иначе информация о ЦП хоста будет использоваться оба в dmesg, или в /proc/cpuinfo. Однако необходимо видеть что-то как:

    [    0.000000] Booting paravirtualized kernel on KVM
    

    В более новых ядрах, которые понимают, что они работают при паравиртуализации.

  • Microsoft VirtualPC

    hda: Virtual HD, ATA DISK drive
    hdc: Virtual CD, ATAPI CD/DVD-ROM drive
    
  • Xen

    $ sudo dmesg | grep -i xen
    Xen virtual console successfully installed as tty1
    
  • Virtuozzo

    # method #1
    $ sudo dmesg
    (returns no output)
    
    # method #2
    $ sudo cat /var/log/dmesg
    (returns no output)
    
    # method #3
    $ sudo ls -al /proc/vz
    veinfo  veinfo_redir  veredir  vestat  vzaquota  vzdata
    

Ссылки

28
27.01.2020, 19:29
  • 1
    Такой ввод по абсолютному адресу вокруг драйверов - то, чего я надеялся избежать: это будет отличаться для каждой технологии VM и будет зависеть от настроек. Название продукта, о котором сообщают lshw -class system и dmidecode точно, что я надеялся найти. –  Gilles 'SO- stop being evil' 07.09.2013, 01:58
  • 2
    @Gilles - да я не значил для Вас для фактического, используют их, только для получения методов. Я поднимаю Виртуальные экземпляры Поля и VMware теперь для подтверждения lshw вывод также для тех платформ. Дайте мне несколько минут, и я обновлю A. –  slm♦ 07.09.2013, 02:08
  • 3
    @Gilles - похож на lshw, может сделать задание также для всех технологий. Я переместил ответы на нижнюю часть ответа, которые не были тем, что Вы смотрели так, чтобы другие не должны были пропускать мимо них. –  slm♦ 07.09.2013, 04:22
  • 4
    dmesg заполняет кольцевой буфер фиксированного размера всеми видами материала. Это является абсолютно несоответствующим для этой задачи. Посмотрите unix.stackexchange.com/a/257207/106572 –  Martin Bramwell 23.01.2016, 19:43
  • 5
    @Martin - и вот почему это находится в менее желательном разделе моего ответа. Я обычно пишу ответы, которые являются все включено, показывая множество методов. –  slm♦ 23.01.2016, 19:55
isVMware() { [[ $(dmidecode -s system-manufacturer) = 'VMware, Inc.' ]]; }
isXen   () { [[ $(dmidecode -s system-manufacturer) = 'Xen'          ]]; }
isKVM   () { [[ $(dmidecode -s system-product-name) = 'KVM'          ]]; }
isVBox  () { [[ $(dmidecode -s system-product-name) = 'VirtualBox'   ]]; }
isVM    () { isVMware || isXen || isKVM || isVBox; }

Это - тесты, которые мы используем в моей компании.

13
27.01.2020, 19:29

Если Вы получаете человека, Вы помогаете установить facter, можно сделать

facter virtual

Никакой корневой доступ не необходим.

Гость Debian на хосте Debian:

[user@guest]$ facter virtual
virtualbox

Я не могу ручаться за то, как хорошо это работало бы с Xen/KVM/Qemu...

9
27.01.2020, 19:29

Для VirtualBox Вы могли lspci | grep -i virtualbox, это дает:

$ lspci | grep -i virtualbox
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service

С другой стороны, dmidecode -s system-product-name (как @Rahul Patil предлагает), еще больше прямо к точке (но должен базироваться):

$ sudo dmidecode -s system-product-name
VirtualBox

Для non-KVM QEMU, dmidecode -s system-product-name смутно возвраты Bochs, но dmesg | grep -i qemu работы (устройства хранения, которые QEMU эмулирует обычно, имеют имя QEMU HARDDISK, QEMU DVD-ROM и т.д....).

3
27.01.2020, 19:29

Иногда это хитро :)

root@server:~# dmidecode -s system-product-name
Bochs

root@server:~# dmidecode | egrep -i 'manufacturer|product|vendor'
        Vendor: Bochs
        Manufacturer: Bochs
        Product Name: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs
        Manufacturer: Bochs

root@server:~# virt-what
root@server:~# dpkg -l |grep virt-what
ii  virt-what                           1.2-1                        detect if we are running in a virtual machine

root@server:~# egrep -i 'virtual|vbox' /var/log/dmesg
[    0.000000] Booting paravirtualized kernel on KVM
[    0.385701] input: Macintosh mouse button emulation as /devices/virtual/input/input0
3
27.01.2020, 19:29
[112208] Сценарий

вируса, который[113259], кажется, хорошо охватывает большинство случаев...

I [112677]do[112678], как и отказ от ответственности авторов:

В большинстве случаев использование этой программы является неправильным. Вместо этого вы должны обнаружить [113260]специфические [113261] возможности, которые вы на самом деле хотите использовать.

  1. Это появилось на моих системах EL5 и EL6 в течение последних нескольких лет как часть установок по умолчанию. Ubuntu имеет его, и источник также доступен.
  2. Факты [112681]факты [112682], обнаруженные скриптом, перечислены здесь [112683], но могут быть легко расширены для крайних случаев.[112217].
16
27.01.2020, 19:29

Если контейнер работает systemd :

$ systemd-detect-virt
lxc

Например, на KVM он возвращает:

kvm

, а на невиртуализированном хосте:

none

См. Также:

41
27.01.2020, 19:29

, по-видимому, виртуализация поступает в нескольких частях - в моем случае QEMU, BOCHS и KVM (затем Ubuntu 14.04). Я нашел самый простой способ обнаружения гипервизора в использовании было:

sudo apt-get install virt-what
sudo virt-what

, который в моем случае вернулся просто KVM , который был основной информацией, которую я искал (также я думаю, потому что это говорит То, что мне разрешено делать (например, запустить IPset, чтобы заблокировать атаку DDOS) и как ресурсы совместно используются между VMS.

Кроме того, я пробовал

sudo dmidecode -s system-product-name

и

sudo lshw -class system

ни один из которых не упоминает КВМ, но они оба сообщают мне, что мое оборудование обеспечивается BOCHS , которые я признаюсь, что я даже не слышал, Но быстрый поиск оказался интересной информацией ( http://en.wikipedia.org/wiki/bochs ). Команда LSCW немного более подробнее, чем DmideCode (например, рассказывая мне, что это 64-битный).

Другие ответы на самом деле не сказали мне что-то полезное - Fairual только что вернулся и LS -1 / DEV / DICK / BY-ID / вернулся ATA-QEMU_DVD-ROM_QM00003 , который показывает QEMU, но у меня нет доступа к эмулируемому DVD-ROM в любом случае.

1
27.01.2020, 19:29

при настройке используются флаги: --without-libpam --without-sha-crypt . Команда useradd успешно создала пользователей.

-121--244496-

Хорошо, ребята, вот проблема:

Используя Thinkpad Ultra Dock, все подключенные дисплеи внутри обрабатываются концентратором Displayport. К сожалению, Linux не может различать несколько мониторов с помощью концентратора Displayport MST.

Читайте здесь: http://www.thinkwiki.org/wiki/ThinkPad_Ultra_Dock

Linux пока не предлагает явной поддержки концентратора DisplayPort MST, встроенного в эту док-станцию, поэтому поддержка нескольких экранов не полностью функционирует в Linux. Один экран работает нормально и является полностью управляемым, но несколько экранов обрабатываются неким несконфигурируемым резервным режимом и появляются на одном дисплее; они не могут быть индивидуально настроены с точки зрения разрешения, относительного положения и т.д.

Однако в отношении моего X240 на странице написано:

На X240 ThinkPad одним из способов использования двух внешних экранов является подключение одного к док-порту, а другого - к собственному порту mini DisplayPort ноутбука.

Который работает нормально.

-121--111619-

В «последних» ядрах linux ядро обнаруживает гипервизор и распечатывает сообщение, которое легко доступно с помощью dmesg . Это говорит вам просто:

dmesg | grep "Hypervisor detected"

Например:

$ dmesg | grep "Hypervisor detected"
Hypervisor detected: VMware

Что касается того, что означает «последнее», я не понимаю, в каком ядре он был официально выпущен, но фиксация, которая внесла эту функцию в кодовую базу, была 7 мая 2010 года. См. здесь .

7
27.01.2020, 19:29

Debian поставляется с этим небольшим пакетом для обнаружения типа виртуализации:

$ sudo apt-get install virt-what
$ virt-what

и немного больше из-за Perl-зависимостей:

$ sudo apt-get install imvirt
$ imvirt

Как обычно выполняется:

free
cat /proc/meminfo
cat /proc/cpuinfo
dmesg
htop
lshw
dmidecode
lsmod
hwinfo
1
27.01.2020, 19:29

hostnamectl - ваш друг (требуется systemd ).

Несколько примеров:

Ноутбук без виртуализации

$ hostnamectl status
   Static hostname: earth.gangs.net
         Icon name: computer-laptop
           Chassis: laptop
        Machine ID: 18a0752e1ccbeef09da51ad17fab1f1b
           Boot ID: beefdc99969e4a4a8525ff842b383c62
  Operating System: Ubuntu 16.04.2 LTS
            Kernel: Linux 4.4.0-66-generic
      Architecture: x86-64

Xen

$ hostnamectl status
   Static hostname: pluto.gangs.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: beef39aebbf8ba220ed0438b54497609
           Boot ID: beefc71e97ed48dbb436a470fe1920e1
    Virtualization: xen
  Operating System: Ubuntu 16.04.2 LTS
            Kernel: Linux 3.13.0-37-generic
      Architecture: x86-64

OpenVZ

$ hostnamectl status
   Static hostname: mars.gangs.net
         Icon name: computer-container
           Chassis: container
        Machine ID: 55296cb0566a4aaca10b8e3a4b28beef
           Boot ID: 1bb259b0eb064d9eb8a22d112211beef
    Virtualization: openvz
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 2.6.32-042stab120.16
      Architecture: x86-64

KVM

$ hostnamectl status
   Static hostname: mercury.gangs.net
         Icon name: computer-vm
           Chassis: vm
        Machine ID: beeffefc50ae499881b024c25895ec86
           Boot ID: beef9c7662a240b3b3b04cef3d1518f0
    Virtualization: kvm
  Operating System: CentOS Linux 7 (Core)
       CPE OS Name: cpe:/o:centos:centos:7
            Kernel: Linux 3.10.0-514.10.2.el7.x86_64
      Architecture: x86-64
13
29.04.2021, 00:46

systemd -обнаружить -вирт

Это определит тип используемой технологии виртуализации и выведет ее.

systemd-detect-virt

Различие между виртуализацией машин и виртуализацией контейнеров

Используйте параметры --containerи --vm, чтобы ограничить тип обнаруживаемой виртуализации.

Коды выхода

Если вы просто хотите узнать обнаружена виртуализация или нет, без конкретики, то проще проверить код выхода. Он вернет код выхода 0, если обнаружена виртуализация, и отличный от -ноль в противном случае.


3
29.04.2021, 00:46

Пример, как это решается в linux -test -проекте . Это может быть полезно для тех, кому это нужно в коде C, в идеале без особых зависимостей.

  • сначала пробует внешнюю зависимостьsystemd-detect-virt
  • , затем XEN определяется через /proc/xenили /sys/hypervisor/type,
  • для KVM он проверяет "QEMU Virtual CPU"в /proc/cpuinfoс примечанием, что он не работает с пользовательскими значениями -cpu, так как не существует простого, разумного или надежного способа их обойти.

=> большая часть работы выполняется с помощью systemd-detect-virt. src/detect -virt/detect -virt.c показывает, как обнаруживать другие технологии виртуализации.

1
29.04.2021, 00:46

Обычно я использую lscpuиз пакета util -linux . Он сообщает Hypervisor vendorи Virtualization type.

1
29.04.2021, 00:46

Мой ответ с точки зрения ядра Linux.

Если вы знаете, как использовать аварийную утилиту, попробуйте следующее:

В дампе ядра 4.4 Linux

crash> p x86_hyper
x86_hyper = $4 = (const struct hypervisor_x86 *) 0xffffffff81b166e0 <x86_hyper_kvm>  

На моем ноутбуке с ядром 5.12

crash> p x86_hyper_type      
x86_hyper_type = $1 = X86_HYPER_NATIVE  

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

0
04.11.2021, 09:24

Теги

Похожие вопросы