core: add id-mapped mount support for Exec directories
This commit is contained in:
@@ -162,6 +162,71 @@ EOF
|
||||
systemctl start testservice-34-check-writable.service
|
||||
}
|
||||
|
||||
test_check_idmapped_mounts() {
|
||||
rm -rf /var/lib/testidmapped /var/lib/private/testidmapped
|
||||
|
||||
cat >/run/systemd/system/testservice-34-check-idmapped.service <<\EOF
|
||||
[Unit]
|
||||
Description=Check id-mapped directories when DynamicUser=yes with StateDirectory
|
||||
|
||||
[Service]
|
||||
# Relevant only for sanitizer runs
|
||||
EnvironmentFile=-/usr/lib/systemd/systemd-asan-env
|
||||
Type=oneshot
|
||||
|
||||
MountAPIVFS=yes
|
||||
DynamicUser=yes
|
||||
PrivateUsers=yes
|
||||
TemporaryFileSystem=/run /var/opt /var/lib /vol
|
||||
UMask=0000
|
||||
StateDirectory=testidmapped:sampleservice
|
||||
ExecStart=/bin/bash -c ' \
|
||||
set -eux; \
|
||||
set -o pipefail; \
|
||||
touch /var/lib/sampleservice/testfile; \
|
||||
[[ $(awk "NR==2 {print \$1}" /proc/self/uid_map) == $(stat -c "%%u" /var/lib/private/testidmapped/testfile) ]]; \
|
||||
'
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl start testservice-34-check-idmapped.service
|
||||
|
||||
[[ $(stat -c "%u" /var/lib/private/testidmapped/testfile) == 65534 ]]
|
||||
}
|
||||
|
||||
test_check_idmapped_mounts_root() {
|
||||
rm -rf /var/lib/testidmapped /var/lib/private/testidmapped
|
||||
|
||||
cat >/run/systemd/system/testservice-34-check-idmapped.service <<\EOF
|
||||
[Unit]
|
||||
Description=Check id-mapped directories when DynamicUser=no with StateDirectory
|
||||
|
||||
[Service]
|
||||
# Relevant only for sanitizer runs
|
||||
EnvironmentFile=-/usr/lib/systemd/systemd-asan-env
|
||||
Type=oneshot
|
||||
|
||||
MountAPIVFS=yes
|
||||
User=root
|
||||
DynamicUser=no
|
||||
PrivateUsers=no
|
||||
TemporaryFileSystem=/run /var/opt /var/lib /vol
|
||||
UMask=0000
|
||||
StateDirectory=testidmapped:sampleservice
|
||||
ExecStart=/bin/bash -c ' \
|
||||
set -eux; \
|
||||
set -o pipefail; \
|
||||
touch /var/lib/sampleservice/testfile; \
|
||||
[[ 0 == $(stat -c "%%u" /var/lib/testidmapped/testfile) ]]; \
|
||||
'
|
||||
EOF
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl start testservice-34-check-idmapped.service
|
||||
|
||||
[[ $(stat -c "%u" /var/lib/testidmapped/testfile) == 0 ]]
|
||||
}
|
||||
|
||||
test_directory "StateDirectory" "/var/lib"
|
||||
test_directory "RuntimeDirectory" "/run"
|
||||
test_directory "CacheDirectory" "/var/cache"
|
||||
@@ -169,6 +234,11 @@ test_directory "LogsDirectory" "/var/log"
|
||||
|
||||
test_check_writable
|
||||
|
||||
if systemd-analyze compare-versions "$(uname -r)" ge 5.12; then
|
||||
test_check_idmapped_mounts
|
||||
test_check_idmapped_mounts_root
|
||||
fi
|
||||
|
||||
systemd-analyze log-level info
|
||||
|
||||
touch /testok
|
||||
|
||||
Reference in New Issue
Block a user