it-swarm.com.de

Wie kann ich eine Image-Datei ohne Root-Berechtigung bereitstellen?

Kann ich ein Dateisystem-Image ohne Root-Berechtigung bereitstellen? Normalerweise würde ich tun:

mount -o loop DISK_IMAGE FOLDER

Gibt es eine geeignete Möglichkeit, dies zu tun, ohne Sudo zu verwenden oder den Suid auf mount zu setzen?

Ich weiß, dass ich fusermount mit einigen ISO-Images verwenden kann, aber das ist ziemlich begrenzt, selbst für ISO-Images können einige meiner Images nicht gemountet werden, aber mount funktioniert immer.

45
daisy

Sie können nichts bereitstellen, für das der Administrator Ihnen keine Berechtigung zum Bereitstellen erteilt hat. Nur root kann den Systemaufruf mount aufrufen. Der Grund dafür ist, dass es viele Möglichkeiten gibt, Berechtigungen durch Mounten zu eskalieren, z. B. das Mounten von Daten über einen Systemspeicherort, das Erscheinen von Dateien eines anderen Benutzers und das Ausnutzen eines Programms, das auf Dateieigentum beruht, das Erstellen von Setuid-Dateien oder das Ausnutzen von Fehlern in Dateisystemtreibern.

Der Befehl mount lautet setuid root. Wenn Sie jedoch nicht root sind, können Sie nur Dinge bereitstellen, die in fstab erwähnt werden.

Der Befehl fusermount lautet setuid root. Sie können damit nur Dinge über einen Fuse-Treiber bereitstellen und Ihre Möglichkeiten einschränken, Dateien auf diese Weise mit willkürlichem Besitz oder Berechtigungen bereitzustellen (bei den meisten Setups gehören alle Dateien auf einem Fuse-Mount Ihnen).

Am besten finden Sie ein Fuse-Dateisystem , das Ihr Disk-Image lesen kann. Versuchen Sie für ISO 9660-Images sowohl fuseiso als auch ISO 9660-Unterstützung von UMfuse (verfügbar unter Debian als fuseiso9660 -Paket ).

Das Debian Wiki zeigt verschiedene Möglichkeiten, dies zu tun. Hier ist eine Möglichkeit. (Dazu muss das Paket udisks2 Installiert sein.

Erstellen Sie zunächst ein "Loop-Gerät". Dadurch können wir die Image-Datei mounten.

$ udisksctl loop-setup -f $PATH_TO_IMAGE
Mapped file $PATH_TO_IMAGE as /dev/loop0.

Beachten Sie, dass das Bild bei /dev/loop0 Zugeordnet wurde. Wenn der vorherige Befehl jedoch /dev/loop1 Zurückgegeben hätte, würden Sie /dev/loop0 In allen folgenden Befehlen durch /dev/loop1 Ersetzen.

Möglicherweise müssen Sie diesen Befehl ausführen, wenn das von uns erstellte Blockgerät nicht automatisch mit dem vorherigen Befehl bereitgestellt wird:

$ udisksctl mount -b /dev/loop0
Mounted /dev/loop0 at /media/$USER/$IMAGE_NAME

Sie können sich Dateien auf der Festplatte ansehen:

$ ls -l /media/$USER/$IMAGE_NAME/

Sie können es aushängen, wenn Sie fertig sind:

$ udisksctl unmount -b /dev/loop0
$ udisksctl loop-delete -b /dev/loop0
20
Nick ODell

Mit dem Gastmount des Sicherungsmoduls können Sie verschiedene Arten von Disk-Images bereitstellen. Es ist Teil des Gast-Ökosystems und erfordert keine Root-Berechtigungen.

Weitere Informationen finden Sie in der Manpage .

Beispiele

1. Für einen typischen Windows-Gast, dessen Hauptdateisystem auf der ersten Partition liegt:

guestmount -a windows.img -m /dev/sda1 --ro /mnt

2. Für einen typischen Linux-Gast, der ein/boot-Dateisystem auf der ersten Partition und das Root-Dateisystem auf einem logischen Volume hat:

guestmount -a linux.img -m /dev/VG/LV -m /dev/sda1:/boot --ro /mnt
16
Matthew

Der mögliche Weg wäre, ein /etc/fstab Eintrag für die ISO mit dem Parameter 'user', wie

/test.iso /mnt/iso auto defaults,user 0 1

Normalerweise benötigen Sie jedoch ohnehin Root-Zugriff, um diese Datei zu bearbeiten. Daher ist dies nicht sehr hilfreich.

2
Renan

Es ist eigentlich sehr einfach, mehr oder weniger alles zu mounten, was Sie als normaler Benutzer ohne Root-Rechte wollen, vorausgesetzt, der richtige Eintrag wurde in /etc/fstab Erstellt.

Änderungen an /etc/fstab Erfordern natürlich Root-Rechte. Ein einzelner Eintrag kann jedoch mit großer Flexibilität verwendet werden, um (u) viele verschiedene Dateien an verschiedenen Einhängepunkten bereitzustellen, ohne dass /etc/fstab Weiter bearbeitet werden muss.

Hier sind zwei sehr kurze (5 Zeilen + Kommentare) Bash-Skripte, die den Job erledigen:

zur Montage

#!/bin/sh
# usage: usmount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to mount device $1 on mount point $2
# Use /etc/fstab entry :
#       /tmp/UFS/drive /tmp/UFS/mountpoint  auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
mount /tmp/UFS/drive || mount /tmp/UFS/mountpoint
# The last statement should be a bit more subtle
# Trying both is generally not useful.

und zum Absteigen

#!/bin/sh
# usage: usumount device dir
# author: babou 2013/05/17 on https://unix.stackexchange.com/questions/32008/mount-an-loop-file-without-root-permission/76002#76002
# Allows normal user to umount device $1 from mount point $2
# Use /etc/fstab entry :
#       /tmp/UFS/drive /tmp/UFS/mountpoint  auto users,noauto 0 0
# and directory /tmp/UFS/
# Both have to be created (as superuser for the /etc/fstab entry)
rm -f /tmp/UFS/drive /tmp/UFS/mountpoint
ln -s `realpath -s $1` /tmp/UFS/drive
ln -s `realpath -s $2` /tmp/UFS/mountpoint
umount /tmp/UFS/drive || umount /tmp/UFS/mountpoint
# One of the two umounts may fail because it is ambiguous
# Actually both could fail, with careless mounting organization :-)

Das Verzeichnis /tmp/UFS/ Wird erstellt, um die Links zu isolieren und Konflikte zu vermeiden. Die Symlinks können sich jedoch an einer beliebigen Stelle im Benutzerbereich befinden, solange sie sich an derselben Stelle (demselben Pfad) befinden. Der Eintrag /etc/fstab Ändert sich ebenfalls nie.

VITAL WARNING: Die Montage ist aus Sicherheitsgründen eingeschränkt. Eine flexiblere Gestaltung kann Türen für schädliche Software öffnen. Ich bin kein Sicherheitsexperte und würde empfehlen, dass Sie Türen nicht mehr als unbedingt erforderlich öffnen ... indem Sie Optionen verwenden, um einzuschränken, was mit den so montierten Dateisystemen getan werden kann. Wenn ein sachkundiger Mitarbeiter weitere Kommentare zu Sicherheitsproblemen abgeben könnte, könnte dies hilfreich sein.

Es stehen verschiedene Optionen zur Verfügung, um die Verwendung von gemounteten Dateisystemen einzuschränken, z. B. noexec, das die Ausführung von Binärdateien verhindert, oder nosuid, und somit zur Sicherheit beitragen. Tatsächlich werden diese Optionen als Standardoptionen hinzugefügt, wenn die Optionen user oder users verwendet werden, was in den folgenden Schritten unbedingt der Fall ist. Überlegen Sie zweimal, bevor Sie diese Standardeinstellungen überschreiben.http://en.wikipedia.org/wiki/Fstab

Weitere Optionen können zum weiteren Schutz hinzugefügt werden. Mit der Optionowner im/etc/fstab Eintrag können Benutzer nur mit Dateien oder Geräten umgehen, die sie besitzen. Sieheman mount für eine Liste von Optionen :http://linux.die.net/man/8/mount .

Die Verwendung dieses /etc/fstab - Eintrags kann auch durch den Besitz der Benutzergruppe des Verzeichnisses (oder der Verzeichnisse), das die Symlinks enthält, eingeschränkt werden.

Erklärung

Diese Erklärung wurde geschrieben, bevor mir klar wurde, dass ich die beiden obigen Skripte vereinfachen kann. Ich habe nicht sofort an sie gedacht, auch weil ich ein etwas komplexeres Problem zur Hand habe, das sie ohne zusätzliche Maschinen nicht lösen können. Daher mag meine Erklärung etwas komplizierter sein, als sie sollte, aber ich habe nicht den Mut, alles von Grund auf neu zu schreiben.

Die Grundidee besteht darin, Einträge in /etc/fstab Zu erstellen, die die Option user oder users enthalten, damit ein Benutzer mount auffordern kann, die darin angegebene Montage durchzuführen Eingabe, indem Sie als Argument die zu mountende Datei oder den zu verwendenden Mount-Punkt angeben (aber meiner Erfahrung nach nicht beide).

Sie benötigen auch einen korrekten Eintrag für umount (was ein etwas anderes Problem ist - siehe unten). Die Option user ist normalerweise besser als users, da sie die Berechtigung für umount auf den Benutzer beschränkt, der das Dateisystem bereitgestellt hat, während users dies allen erlaubt . Leider funktioniert die Option user nicht immer und kann einige andere Schritte zur Ausführung erfordern. Dies wird in Option "Benutzer" für Mount, nicht für Umount erläutert.

Zuerst fügen Sie /etc/fstab Einen Eintrag hinzu, wie zum Beispiel:

/tmp/UFS/drive /tmp/UFS/mountpoint  auto users,noauto, 0 0

und verwenden Sie /tmp/UFS/drive als symbolischen Link (oder Symlink) zu jedem Gerät oder jeder Datei, die Sie mounten möchten, z. B. eine Datei, die das Image eines ISO-Dateisystems enthält /home/johndoe/john-image-file.iso.

Sie definieren /tmp/UFS/mountpoint Auch als Symlink zu dem Mount-Punkt, den Sie verwenden möchten, z. B. /mnt/iso.

Sie können dann john-image-file.iso Mit dem folgenden Befehl mounten:

$ mount /tmp/UFS/drive

Dies ist auf meinem Mageia Linux ausreichend, da die Verwendung von Schleifengeräten jetzt implizit gemacht wurde und die explizite Verwendung von -o loop Nicht mehr erforderlich ist. Ich weiß nicht, wie allgemein das heute ist. Siehe Wann sollte ich bei der Montage ein Loop-Gerät verwenden?

Diese Montage wird in Tabellen und Befehlen angezeigt:

$ df | tail -1
/dev/loop0       5,1G  5,1G     0 100% /mnt/iso
$ tail -1 /etc/mtab
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ mount | tail -1
/home/johndoe/john-image-file.iso on /mnt/iso type udf (ro,nosuid,nodev,noexec,relatime,utf8)
$ tail -1 /proc/mounts
/dev/loop0 /mnt/iso udf ro,nosuid,nodev,noexec,relatime,utf8 0 0
$ tail -1 /proc/self/mountinfo
46 22 7:0 / /mnt/iso rw,nosuid,nodev,noexec,relatime - udf /dev/loop0 ro,utf8
$ tail -1 /proc/self/mountstats 
device /dev/loop0 mounted on /mnt/iso with fstype udf

Der Bereitstellungsvorgang kann für jede Datei oder jedes Laufwerk ausgeführt werden und erfordert nur eine symbolische Verknüpfung von /tmp/UFS/drive Zu dieser Datei oder zum Gerät für das Laufwerk. Natürlich könnte ein anderer Name und Ort für die symbolische Verknüpfung gewählt werden, solange sie sich nie ändert.

Das Demontieren der Datei hängt in gleicher Weise von der angemessenen Verwendung symbolischer Links ab. Bei einem normalen Gerät, das einem Harware-Laufwerk entspricht, verwenden Sie nur dieselben Links.

Dateien, die das Image eines Dateisystems enthalten, werden jedoch über ein spezielles Gerät namens Loop-Gerät bereitgestellt, das beim Bereitstellen der Datei automatisch zugewiesen wird.

Um die Bereitstellung der Datei aufzuheben, müssen Sie sich auf das Loop-Gerät beziehen, nicht auf die Datei. Daher benötigen Sie in /etc/fstab Einen Eintrag, der sowohl dem in /etc/mtab Verwendeten Schleifengerät hier /dev/loop0 Als auch dem Einhängepunkt hier /mnt/iso Entspricht.

Sie können einen solchen Eintrag nicht im Voraus erstellen, da das Schleifengerät variieren kann, da es dynamisch zugewiesen wird. Beachten Sie, dass es auch möglich ist, ein Gerät mit fester Schleife zu verwenden, dies ist jedoch auf andere Weise unpraktisch. Siehe http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ = ( dieser Blog hat die Antwort hier tatsächlich inspiriert).

Den Namen des Schleifengeräts finden Sie jedoch hier /dev/loop0, Indem Sie das System wie oben beschrieben auf verschiedene Arten fragen. Dann kann unser Standardeintrag /etc/fstab Über den Symlink /tmp/UFS/drive Auf das Gerät mit der rechten Schleife und wie zuvor mit /tmp/UFS/mountpoint Auf den Einhängepunkt zeigen. In diesem Fall kann die Bereitstellung der Datei mit einem der folgenden Befehle aufgehoben werden (vorausgesetzt, es besteht keine Mehrdeutigkeit mit /etc/mtab, Was ein anderes Problem darstellt):

$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint

Da die beiden Symlinks nur bei der Ausgabe der Befehle benötigt werden, können sie dynamisch geändert werden. Unser einzelner /etc/fstab - Eintrag ermöglicht es also, eine beliebige Anzahl von Dateien ohne Root-Rechte zu mounten und in beliebiger Reihenfolge zu mounten.

Weitere Referenzen:

2
babou

Paket libguestfs-tools-c haben also den Befehl guestmount

mkdir dvd    
guestmount -a image.iso -r -i dvd 

df zeigt image.iso gemountet an

df

um umount haben wir:

guestunmount dvd

UPDATE 2020.03.25:

Paketarchivierung scheint ein cooles Werkzeug zu sein

https://pkgs.org/download/archivemount

beispiel:

archivemount zentyal-6.0-development-AMD64.iso tmp3/
0
Sérgio