Additions to nsresourced and vmspawn required for making use of the foreign UID range in mkosi (#40415)
This commit is contained in:
@@ -60,6 +60,63 @@ if (SYSTEMD_LOG_TARGET=console varlinkctl call \
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Test delegated UID ranges
|
||||
# Verify that delegated ranges show up in uid_map (6 lines: 1 primary + 2 container ranges + 3 dynamic users)
|
||||
test "$(run0 -u testuser --pipe unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-delegate","size":65536,"userNamespaceFileDescriptor":0,"delegateContainerRanges":2}' \
|
||||
-- cat /proc/self/uid_map | wc -l)" -eq 3
|
||||
|
||||
# Test that delegateContainerRanges > 16 fails with TooManyDelegations error
|
||||
(! run0 -u testuser --pipe unshare --user varlinkctl call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-fail","size":65536,"userNamespaceFileDescriptor":0,"delegateContainerRanges":17}') |&
|
||||
grep "io.systemd.NamespaceResource.TooManyDelegations" >/dev/null
|
||||
|
||||
# Test self mapping
|
||||
# Verify that self mapping maps the peer UID to root (uid_map should show "0 <peer_uid> 1")
|
||||
test "$(run0 -u testuser --pipe unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-id","target":0,"size":1,"userNamespaceFileDescriptor":0,"type":"self"}' \
|
||||
-- cat /proc/self/uid_map | awk '{print $1, $3}')" = "0 1"
|
||||
|
||||
# Test nested delegation with self mapping
|
||||
test "$(run0 -u testuser --pipe unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-delegate2","type":"self","size":1,"userNamespaceFileDescriptor":0,"delegateContainerRanges":3}' \
|
||||
-- unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-delegate3","size":65536,"userNamespaceFileDescriptor":0,"delegateContainerRanges":2}' \
|
||||
-- cat /proc/self/uid_map | wc -l)" -eq 3
|
||||
|
||||
# Test mapForeign parameter
|
||||
# Verify that the foreign UID range is mapped into the user namespace
|
||||
# When mapForeign is true, uid_map should have 2 lines: primary range + foreign range
|
||||
test "$(run0 -u testuser --pipe unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-foreign","size":65536,"userNamespaceFileDescriptor":0,"mapForeign":true}' \
|
||||
-- cat /proc/self/uid_map | wc -l)" -eq 2
|
||||
|
||||
# Verify the foreign range is mapped 1:1.
|
||||
test "$(run0 -u testuser --pipe unshare --user varlinkctl --exec call \
|
||||
--push-fd=/proc/self/ns/user \
|
||||
/run/systemd/userdb/io.systemd.NamespaceResource \
|
||||
io.systemd.NamespaceResource.AllocateUserRange \
|
||||
'{"name":"test-foreign2","size":65536,"userNamespaceFileDescriptor":0,"mapForeign":true}' \
|
||||
-- cat /proc/self/uid_map | grep -c 2147352576)" -eq 1
|
||||
|
||||
# This should work without the key
|
||||
systemd-dissect --image-policy='root=verity:=absent+unused' --mtree /var/tmp/unpriv.raw >/dev/null
|
||||
systemd-dissect --image-policy='root=verity+signed:=absent+unused' --mtree /var/tmp/unpriv.raw >/dev/null
|
||||
|
||||
Reference in New Issue
Block a user