various: try to use DEFAULT_USER_SHELL for root too
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 19 Aug 2022 14:43:45 +0000 (16:43 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Wed, 24 Aug 2022 08:02:46 +0000 (10:02 +0200)
commit8a7adccbdb23ae6fee82840ef41d17d5e568a8f2
tree43c2e7748cf432e98c640b2984385a70960db36e
parent5f465fda4ec9f1e70a1bb993944ea92b2469b0db
various: try to use DEFAULT_USER_SHELL for root too

/bin/sh as a shell is punishing. There is no good reason to make
the occasional root login unpleasant.

Since /bin/sh is usually /bin/bash in compat mode, i.e. if one is
available, the other will be too, /bin/bash is almost as good as a default.
But to avoid a regression in the situation where /bin/bash (or
DEFAULT_USER_SHELL) is not installed, we check with access() and fall back
to /bin/sh. This should make this change in behaviour less risky.

(FWIW, e.g. Fedora/RHEL use /bin/bash as default for root.)

This is a follow-up of sorts for 53350c7bbade8c5f357aa3d1029ef9b2208ea675,
which added the default-user-shell option, but most likely with the idea
of using /bin/bash less ;)

Fixes #24369.
man/systemd.unit.xml
src/basic/user-util.c
src/basic/user-util.h
src/firstboot/firstboot.c
src/nss-systemd/nss-systemd.c
src/sysusers/sysusers.c
src/test/test-user-util.c
test/test-execute/exec-specifier.service
test/test-execute/exec-specifier@.service