[libvirt] [PATCH 2/6] tpm: Add support for external swtpm TPM emulator
Stefan Berger
stefanb at linux.vnet.ibm.com
Fri Apr 6 14:02:51 UTC 2018
On 04/06/2018 07:23 AM, Stefan Berger wrote:
> On 04/06/2018 04:26 AM, Daniel P. Berrangé wrote:
>> On Thu, Apr 05, 2018 at 05:56:02PM -0400, Stefan Berger wrote:
>>> This patch adds support for an external swtpm TPM emulator. The XML for
>>> this type of TPM looks as follows:
>>>
>>> <tpm model='tpm-tis'>
>>> <backend type='emulator'/>
>>> </tpm>
>>>
>>> The XML will currently only start a TPM 1.2.
>>>
>>> Upon the first start, libvirt will run `swtpm_setup`, which will
>>> simulate the
>>> manufacturing of a TPM and create certificates for it and write them
>>> into the
>>> NVRAM location of the emulated TPM.
>>>
>>> Then, libvirt will automatically start the swtpm TPM emulator using
>>> the `swtpm`
>>> executable.
>>>
>>> Once the VM terminates, libvirt uses the swtpm_ioctl executable to
>>> gracefully
>>> shut down the `swtpm` in case it is still running (QEMU did not send
>>> shutdown)
>>> or clean up the socket file.
>>>
>>> The above mentioned executables must be found in the PATH.
>>>
>>> The executables can either be run as root or started as root and
>>> switch to
>>> the tss user. The requirement for the tss user comes through 'tcsd',
>>> which
>>> is used for the simulation of the manufacturing. Which user is used
>>> can be
>>> configured through qemu.conf.
>>>
>>> The swtpm writes out state into files. The state is kept in
>>> /var/lib/libvirt/tpm:
>>>
>>> [root at localhost libvirt]# ls -lZ | grep tpm
>>>
>>> drwx--x--x. 7 root root unconfined_u:object_r:virt_var_lib_t:s0 4096
>>> Apr 5 16:22 tpm
>>>
>>> The directory /var/lib/libvirt/tpm maintains per-TPM state
>>> directories but
>>> also hosts the UnixIO socket of running swtpms, which QEMU uses for
>>> communicating
>>> with them. At this point only the socket file is labeled properly
>>> and made accessible
>>> for QEMU, which runs under the qemu user:
>> /var/lib is for persistent state while /var/run is for transient
>> state, so I think sockets should be under /var/run instead.
>
> /var/run/libvirt/qemu then ?
I now moved it into this neighborhood, which seems good due to the
existing permissions:
# ls -lZ domain-1-testvm/
total 4
-rw-------. 1 qemu qemu system_u:object_r:svirt_image_t:s0:c40,c612 32
Apr 6 09:55 master-key.aes
srwxrwxr-x. 1 qemu qemu system_u:object_r:svirt_image_t:s0:c40,c612 0
Apr 6 09:55 monitor.sock
srw-------. 1 qemu qemu system_u:object_r:svirt_image_t:s0:c40,c612 0
Apr 6 09:55 swtpm.sock
Stefan
More information about the libvir-list
mailing list