[Pkg-shadow-devel] Bug#1126595: dbus-system-bus-common: fatal: The user `messagebus' already exists and has a password
Simon McVittie
smcv at debian.org
Thu Jan 29 17:11:06 GMT 2026
Control: reassign -1 adduser 3.154
Control: affects -1 + dbus-system-bus-common
For the adduser maintainers, the minimal steps to reproduce this issue
in an expendable chroot/container/thing are:
# apt update && apt upgrade
# apt install adduser
# adduser --system _star
# adduser --system _bang
# adduser --system _bangstar
# echo '_star:*' | chpasswd -e
# echo '_bang:!' | chpasswd -e
# echo '_bangstar:!*' | chpasswd -e
# adduser --system _bang
# adduser --system _star
# adduser --system _bangstar
Expected result: all commands succeed, as they did (I think) in trixie.
Actual result: on sid, the last `adduser --system _bangstar` (after
setting the password) fails with the same error message shown in the
subject line.
Alternative steps to get to the same error, which I think are a closer
match for what actually happened on Santiago's systems, are to do this
in a chroot/container/thing that does not already have a _bangstar user:
# apt update && apt upgrade
# apt install adduser systemd-standalone-sysusers
# systemd-sysusers - <<EOF
u _bangstar
EOF
# adduser --system _bangstar
although in some versions of systemd you might have to use
u! _bangstar
as input to get the same result.
On Thu, 29 Jan 2026 at 16:33:11 +0100, Santiago Vila wrote:
>- It is correct or incorrect for trixie images to have "!*" in the
>messagebus user?
I am not an expert on the finer points of shadow(5), but I think "!*" is
at least as correct as "!", and possibly more so.
According to shadow(5), an encrypted-password field starting with "!"
indicates a user whose account is locked, and everything after the "!"
is what their encrypted password was before the account was locked.
Meanwhile "*" is not a valid result of crypt(3), meaning that "*"
indicates a user who cannot authenticate using a password (but they
might be able to authenticate with non-password mechanisms like ssh
public keys).
Combining the two, "!*" ought to mean that messagebus's account is
locked, *and* even if it wasn't locked, messagebus would still not be
able to authenticate using a password. This seems like what we want for
the system uids that exist to run daemons, like messagebus.
Meanwhile "!" indicates a user whose account is locked, but if it was
somehow unlocked for whatever reason, they would be able to log in (for
example via getty/login) by using a blank password, or perhaps without a
password prompt at all. I think we never actually want that behaviour
for system users like messagebus.
In newer versions of systemd and sysusers.d(5), a line starting with "u
messagebus" would create a user with encrypted password "*", but a line
starting with "u! messagebus" would create a user with encrypted
password "!*". With my dbus upstream hat on, I've had a merge request
to change its sysusers.d snippet to use "u!", which seems like a
positive change: you shouldn't be able to log in as messagebus, under
any circumstances.
However, it seems that this behaviour has evolved over time: in some
versions of systemd, including trixie and sid, plain "u" creates a
locked account with encrypted password "!*".
>- It is correct or incorrect for adduser/useradd to say that the user
>has a password when it has "!*"?
My reading of shadow(5) is that it's incorrect, because neither "!*" nor
"*" is a possible output of crypt(3), therefore neither can be said to
be a password. But I could be wrong, I'm not an expert.
On Thu, 29 Jan 2026 at 16:01:17 +0100, Santiago Vila wrote:
>[Is it] a bug in trixie that [messagebus] user has a UID like 996?
No, these are dynamically-allocated uids in the 100-999 range and any
uid in that range is as good as any other.
Typically uids close to the low end (like my 108) indicate that the
account was created with adduser, and the high end (like your 990 or
996) indicates that the account was created with systemd-sysusers.
>[Is it] a bug in schroot at all that it copies some files via the
>nssdatabases mechanism?
Yes and no. It's schroot working as designed, but for the use-case where
you are using sbuild to get a clean, predictable, reproducible
environment for doing builds, it could be argued that it's a bug in
sbuild and it shouldn't be letting this implementation detail of the
host leak into the chroot/container. The unshare backend is the
solution for this maybe-bug.
smcv
More information about the Pkg-shadow-devel
mailing list