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/fstab
né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/fstab
entré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 noexec
qui empêchent l’exécution des fichiers binaires ou nosuid
qui contribuent ainsi à la sécurité. En réalité, ces options sont ajoutées en tant qu'options par défaut lorsque les options user
ou users
sont 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/fstab
entré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/fstab
qui incluent l'option user
ou users
afin qu'un utilisateur puisse demander mount
le 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 user
est généralement préférable users
car elle limite l’autorisation à umount
l’utilisateur qui a monté le système de fichiers, mais users
l’autorise à tous. Malheureusement, l'option user
ne 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/fstab
une entrée telle que:
/tmp/UFS/drive /tmp/UFS/mountpoint auto users,noauto, 0 0
et utilisez-le /tmp/UFS/drive
comme 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/mountpoint
un lien symbolique vers le point de montage que vous souhaitez utiliser, par exemple /mnt/iso
.
Vous pouvez ensuite monter john-image-file.iso
avec 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 loop
explicite. 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/drive
vers 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/fstab
une entrée qui corresponde à la fois au périphérique de boucle utilisé /etc/mtab
ici /dev/loop0
et 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/fstab
entré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/fstab
entré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:
mount
binaire ne nécessite pas d'autorisations SUID, vous devriez pouvoir utiliser fakeroot sans problème.