Es gibt einige Ansätze, von denen einige größtenteils sicher sind, andere überhaupt nicht.
Der unsichere Weg
Lassen Sie jede Verwendung laufen mount
, z. B. durch sudo. Du könntest ihnen genauso gut Wurzel geben; das ist gleich. Der Benutzer könnte ein Dateisystem mit einer suid-Root-Kopie von bash
-running mounten, die sofort root gibt (wahrscheinlich ohne Protokollierung, über die Tatsache hinaus, dass sie ausgeführt mount
wurde).
Alternativ könnte ein Benutzer sein eigenes Dateisystem darüber mounten /etc
, das seine eigene Kopie von /etc/shadow
oder enthält /etc/sudoers
, und dann root mit entweder su
oder beziehen sudo
. Oder möglicherweise bind-mount ( mount --bind
) über eine dieser beiden Dateien. Oder eine neue Datei in /etc/sudoers.d
.
Ähnliche Angriffe könnten über /etc/pam.d
und an vielen anderen Orten abgeworfen werden.
Denken Sie daran, dass sich Dateisysteme nicht einmal auf einem Gerät befinden müssen, sondern -o loop
eine Datei bereitstellen, die dem Benutzer gehört (und daher geändert werden kann).
Der meist sichere Weg: udisks oder ähnliches
Die verschiedenen Desktop-Umgebungen haben bereits Lösungen dafür entwickelt, damit Benutzer Wechseldatenträger bereitstellen können. Sie funktionieren, indem sie nur in einem Unterverzeichnis von gemountet werden /media
und die Unterstützung für Benutzer- / Gruppen-IDs über Kerneloptionen deaktivieren. Optionen hier sind udisks
, udisks2
, pmount
, usbmount
,
Wenn Sie müssen, können Sie Ihr eigenes Skript schreiben, um etwas Ähnliches zu tun, und es über sudo aufrufen - aber Sie müssen beim Schreiben dieses Skripts sehr vorsichtig sein, um keine Root-Exploits zu hinterlassen. Wenn Sie nicht möchten, dass sich Ihre Benutzer an sudo erinnern müssen, können Sie in einem Skript Folgendes tun:
#!/bin/bash
if [ $UID -ne 0 ]; then # or `id -u`
exec sudo -- "$0" "$@"
fi
# rest of script goes here
Der Weg, der eines Tages sicher sein wird: Benutzernamensräume
Linux-Namespaces sind eine sehr einfache Form der Virtualisierung (genauer gesagt Container). Insbesondere mit Benutzernamensräumen kann jeder Benutzer im System seine eigene Umgebung erstellen, in der er sich als Root befindet. Dies würde es ihnen ermöglichen, Dateisysteme bereitzustellen, mit der Ausnahme, dass dies mit Ausnahme einiger virtueller Dateisysteme explizit blockiert wurde. Möglicherweise werden FUSE-Dateisysteme zugelassen, aber die neuesten Patches, die ich finden konnte, decken keine Blockgeräte ab , sondern nur Dinge wie sshfs.
Darüber hinaus haben viele Distributionskerne (aus Sicherheitsgründen) standardmäßig nicht zugelassen, dass nicht privilegierte Benutzer Benutzernamensräume verwenden. Zum Beispiel hat Debian eine kernel.unprivileged_userns_clone
, die standardmäßig auf 0 eingestellt ist. Andere Distributionen haben ähnliche Einstellungen, obwohl sie oft leicht unterschiedliche Namen haben.
Die beste mir bekannte Dokumentation zu Benutzernamensräumen ist ein LWN-Artikel
Namespaces in operation, Teil 5: Benutzernamensräume .
Im Moment würde ich mich für udisks2 entscheiden.
gvfs-mount
-d /dev/sdX