Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5bb0809009 |
+20
-4
@@ -258,8 +258,19 @@ case "$verb" in
|
|||||||
# Kommandozeile (Prozessliste) und nie ueber die Umgebung
|
# Kommandozeile (Prozessliste) und nie ueber die Umgebung
|
||||||
# (/proc/<pid>/environ).
|
# (/proc/<pid>/environ).
|
||||||
read_stdin_limited > "$creds"
|
read_stdin_limited > "$creds"
|
||||||
mkdir -p "$target"
|
# Der aufrufende Dienst laeuft in einem eigenen Mount-Namensraum
|
||||||
if mount -t cifs "$share" "$target" \
|
# (ProtectSystem, PrivateTmp, ReadWritePaths). Ein Einbinden *darin*
|
||||||
|
# scheitert mit "mount error(1): Operation not permitted" -- gemessen: mit
|
||||||
|
# denselben Optionen und denselben Zugangsdaten gelingt es aus einer
|
||||||
|
# normalen Root-Shell sofort. Deshalb wird im Namensraum des Wirts
|
||||||
|
# eingebunden; von dort wird der Mount in den Namensraum des Dienstes
|
||||||
|
# weitergegeben (er haengt als "slave" darunter), die Anwendung sieht ihn
|
||||||
|
# also. Die Zugangsdatei unter /run ist ueber die Grenze lesbar, /run ist
|
||||||
|
# nicht privatisiert.
|
||||||
|
im_wirt=(nsenter --mount=/proc/1/ns/mnt --)
|
||||||
|
command -v nsenter >/dev/null 2>&1 || im_wirt=()
|
||||||
|
"${im_wirt[@]}" mkdir -p "$target"
|
||||||
|
if "${im_wirt[@]}" mount -t cifs "$share" "$target" \
|
||||||
-o "credentials=$creds,uid=$(id -u tesm 2>/dev/null || echo 0),gid=$(id -g tesm 2>/dev/null || echo 0),file_mode=0640,dir_mode=0750,vers=3.1.1,seal"
|
-o "credentials=$creds,uid=$(id -u tesm 2>/dev/null || echo 0),gid=$(id -g tesm 2>/dev/null || echo 0),file_mode=0640,dir_mode=0750,vers=3.1.1,seal"
|
||||||
then
|
then
|
||||||
shred -u "$creds" 2>/dev/null || rm -f "$creds"
|
shred -u "$creds" 2>/dev/null || rm -f "$creds"
|
||||||
@@ -271,8 +282,13 @@ case "$verb" in
|
|||||||
|
|
||||||
umount)
|
umount)
|
||||||
check_mount_target "${1:?Ziel fehlt}"
|
check_mount_target "${1:?Ziel fehlt}"
|
||||||
umount -l "$1" || true
|
# Gegenstueck zu mount-cifs: der Mount liegt im Namensraum des Wirts, also
|
||||||
rmdir "$1" 2>/dev/null || true
|
# muss er auch dort geloest werden. Ein umount im Dienst-Namensraum wuerde
|
||||||
|
# ihn nur dort ausblenden und die Freigabe bliebe eingebunden.
|
||||||
|
im_wirt=(nsenter --mount=/proc/1/ns/mnt --)
|
||||||
|
command -v nsenter >/dev/null 2>&1 || im_wirt=()
|
||||||
|
"${im_wirt[@]}" umount -l "$1" || true
|
||||||
|
"${im_wirt[@]}" rmdir "$1" 2>/dev/null || true
|
||||||
;;
|
;;
|
||||||
|
|
||||||
apt-install)
|
apt-install)
|
||||||
|
|||||||
Reference in New Issue
Block a user