In systemd, whenever a disk image (DDI) implementing the DiscoverablePartitionsSpecification[1] is
activated, a policy may be specified controlling which partitions to mount and what kind of cryptographic
protection to require. Such a disk image dissection policy is a string that contains per-partition-type
rules, separated by colons (":"). The individual rules consist of a partition identifier, an equal sign
("="), and one or more flags which may be set per partition. If multiple flags are specified per
partition they are separated by a plus sign ("+").
The partition identifiers currently defined are: root, usr, home, srv, esp, xbootldr, swap, root-verity,
root-verity-sig, usr-verity, usr-verity-sig, tmp, var. These identifiers match the relevant partition
types in the Discoverable Partitions Specification, but are agnostic to CPU architectures. If the
partition identifier is left empty it defines the default policy for partitions defined in the
Discoverable Partitions Specification for which no policy flags are explicitly listed in the policy
string.
The following partition policy flags are defined that dictate the existence/absence, the use, and the
protection level of partitions:
• unprotected for partitions that shall exist and be used, but shall come without cryptographic
protection, lacking both Verity authentication and LUKS encryption.
• verity for partitions that shall exist and be used, with Verity authentication. (Note: if a DDI image
carries a data partition, along with a Verity partition and a signature partition for it, and only
the verity flag is set (signed is not), then the image will be set up with Verity, but the signature
data will not be used. Or in other words: any DDI with a set of partitions that qualify for signature
also implicitly qualifies for verity, and in fact also unprotected).
• signed for partitions that shall exist and be used, with Verity authentication, which are also
accompanied by a PKCS#7 signature of the Verity root hash.
• encrypted for partitions which shall exist and be used and are encrypted with LUKS.
• unused for partitions that shall exist but shall not be used.
• absent for partitions that shall not exist on the image.
By setting a combination of the flags above, alternatives can be declared. For example the combination
"unused+absent" means: the partition may exist (in which case it shall not be used) or may be absent. The
combination of "unprotected+verity+signed+encrypted+unused+absent" may be specified via the special
shortcut "open", and indicates that the partition may exist or may be absent, but if it exists is used,
regardless of the protection level.
As special rule: if none of the flags above are set for a listed partition identifier, the default policy
of open is implied, i.e. setting none of these flags listed above means effectively all flags listed
above will be set.
The following partition policy flags are defined that dictate the state of specific GPT partition flags:
• read-only-off, read-only-on to require that the partitions have the read-only partition flag off or
on.
• growfs-off, growfs-on to require that the partitions have the growfs partition flag off or on.
If both read-only-off and read-only-on are set for a partition, then the state of the read-only flag on
the partition is not dictated by the policy. Setting neither flag is equivalent to setting both, i.e.
setting neither of these two flags means effectively both will be set. A similar logic applies to
growfs-off/growfs-on.
If partitions are not listed within an image policy string, the default policy flags are applied
(configurable via an empty partition identifier, see above). If no default policy flags are configured in
the policy string, it is implied to be "absent+unused", except for the Verity partition and their
signature partitions where the policy is automatically derived from minimal protection level of the data
partition they protect, as encoded in the policy.