Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sandboxes: Make /tmp writable to restore POSIX compliancy #5634

Merged
merged 2 commits into from
Sep 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions master_changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ users)
## Format upgrade

## Sandbox
* Make /tmp writable again to restore POSIX compliancy [#5634 @kit-ty-kate - fixes #5462]

## VCS

Expand Down
9 changes: 8 additions & 1 deletion src/state/shellscripts/bwrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ fi
ARGS=(--unshare-net --new-session --die-with-parent)
ARGS=("${ARGS[@]}" --proc /proc --dev /dev)
ARGS=("${ARGS[@]}" --setenv TMPDIR /opam-tmp --setenv TMP /opam-tmp --setenv TEMPDIR /opam-tmp --setenv TEMP /opam-tmp)
ARGS=("${ARGS[@]}" --bind /tmp /tmp)
ARGS=("${ARGS[@]}" --tmpfs /opam-tmp)
ARGS=("${ARGS[@]}" --tmpfs /run)
# NOTE: When adding a new mount-point please sync with the loop below to avoid overriding the mount point
Expand Down Expand Up @@ -62,7 +63,7 @@ add_sys_mounts() {
# See https://github.com/containers/bubblewrap/issues/413
for dir in /*; do
case "$dir" in
"/proc" | "/dev" | "/run" | "/opam-tmp") ;;
"/proc" | "/dev" | "/run" | "/tmp" | "/opam-tmp") ;;
"/sys") ;; # Disabled without a corresponding bind, due to security concerns
*) add_sys_mounts "$dir";;
esac
Expand Down Expand Up @@ -98,6 +99,12 @@ add_dune_cache_mount() {
mount_linked_cache "$dune_cache"
}

# In case OPAMROOT happens to be in one of the writeable directories we
# need to make sure it is read-only
if [ -n ${OPAMROOT+x} ]; then
add_mounts ro "$OPAMROOT"
fi

# When using opam variable that must be defined at action time, add them also
# at init check in OpamAuxCommands.check_and_revert_sandboxing (like
# OPAM_SWITCH_PREFIX).
Expand Down
7 changes: 7 additions & 0 deletions src/state/shellscripts/sandbox_exec.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ set -ue
POL='(version 1)(allow default)(deny network*)(deny file-write*)'
POL="$POL"'(allow network* (remote unix))'
POL="$POL"'(allow file-write* (literal "/dev/null") (literal "/dev/dtracehelper"))'
POL="$POL"'(allow file-write* (regex #"^(/private)?(/var)?/tmp/"))'

add_mounts() {
if [ -d "$2" ]; then
Expand Down Expand Up @@ -55,6 +56,12 @@ add_dune_cache_mount() {
add_mounts rw "$dune_cache"
}

# In case OPAMROOT happens to be in one of the writeable directories we
# need to make sure it is read-only
if [ -n ${OPAMROOT+x} ]; then
add_mounts ro "$OPAMROOT"
fi

# When using opam variable that must be defined at action time, add them also
# at init check in OpamAuxCommands.check_and_revert_sandboxing (like
# OPAM_SWITCH_PREFIX).
Expand Down