nspawn: ensure single-process container running as --user can access credentials
When starting a container with --user, the new uid will be resolved and switched to only in the inner child, at the end of the setup, by spawning getent. But the credentials are set up in the outer child, long before the user is resolvable, and the directories/files are made only readable by root and read-only, which means they cannot be changed later and made visible to the user. When this particular combination is specified, it is obvious the caller wants the single-process container to be able to use credentials, so make them world readable only in that specific case. Fixes https://github.com/systemd/systemd/issues/31794
This commit is contained in:
committed by
Luca Boccassi
parent
825dc2f32e
commit
edd3d4d7c2
@@ -271,6 +271,13 @@ EOF
|
||||
--load-credential=cred.path:/tmp/cred.path \
|
||||
--set-credential="cred.set:hello world" \
|
||||
bash -xec '[[ "$(</run/host/credentials/cred.path)" == "foo bar" ]]; [[ "$(</run/host/credentials/cred.set)" == "hello world" ]]'
|
||||
# Combine with --user to ensure creds are still readable
|
||||
systemd-nspawn --directory="$root" \
|
||||
--user=testuser \
|
||||
--no-new-privileges=yes \
|
||||
--load-credential=cred.path:/tmp/cred.path \
|
||||
--set-credential="cred.set:hello world" \
|
||||
bash -xec '[[ "$(</run/host/credentials/cred.path)" == "foo bar" ]]; [[ "$(</run/host/credentials/cred.set)" == "hello world" ]]'
|
||||
rm -f /tmp/cred.path
|
||||
|
||||
# Assorted tests
|
||||
|
||||
Reference in New Issue
Block a user