Merge pull request #12323 from atoslins/fix-windows-vm-setgid
Clear setgid when hardening Windows VM directories
This commit is contained in:
3 files changed
+34
-2
No files matched your search
@@ -143,6 +143,33 @@ chown root:root "$USERS_DIR"
|
||||
mounts_ready || fail "restored production boundaries were rejected"
|
||||
pass "root rejects wrong-owned and group-writable production mount boundaries without mutation"
|
||||
|
||||
# dockur marks an empty /shared setgid (chmod 2777) on first boot, and a numeric
|
||||
# chmod keeps setuid/setgid on directories. Hardening has to clear the special
|
||||
# bits behind live anchors and again when the binds are recreated after reboot.
|
||||
chmod 2777 /home/shared-target
|
||||
chmod 6755 /home/storage-target
|
||||
with_vm_lock prepare_caller_mounts || fail "root rejected setgid sources behind live anchors"
|
||||
mounts_ready || fail "final guard rejected re-hardened setgid sources"
|
||||
umount "$EXPECTED_SHARED"
|
||||
umount "$EXPECTED_STORAGE"
|
||||
chmod 2777 /home/shared-target
|
||||
chmod 6755 /home/storage-target
|
||||
with_vm_lock prepare_caller_mounts || fail "root could not rebind setgid sources"
|
||||
[[ $(command stat -Lc '%u:%a' "$EXPECTED_STORAGE") == 1000:700 &&
|
||||
$(command stat -Lc '%u:%a' "$EXPECTED_SHARED") == 1000:700 ]] || fail "setgid sources were not hardened to 0700"
|
||||
mounts_ready || fail "final guard rejected rebound setgid sources"
|
||||
pass "hardening clears the setuid/setgid bits a numeric chmod keeps on directories"
|
||||
|
||||
# When hardening still leaves a source non-private, the rejection names the
|
||||
# directory and its mode instead of failing silently.
|
||||
chmod() { command chmod "$@" && command chmod g+s /home/shared-target; }
|
||||
hardening_error=$(with_vm_lock prepare_caller_mounts 2>&1) && fail "root accepted a source that stayed setgid after hardening"
|
||||
unset -f chmod
|
||||
[[ $hardening_error == *"/home/alice/Windows is mode 2700"* ]] || fail "setgid rejection did not name the directory and mode: $hardening_error"
|
||||
chmod g-s /home/shared-target
|
||||
mounts_ready || fail "verified anchors were disturbed by the rejected hardening"
|
||||
pass "a source that cannot be made private is rejected with its path and mode"
|
||||
|
||||
expected_space=$(command df -P -- /home/storage-target | awk 'NR==2 {print int($4/1024/1024)}')
|
||||
actual_space=$(available_storage_gb)
|
||||
[[ $actual_space == "$expected_space" ]] || fail "disk-space helper did not measure the storage target filesystem"
|
||||
|
||||
Reference in new issue
Block a user