{"id":3856,"date":"2021-08-16T20:28:45","date_gmt":"2021-08-16T18:28:45","guid":{"rendered":"https:\/\/vm.piszki.pl\/?p=3856"},"modified":"2021-08-16T21:03:54","modified_gmt":"2021-08-16T19:03:54","slug":"cloudstack-vm-z-vtpm-i-secure-boot-uefi","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=3856","title":{"rendered":"CloudStack &#8211; VM z vTPM i Secure boot UEFI"},"content":{"rendered":"<p align=\"justify\">Wirtualizacja dostarcza wszelkich mo\u017cliwych narz\u0119dzi wspomagaj\u0105cych uruchamianie system\u00f3w operacyjnych ze szczeg\u00f3lnymi wymaganiami. Jednym z takich wymaga\u0144 jest zapewnienie mo\u017cliwego bezpiecze\u0144stwa poprzez zastosowanie TPM i UEFI z uruchomieniem typu Secure Boot. Tego typu start systemu gwarantuje, \u017ce nic nie zosta\u0142o zmodyfikowane w programie rozruchowym. O ile w fizycznym ho\u015bcie jest to \u0142atwe we wdro\u017ceniu, o tyle w rozwi\u0105zaniach typ Stack wymaga ju\u017c to troch\u0119 wi\u0119cej pracy. O tym jak jest to rozwi\u0105zane w VMware vSphere pisa\u0142ej ju\u017c <a href=\"https:\/\/vm.piszki.pl\/operacje-kryptograficzne-w-vsphere-czyli-o-co-chodzi-z-tym-kms-vtpm-vbs-i-innymi\/\">tutaj<\/a>. Dzisiaj przetestujemy bardzo podobne rozwi\u0105zanie w CloudStack. Nale\u017cy jednak zwr\u00f3ci\u0107 uwag\u0119, \u017ce istniej\u0105ce VM instalowane z BIOS nie b\u0119d\u0105 mog\u0142y by\u0107 wykorzystane, b\u0119dziecie musieli stworzy\u0107 ca\u0142kowicie nowe, wzorcowe VM z UEFI.<\/p>\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" src=\"https:\/\/i0.wp.com\/vm.piszki.pl\/wp-content\/uploads\/2018\/05\/tpm3.png?ssl=1\" width=\"940\" height=\"264\" border=\"0\" \/><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">Na t\u0119 chwil\u0119 nie ma mo\u017cliwo\u015bci wykorzystania fizycznego TPM w wersji emulowanej w VM tak jak to ma miejsce w vSphere. Oba rozwi\u0105zania, UEFI i TPM, s\u0105 w VM emulowane. Zaczniemy od UEFI, w CloudStack w wersji 4.15 wprowadzono mo\u017cliwo\u015b\u0107 uruchamiania VM z UEFI jako ustawienie zaawansowane, standardowo nadal jest wykorzystywany BIOS. Konfiguracja ca\u0142o\u015bci jest bardzo prosta, wymaga zainstalowanie w systemie operacyjnym hosta pakietu edk2-ovmf (lub po prostu OVMF) . Pakiet ten zawiera wszystkie potrzebne pliki do emulowania UEFI w obu trybach, legacy i secure. CloudStack integruje si\u0119 z tym pakietem poprzez stworzenie pliku:<\/p>\n<p align=\"justify\">\/etc\/cloudstack\/agent\/uefi.properties (\u015bcie\u017cki nale\u017cy dostosowa\u0107, zale\u017cnie od pakietu w danym OS) :<\/p>\n<p>CentOS 8:<\/p>\n<p>guest.nvram.template.secure=\/usr\/share\/edk2\/ovmf\/OVMF_VARS.secboot.fd<br \/>\nguest.nvram.template.legacy=\/usr\/share\/edk2\/ovmf\/OVMF_VARS.fd<br \/>\nguest.loader.secure=\/usr\/share\/edk2\/ovmf\/OVMF_CODE.secboot.fd<br \/>\nguest.nvram.path=\/var\/lib\/libvirt\/qemu\/nvram\/<br \/>\nguest.loader.legacy=\/usr\/share\/edk2\/ovmf\/OVMF_CODE.secboot.fd<\/p>\n<p>CentOS 7:<\/p>\n<p>guest.nvram.template.secure=\/usr\/share\/edk2.git\/ovmf-x64\/OVMF_VARS-with-csm.fd<br \/>\nguest.nvram.template.legacy=\/usr\/share\/edk2.git\/ovmf-x64\/OVMF_VARS-pure-efi.fd<br \/>\nguest.loader.secure=\/usr\/share\/edk2.git\/ovmf-x64\/OVMF_CODE-with-csm.fd<br \/>\nguest.loader.legacy=\/usr\/share\/edk2.git\/ovmf-x64\/OVMF_CODE-pure-efi.fd<br \/>\nguest.nvram.path=\/var\/lib\/libvirt\/qemu\/nvram\/<\/p>\n<p align=\"justify\">\n<p align=\"justify\">W\u0142\u0105czenie wymaga restartu cloudstack-agent, sam host musi by\u0107 dodatkowo oznaczony w DB CloudStack \u017ce wspiera UEFI. Nie jest to problem dla nowych instalacji, dla starszych po migracji nale\u017cy t\u0119 flag\u0119 ustawi\u0107 r\u0119cznie w DB (na t\u0119 chwil\u0119). Bez tego spotkamy si\u0119 od razu z komunikatem: Cannot deploy to specified host as host does n&#8217;t support uefi vm deployment, returning.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/host.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"host\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/host_thumb.jpg\" alt=\"host\" width=\"936\" height=\"234\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Uruchomienie vTPM wymaga zainstalowania w systemie operacyjnym hosta pakietu swtpm swtpm-tools. Nie wymaga on dodatkowej konfiguracji, do VM dodajemy TPM dok\u0142adnie tak jak to robili\u015bmy w przypadku GPU, poprzez konfiguracj\u0119 XML dodan\u0105 jako ExtraConfig. Definicja urz\u0105dzenia wygl\u0105da tak:<\/p>\n<p>&lt;devices&gt;<br \/>\n&lt;tpm model=&#8217;tpm-tis&#8217;&gt;<br \/>\n&lt;backend type=&#8217;emulator&#8217; version=&#8217;2.0&#8217;\/&gt;<br \/>\n&lt;\/tpm&gt;<br \/>\n&lt;\/devices&gt;<\/p>\n<p align=\"justify\">\n<p align=\"justify\">Now\u0105 VM tworzymy standardowo, w opcjach zaawansowanych ustawiamy UEFI\/Secure, maszyny nie uruchamiamy (fajna opcja dodana w 4.15.1):<\/p>\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"vm1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/vm1_thumb.png\" alt=\"vm1\" width=\"859\" height=\"340\" border=\"0\" \/><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"vm2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/vm2_thumb.png\" alt=\"vm2\" width=\"819\" height=\"416\" border=\"0\" \/><\/p>\n<p align=\"justify\">Dodajemy w ustawieniach wirtualnej maszyny vTPM jako extraconfig (i dopiero wtedy uruchamiamy i instalujemy OS):<\/p>\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"vm5\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/vm5_thumb.jpg\" alt=\"vm5\" width=\"807\" height=\"417\" border=\"0\" \/>Poni\u017cej screen pokazuj\u0105cy \u017ce UEFI zosta\u0142o poprawnie rozpoznane przez Windows Instalator:<\/p>\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"part\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/part_thumb.jpg\" alt=\"part\" width=\"667\" height=\"253\" border=\"0\" \/>Mo\u017cemy te\u017c sprawdzi\u0107 czy tworz\u0105 si\u0119 pliki nvram:<\/p>\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"nvram\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/nvram_thumb.jpg\" alt=\"nvram\" width=\"668\" height=\"92\" border=\"0\" \/>Ostateczny rezultat wygl\u0105da tak:<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/vm6-20.png\"><span style=\"font-family: Calibri;\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"vm6\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/vm6_thumb.jpg\" alt=\"vm6\" width=\"672\" height=\"532\" border=\"0\" \/><\/span><\/a><\/p>\n<p>I na koniec bonus, jak doda\u0107 do KVM\/VM (CloudStack) urz\u0105dzenia USB? Odpowied\u017a jest prosta, tak jak ka\u017cde inne, po jego wcze\u015bniejszym zidentyfikowaniu. Na poni\u017cszym przyk\u0142adzie dodam kabel USB&lt;\u2014&gt;Serial do mojej VM pe\u0142ni\u0105cej rol\u0119 administracyjn\u0105. Szukamy urz\u0105dzenia poleceniem lsusb \u2013v :<\/p>\n<div align=\"justify\">\n<p align=\"justify\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-3852\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/usb1.jpg\" alt=\"\" width=\"1024\" height=\"391\" srcset=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/usb1.jpg 1024w, https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/usb1-300x115.jpg 300w, https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/usb1-768x293.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Nast\u0119pnie preparujemy plik XML i dodajemy go do VM jako extraconfig:<\/p>\n<p>&lt;devices&gt;<br \/>\n&lt;hostdev mode=&#8217;subsystem&#8217; type=&#8217;usb&#8217; managed=&#8217;yes&#8217;&gt;<br \/>\n&lt;source&gt;<br \/>\n&lt;vendor id=&#8217;0x0403&#8217;\/&gt;<br \/>\n&lt;product id=&#8217;0x6001&#8217;\/&gt;<br \/>\n&lt;\/source&gt;<br \/>\n&lt;\/hostdev&gt;<br \/>\n&lt;\/device&gt;<\/p>\n<p align=\"justify\">Uruchamiamy VM i sprawdzamy rezultat, w tym wypadku kable USB&lt;\u2014&gt;Serial dodaje si\u0119 jako wirtualny port COM3:<code><span style=\"font-family: Calibri;\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"usb2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/08\/usb2_thumb.jpg\" alt=\"usb2\" width=\"735\" height=\"603\" border=\"0\" \/><\/span><\/code><\/p>\n<p align=\"justify\"><code><code><span style=\"font-family: Calibri;\">\u00a0<\/span><\/code><\/code><\/p>\n<\/div>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>Wirtualizacja dostarcza wszelkich mo\u017cliwych narz\u0119dzi wspomagaj\u0105cych uruchamianie system\u00f3w operacyjnych ze szczeg\u00f3lnymi wymaganiami. Jednym z takich wymaga\u0144 jest zapewnienie mo\u017cliwego bezpiecze\u0144stwa poprzez zastosowanie TPM i UEFI z uruchomieniem typu Secure Boot. Tego typu start systemu gwarantuje, \u017ce nic nie zosta\u0142o zmodyfikowane &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=3856\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","footnotes":""},"categories":[6,45],"tags":[116,108,151,158,122,155,157,135,156],"class_list":["post-3856","post","type-post","status-publish","format-standard","hentry","category-lab","category-poradniki","tag-cloudstack","tag-kvm","tag-qemu","tag-serial","tag-tpm-2-0","tag-uefi","tag-usb","tag-vbs","tag-vtpm"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":0,"sum_votes":0},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3856"}],"collection":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3856"}],"version-history":[{"count":21,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3856\/revisions"}],"predecessor-version":[{"id":3896,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3856\/revisions\/3896"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}