Es ist eigentlich sehr einfach, mehr oder weniger das zu mounten, was Sie als normaler Benutzer ohne Root-Rechte wollen, vorausgesetzt, der richtige Eintrag wurde in erstellt /etc/fstab
.
Natürlich /etc/fstab
erfordern Änderungen Root-Rechte. Ein einzelner Eintrag kann jedoch mit großer Flexibilität verwendet werden, um viele verschiedene Dateien an verschiedenen Einhängepunkten (u) einzuhängen, ohne dass eine weitere Bearbeitung erforderlich ist /etc/fstab
.
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 (auf demselben Pfad) befinden. Der /etc/fstab
Eintrag ändert sich auch nie.
VITAL WARNING: Die
Montage ist aus Sicherheitsgründen eingeschränkt. Eine flexiblere Gestaltung kann Tür und Tor 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 Dateisystemen geschehen kann, die auf diese Weise angehängt werden können. Wenn ein sachkundiger Mitarbeiter weitere Kommentare zu Sicherheitsproblemen abgeben kann, ist dies möglicherweise hilfreich.
Es stehen verschiedene Optionen zur Verfügung, um die Verwendung von bereitgestellten Dateisystemen einzuschränken, z. B. um noexec
die Ausführung von Binärdateien zu verhindern oder um nosuid
so zur Sicherheit beizutragen. 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 Option owner
im /etc/fstab
Eintrag können Benutzer beispielsweise nur mit Dateien oder Geräten umgehen, deren Eigentümer sie sind. Siehe man mount
für eine Liste der 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) eingeschränkt werden, in denen sich die Symlinks befinden.
Erläuterung
Diese Erklärung wurde geschrieben, bevor mir klar wurde, dass ich die beiden obigen Skripte vereinfachen kann. Ich habe nicht sofort an sie gedacht, 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 zu erstellen /etc/fstab
, die die Option user
oder enthalten, users
damit ein Benutzer mount
die in diesem Eintrag angegebene Einbindung ausführen kann, indem er als Argument die einzubindende Datei oder den zu verwendenden Einhängepunkt angibt (jedoch nicht beide in meiner Erfahrung). .
Sie benötigen auch einen korrekten Zugang zu umount
(was ein etwas anderes Problem ist - siehe unten). Die Option user
ist normalerweise besser als, users
da sie die Berechtigung auf umount
den Benutzer beschränkt, der das Dateisystem bereitgestellt hat, während dies users
für alle zulässig ist . Leider user
funktioniert die Option nicht immer und kann einige andere Arbeitsschritte erfordern. Dies wird in der Option "Benutzer" Arbeit für Mount, nicht für Umount erläutert .
Zuerst fügen Sie /etc/fstab
einen Eintrag hinzu wie:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
und /tmp/UFS/drive
als symbolische Verknüpfung (oder symbolische Verknüpfung) zu jedem Gerät oder jeder Datei verwenden, die Sie bereitstellen möchten, z. B. eine Datei, die das Image eines ISO-Dateisystems enthält /home/johndoe/john-image-file.iso
.
Sie definieren auch /tmp/UFS/mountpoint
als Symlink den Mount-Punkt, den Sie verwenden möchten, sagen wir /mnt/iso
.
Sie können dann john-image-file.iso
mit dem Befehl einhängen :
$ mount /tmp/UFS/drive
Dies ist auf meinem Mageia Linux ausreichend, da die Verwendung von Loop-Geräten jetzt implizit ist und nicht mehr -o loop
explizit erforderlich ist . Ich weiß nicht, wie allgemein das heute ist. Siehe
Wann sollte ich bei der Montage ein Loop-Gerät verwenden?
Diese Montage erscheint in Tabellen und Befehlen:
$ 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 lediglich eine symbolische Verknüpfung von /tmp/UFS/drive
dieser Datei oder dem Gerät für das Laufwerk. Natürlich könnte ein anderer Name und Ort für den symbolischen Link gewählt werden, solange er sich nie ändert.
Das Aufheben der Bereitstellung der Datei hängt in gleicher Weise von der ordnungsgemäßen Verwendung symbolischer Verknüpfungen ab. Bei einem normalen Gerät, das einem Hardwarelaufwerk entspricht, verwenden Sie einfach dieselben Links.
Dateien, die das Image eines Dateisystems enthalten, werden jedoch über eine spezielle Art von Gerät bereitgestellt, die als Loop-Gerät bezeichnet wird und beim Bereitstellen der Datei automatisch zugewiesen wird.
Um die Bereitstellung der Datei aufzuheben, müssen Sie sich auf das Loop-Gerät und nicht auf die Datei beziehen. Daher benötigen Sie in /etc/fstab
einem Eintrag, der sowohl dem hier verwendeten Loop-Gerät als auch dem /etc/mtab
hier verwendeten /dev/loop0
Mount-Punkt entspricht
/mnt/iso
.
Sie können einen solchen Eintrag nicht im Voraus erstellen, da das Loop-Gerä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 ).
Sie können den Namen des Loop-Geräts jedoch hier finden /dev/loop0
, indem Sie das System wie oben beschrieben auf verschiedene Arten fragen. Dann kann unser Standardeintrag /etc/fstab
so eingestellt werden, dass er über den Symlink auf das richtige Loop-Gerät /tmp/UFS/drive
und wie zuvor mit auf den Mount-Punkt verweist /tmp/UFS/mountpoint
. Wenn dies erledigt ist, kann die Bereitstellung der Datei mit einem der folgenden Befehle aufgehoben werden (vorausgesetzt, es besteht keine Mehrdeutigkeit /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 benötigt werden, wenn die Befehle ausgegeben werden, können sie dynamisch geändert werden. Unser einzelner /etc/fstab
Eintrag ermöglicht es daher, eine beliebige Anzahl von Dateien ohne Root-Rechte einzuhängen und diese in beliebiger Reihenfolge umzuhängen.
Weitere Referenzen:
mount
Binärdatei keine SUID-Berechtigungen erfordert, sollten Sie in der Lage sein, fakeroot ohne Probleme zu verwenden.