Port unshare user/mount namespace support from uruntime #137
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Implements automatic fallback to user+mount namespaces when SUID fusermount is unavailable, based on uruntime's implementation.
Changes
Core namespace handling
try_unshare()- Creates CLONE_NEWUSER | CLONE_NEWNS with configurable UID/GID mappingrestore_capabilities()- Restores capabilities via capget/capset syscalls after namespace entrytry_make_mount_private()- Applies MS_REC | MS_PRIVATE to prevent mount leaksis_in_user_and_mount_namespace()- Detects existing namespace via /proc/self/uid_map parsingFUSE availability enhancement
check_fuse()- Attempts unshare when SUID fusermount detection failsis_suid_exe()- Validates setuid bit + owner root for fusermount binariesUser interface
Implementation notes
__user_cap_header_struct,__user_cap_data_struct)check_fuse()even when both SUID and unshare fail to allow non-SUID fusermount attemptsOriginal prompt
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.