There is an open systemd
issue about that: ProtectSystem=strict shouldn't take precedence over TemporaryFileSystem=/ · Issue #18999 · systemd/systemd · GitHub
AFAIU, the problem stems from using ProtectSystem=
with:
RootDirectory = "/var/empty";
TemporaryFileSystem=/
However, thinking about it in some modules (tor
, biboumi
, croc
, sourcehut
, freeciv
, transmission
, public-inbox
) I’ve been using ProtectSystem=
/DynamicUser=
without problem with this setup:
RuntimeDirectory = ["some-service/root"];
RootDirectory = "/run/some-service/root";
InaccessiblePaths = ["-+/run/some-service/root"];
AFAIU the InaccessiblePaths=
is not necessary, it’s just cleaner to not have the root directory mounted twice inside the chroot (at /
and /run/some-service/root
).
I’ve not given it much thoughts, but maybe systemd-confinement
could use a similar setup using something like:
let rootDir = "/run/systemd-confinement/${mkPathSafeName name}"; in {
RuntimeDirectory = [(removePrefix "/run/" rootDir)];
RootDirectory = rootDir;
InaccessiblePaths = ["-+${rootDir}"];
}
Ping @aszlig