Skip to content

Commit

Permalink
mount_tomb: make use of ACL in a specific location
Browse files Browse the repository at this point in the history
Namely /run/media/$USER, which was introduced as a replacement for the
classic /media. Main motiviation being, that $USER_B shouldn't get
access to or information about mounted devices from $USER_A.
The mount point itself is owned by root, therefore one needs currently
to know the name of the mountpoint to change to the location.
Other tools for mounting media like udisksctl set ACL to allow the
owner to use it normally (autocompletion and such).

Fixes #461
  • Loading branch information
Narrat committed Sep 1, 2024
1 parent 0ef195d commit 69e8f34
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions tomb
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ typeset -i DECLOAKIFY=1
typeset -i RESIZER=1
typeset -i RECOLL=1
typeset -i QRENCODE=1
typeset -i ACL=1

# Default mount options
typeset MOUNTOPTS="rw,noatime,nodev"
Expand Down Expand Up @@ -896,7 +897,7 @@ function _print() {
_list_optional_tools() {
typeset -a _deps
_deps=(gettext dcfldd shred steghide)
_deps+=(resize2fs tomb-kdb-pbkdf2 argon2 qrencode recoll unoconv lsof)
_deps+=(resize2fs tomb-kdb-pbkdf2 argon2 qrencode recoll unoconv lsof setfacl)
for d in $_deps; do
_print "`which $d`"
done
Expand Down Expand Up @@ -959,6 +960,8 @@ _ensure_dependencies() {
command -v recoll 1>/dev/null 2>/dev/null || RECOLL=0
# Check for QREncode for paper backups of keys
command -v qrencode 1>/dev/null 2>/dev/null || QRENCODE=0
# Check for acl/setfacl for setting ACL at the mount location
command -v setfacl 1>/dev/null 2>/dev/null || ACL=0
}

# }}} - Commandline interaction
Expand Down Expand Up @@ -2288,8 +2291,11 @@ mount_tomb() {
tombmount="$2"
[[ -z "$tombmount" ]] && {
tombmount="/media/$TOMBNAME"
[[ -d /media ]] || { # no /media found, adopting /run/media/$USER (udisks2 compat)
tombmount="/run/media/$_USER/$TOMBNAME"
[[ -d /media ]] || {
# no /media found, adopting /run/media/$USER to match behaviour
# of tools following the notion to mount in that location (like udisks2)
local runmedia="/run/media/$_USER"
tombmount="$runmedia/$TOMBNAME"
}
_message "Mountpoint not specified, using default: ::1 mount point::" "$tombmount"
}
Expand Down Expand Up @@ -2382,6 +2388,12 @@ mount_tomb() {
# we need root from here on
_sudo mkdir -p "$tombmount"

# set ACL on /run/media/$_USER/ to match behaviour (see #461)
# tmpfs -> it doesn't know acl/noacl mount options -> no check
[[ $ACL == 1 ]] && [[ -s $runmedia ]] && {
_sudo setfacl -m u:"$_USER":r-x "$runmedia"
}

# Default mount options are overridden with the -o switch
{ option_is_set -o } && {
local oldmountopts=$MOUNTOPTS
Expand Down

0 comments on commit 69e8f34

Please sign in to comment.