Bug#1137429: systemd: Changes permissions of root directory from 0755 to 0555
Simon McVittie
smcv at debian.org
Sat May 23 19:43:55 BST 2026
Package: systemd
Version: 261~rc1-1
Severity: normal
X-Debbugs-Cc: piuparts at packages.debian.org, base-files at packages.debian.org
Tags: upstream
Control: affects -1 + piuparts base-files
Since 261~rc1, the systemd package contains a tmpfiles.d(5) snippet
/usr/lib/tmpfiles.d/root.conf which sets the permissions of the root
directory to 0555. This appears to have been added in
https://github.com/systemd/systemd/pull/41431 upstream, originally as a
way to make the system bootable if the root filesystem was mistakenly
bootstrapped, untarred etc. onto an existing filesystem that was created
with overly-restrictive permissions like 0700. (Conversely, it would
also be helpful if the filesystem had started with overly-broad
permissions like 02775, which should be tightened.)
According to comments on the PR, upstream intentionally chose to use
0555 rather than 0755, as a preemptive hardening mechanism so that if
code is running as uid 0 with no CAP_DAC_OVERRIDE, it can't write the
root directory (although this likely only provides any hardening in
practice if all root-owned files are on read-only filesystem mounts,
otherwise root-without-caps can just elevate privileges to
root-with-caps by overwriting an executable that root-with-caps will
run, such as systemd itself).
This all seems like entirely reasonable reasoning, but it has the effect
of changing the permissions of the root directory of existing Debian
installations, typically from 0755 to 0555, which is not necessarily
expected. It also leads to piuparts complaining about / having changed
whenever the systemd package is installed and subsequently purged, for
example while testing dbus-system-bus-common, which is how I found this.
If we want the root filesystem of Debian systems to be canonically 0555
rather than 0755, that seems like something that should be coordinated
with base-files and maybe debootstrap/mmdebstrap/cdebootstrap, so that
it will be true for all machines/containers/chroots and not just those
that have the systemd package? (I'm not sure which component actually
chooses the permissions of the root filesystem during bootstrapping -
base-files, or the specific bootstrapper implementation that was used.)
Or if this change wasn't intended or isn't desired, the systemd package
could either not install root.conf, or mask it with an empty
/etc/tmpfiles.d/root.conf.
smcv
More information about the Pkg-systemd-maintainers
mailing list