Systemd has a nice feature that is private temporary directory (/tmp
). But it is not clear from the dense manual what are the correct ways to use it and implementation gotchas (get the feeling the manual is more a spec for devs and contributors)
Enabling this setting has the side effect of adding
Requires=
and After= dependencies on all mount units necessary to access /tmp and /var/tmp.
From https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PrivateTmp=
This is a little cryptic for non-systemd-insiders. I am assuming my filesystem, which for simplicity sake let's say I only have /
, will receive a Requires=
, guess it is left as an exercise to figure out what it will require… maybe I should put the homework tag here? :)
Starting on here.
But that doesn't sound right. It says that Requires=
on mount units are only for hierarchy. I guess.
Let's move on to this.
But this also does not explain anything. It only says that one unit may require another. I guess.
I'm (wildly) guessing it uses this. So in my example, the systemd unit mount for /
will have a Requires=[BindPaths=[/tmp/systemd-noise,/tmp]]
or however one writes that in systemd-speak?
Let's ask systemd:
# systemctl show httpd
...
Requires=system.slice sysinit.target -.mount tmp.mount
...
RequiresMountsFor=/tmp /var/tmp
Not very helpful either.
I'm trying to wrap my head, mostly on:
How exactly systemd denies access to the actual
/tmp
on the filesystem. AndHow the process (let's say a CGI running from a systemd started Apache) can figure out where the
/tmp
it has access to is at?