nixos/tcsd: several improvements and fixes
- Actually run tcsd as tss/tss - Install a udev rule to set /dev/tpm* permissions - Remove systemd-udev-settle dependency, use dev-tpm0.device instead - Use systemd-tmpfiles to set up the state directory - Add documentation URI to tcsd.service This module cannot be easily tested with a NixOS test due to the TPM dependency. Technically, one could be emulated using swtpm[1], but this is not packaged in Nixpkgs. If you computer has a real TPM you can do a passthrough in Qemu, but this requires running the VM as root and of course it's not determinstic: $ nix build -f nixos vm --arg configuration ' { virtualisation.qemu.options = [ "-tpmdev passthrough,id=tpm0,path=/dev/tpm0,cancel-path=/sys/class/tpm/tpm0/cancel" "-device tpm-tis,tpmdev=tpm0" ]; users.users.root.hashedPassword = ""; services.tcsd.enable = true; }' After starting the VM, log in as root, you can check the service has started with `systemctl status tcsd`. [1]: https://github.com/stefanberger/swtpm
This commit is contained in:
parent
0c98cef613
commit
538312709e
@ -119,22 +119,31 @@ in
|
|||||||
|
|
||||||
environment.systemPackages = [ pkgs.trousers ];
|
environment.systemPackages = [ pkgs.trousers ];
|
||||||
|
|
||||||
# system.activationScripts.tcsd =
|
services.udev.extraRules = ''
|
||||||
# ''
|
# Give tcsd ownership of all TPM devices
|
||||||
# chown ${cfg.user}:${cfg.group} ${tcsdConf}
|
KERNEL=="tpm[0-9]*", MODE="0660", OWNER="${cfg.user}", GROUP="${cfg.group}"
|
||||||
# '';
|
# Tag TPM devices to create a .device unit for tcsd to depend on
|
||||||
|
ACTION=="add", KERNEL=="tpm[0-9]*", TAG+="systemd"
|
||||||
|
'';
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
# Initialise the state directory
|
||||||
|
"d ${cfg.stateDir} 0770 ${cfg.user} ${cfg.group} - -"
|
||||||
|
];
|
||||||
|
|
||||||
systemd.services.tcsd = {
|
systemd.services.tcsd = {
|
||||||
description = "TCSD";
|
description = "Manager for Trusted Computing resources";
|
||||||
after = [ "systemd-udev-settle.service" ];
|
documentation = [ "man:tcsd(8)" ];
|
||||||
|
|
||||||
|
requires = [ "dev-tpm0.device" ];
|
||||||
|
after = [ "dev-tpm0.device" ];
|
||||||
wantedBy = [ "multi-user.target" ];
|
wantedBy = [ "multi-user.target" ];
|
||||||
path = [ pkgs.trousers ];
|
|
||||||
preStart =
|
serviceConfig = {
|
||||||
''
|
User = cfg.user;
|
||||||
mkdir -m 0700 -p ${cfg.stateDir}
|
Group = cfg.group;
|
||||||
chown -R ${cfg.user}:${cfg.group} ${cfg.stateDir}
|
ExecStart = "${pkgs.trousers}/sbin/tcsd -f -c ${tcsdConf}";
|
||||||
'';
|
};
|
||||||
serviceConfig.ExecStart = "${pkgs.trousers}/sbin/tcsd -f -c ${tcsdConf}";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
users.users = optionalAttrs (cfg.user == "tss") {
|
users.users = optionalAttrs (cfg.user == "tss") {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user