Il est en fait très facile de monter plus ou moins ce que vous voulez en tant qu'utilisateur normal sans privilèges root, à condition que la bonne entrée ait été créée dans /etc/fstab .
Bien sûr, des modifications /etc/fstabnécessitant des privilèges root. Mais une seule entrée peut être utilisée avec beaucoup de flexibilité pour (u) monter de nombreux fichiers différents sur différents points de montage, sans aucune modification ultérieure de /etc/fstab.
Voici deux scripts Bash très courts (5 lignes + commentaires) qui feront le travail:
pour le 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.
et pour démonter
#!/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 :-)
Le répertoire /tmp/UFS/est créé pour isoler les liens et éviter les conflits. Mais les liens symboliques peuvent être n'importe où dans l'espace utilisateur, tant qu'ils restent au même endroit (même chemin). L' /etc/fstabentrée ne change jamais non plus.
AVERTISSEMENT VITAL: Le
montage est limité pour de bonnes raisons de sécurité. Le rendre plus flexible peut ouvrir des portes aux logiciels malveillants. Je ne suis pas un expert en sécurité et je vous recommanderais de ne pas ouvrir les portes plus que nécessaire - en utilisant des options permettant de restreindre l'utilisation des systèmes de fichiers pouvant ainsi être montés. Si un contributeur averti pouvait commenter davantage sur les questions de sécurité, cela pourrait être utile.
Diverses options sont disponibles pour limiter l’utilisation des systèmes de fichiers montés, telles que celles noexecqui empêchent l’exécution des fichiers binaires ou nosuidqui contribuent ainsi à la sécurité. En réalité, ces options sont ajoutées en tant qu'options par défaut lorsque les options userou userssont utilisées, ce qui est nécessairement le cas dans ce que nous faisons ci-dessous. Réfléchissez à deux fois avant de remplacer ces valeurs par défaut. http://en.wikipedia.org/wiki/Fstab
D'autres options peuvent être ajoutées pour une protection supplémentaire. Par exemple, l'option owner dans l' /etc/fstab entrée permet aux utilisateurs de gérer uniquement les fichiers ou les périphériques qu'ils possèdent. Voir man mount pour une liste d'options: http://linux.die.net/man/8/mount .
L'utilisation de cette /etc/fstabentrée peut également être limitée par la propriété user.group du ou des répertoires contenant les liens symboliques.
Explication
Cette explication a été écrite avant que je réalise que je pouvais simplifier les choses aux deux scripts ci-dessus. Je n'y ai pas pensé tout de suite, en partie parce que j'ai sous les yeux un problème légèrement plus complexe qu'ils ne résolvent pas sans machines supplémentaires. Ainsi, mon explication est peut-être un peu plus complexe qu’elle ne le devrait, mais je n’ai pas le courage de tout réécrire à partir de zéro.
L'idée de base est de créer des entrées /etc/fstabqui incluent l'option userou usersafin qu'un utilisateur puisse demander mountle montage spécifié dans cette entrée en donnant comme argument le fichier à monter ou le point de montage à utiliser (mais pas les deux à ma connaissance). .
Vous devez également avoir une entrée correcte dans umount(problème légèrement différent - voir ci-dessous). Cette option userest généralement préférable userscar elle limite l’autorisation à umountl’utilisateur qui a monté le système de fichiers, mais usersl’autorise à tous. Malheureusement, l'option userne fonctionne pas toujours et peut nécessiter d'autres étapes. Ceci est discuté dans Option "utilisateur" fonctionne pour le montage, pas pour umount .
Tout d'abord, vous ajoutez à /etc/fstabune entrée telle que:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
et utilisez-le /tmp/UFS/drivecomme lien symbolique (ou lien symbolique) vers le périphérique ou le fichier que vous souhaitez monter, par exemple un fichier contenant l'image d'un système de fichiers ISO /home/johndoe/john-image-file.iso.
Vous définissez également /tmp/UFS/mountpointun lien symbolique vers le point de montage que vous souhaitez utiliser, par exemple /mnt/iso.
Vous pouvez ensuite monter john-image-file.isoavec la commande:
$ mount /tmp/UFS/drive
Ceci est suffisant sous Mageia Linux, car l’utilisation de périphériques en boucle est désormais implicite et ne nécessite plus d’être -o loopexplicite. Je ne sais pas à quel point c'est général aujourd'hui. Voir
Lors du montage, quand dois-je utiliser un périphérique à boucle?
Ce montage apparaît dans les tables et les commandes:
$ 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
L'opération de montage peut fonctionner pour n'importe quel fichier ou lecteur et nécessite uniquement de créer un lien symbolique /tmp/UFS/drivevers ce fichier ou vers le périphérique correspondant au lecteur. Bien entendu, vous pouvez choisir un autre nom et un autre emplacement pour le lien symbolique, à condition que celui-ci ne change jamais.
Le démontage du fichier repose de la même manière sur l'utilisation appropriée des liens symboliques. Dans le cas d'un périphérique normal correspondant à un lecteur matériel, vous utilisez simplement les mêmes liens.
Toutefois, les fichiers contenant l'image d'un système de fichiers sont montés via un type spécial de périphérique appelé périphérique en boucle, qui est automatiquement alloué lorsque vous montez le fichier.
Pour démonter le fichier, vous devez vous référer au périphérique en boucle, pas au fichier. Par conséquent, vous avez besoin d' /etc/fstabune entrée qui corresponde à la fois au périphérique de boucle utilisé /etc/mtabici /dev/loop0et au point de montage
/mnt/iso.
Vous ne pouvez pas créer une telle entrée à l'avance car le périphérique de boucle peut varier, car ils sont alloués de manière dynamique. Notez qu'il est également possible d'utiliser un périphérique à boucle fixe, mais cela peut être gênant à d'autres égards. Voir
http://igurublog.wordpress.com/2011/01/22/how-to-allow-mounting-of-iso-files-by-a-regular-user/ ( ce blog a en fait inspiré la réponse ici ).
Cependant, vous pouvez trouver le nom du périphérique de boucle, ici /dev/loop0, en interrogeant le système, comme nous l'avons fait ci-dessus, de différentes manières. Ensuite, notre /etc/fstabentrée standard peut être faite pour pointer vers le bon dispositif de boucle via le lien symbolique /tmp/UFS/drive, et vers le point de montage comme cela a été fait précédemment avec /tmp/UFS/mountpoint. Ceci fait, le fichier peut être démonté avec l’une des commandes suivantes (à condition qu’il n’y ait aucune ambiguïté /etc/mtab, ce qui pose un problème différent):
$ umount /tmp/UFS/drive
$ umount /dev/loop0
$ umount /mnt/iso
$ umount /tmp/UFS/mountpoint
Comme les deux liens symboliques ne sont nécessaires que lorsque les commandes sont émises, ils peuvent être modifiés de manière dynamique. Ainsi, notre /etc/fstabentrée unique permet de monter un nombre quelconque de fichiers et de les monter dans n'importe quel ordre, sans privilèges root.
Autres références:
mountbinaire ne nécessite pas d'autorisations SUID, vous devriez pouvoir utiliser fakeroot sans problème.