On Wed, Apr 16, 2025 at 6:51 AM Andrea Cocito <and...@cocito.eu> wrote:

> Hello,
>
> I am fixing a few things in the security/tpm2-* ports, among other
> problems security/tpm2-abrmd does not seem to handle properly the
> permissions of /dev/tpm0.
>
> At boot /dev/tpm0 is owned by root:weel and mode 0600; the port tpm2-abrmd
> needs it to be at worst root:_tss and mode 0660, it tries to handle this by
> installing a dedicated /usr/local/etc/devd/tpm2-abrmd-devd.conf; besides
> the fact that the rules in the provided tpm2-abrmd-devd.conf are broken,
> this cannot work even in principle: tpm0 device is not loaded dynamically
> (it’s not an USB pen!) and devd does not receive any notification, because
> when the device is loaded (at kernel boot time) devd isn’t even running yet.
>
> The only options I see are:
> 1. Change the owner and permissions in the driver itself; but, while
> changing the permissions is fine, hardcoding a non-system gid (_tss=601) in
> a kernel driver does not look like a great idea to me.
> 2. Have the port change /etc/devfs.conf when installed; but I do not know
> of a “clean” way to do it
> 3. Change the port so that user _tss is also member of wheel, and change
> the driver so that the device is root:wheel mode 0660; but I see this as a
> security issue
>
> So my questions are:
> A: Does anyone see any other option besides the ones listed above?
> B: What is the clean way to edit /etc/devfs.conf when installing a port ?
>
> About question “B”, it could be easily done in the "post-install” target
> (or maybe done with “@postexec” and cleaned up with “@preunexec” in the
> plist?), but the Porter's Handbook strongly discourages using this target
> for anything besides changing files that the port itself installed; I have
> googled and dinged into the documentation and could not find any clue.
>
> Looking at existing ports almost all of them end up with a note to the
> user in post-installation messages: “Please add the following lines to
> /etc/devfs.conf”; as it is not a change subject to administrator’s
> discretion, and all tpm2-* stuff simply does not work without this change,
> I do not think this is the best option.
>
> Any suggestion?
>
> Thanks,
>
> A.
>

Wouldn't this be done via the devfs rules infrastructure, which is used for
adding/removing/updating devfs entries at runtime?  Isn't devfs.conf only
used at boot time for system-related entries?

Drop a rules file into /usr/local/etc/devfs/ or /usr/local/etc/tpm2/ or
wherever the port uses for configuration info, then drop a config file into
/usr/local/etc/rc.d/ that configures devfs_rulesets to append your rule
file (or maybe do that via sysrc?). Then reload the devfs rules via
/etc/rc.d/devfs.

I remember having to do something similar a long, long, long time ago, but
haven't done anything with FreeBSD ports development in a good 10 years
now, so things may be different now. But this looks like the whole reason
for the devfs rules infrastructure.

man -k devfs
grep devfs /etc/defaults/rc.conf


-- 
Freddie Cash
fjwc...@gmail.com

Reply via email to