Autoriser l'user non root à monter un disque dur externe NTFS particulier

J'ai un disque dur externe de 4 To connecté à un server Linux.

Les permissions fstab sur ce lecteur sont définies de sorte qu'un seul user non root particulier y ait access:

/dev/disk/by-uuid/CEE0476DE0388DA9/ /mnt/USBexternal ntfs-3g defaults,auto,uid=51343,gid=50432,umask=077 0 0 

Depuis un location distant, cet user a réussi à effectuer des sauvegardes rsync sur ce disque dur externe.

Cependant, le disque externe ne rest pas monté aussi sûrement qu'un disque dur interne. Tous les deux jours je dois me connecter en tant que root faire cette command:

 mount -a 

Je voudrais donner à cet user la possibilité de monter ce lecteur, mais quand l'user non root monte -a, il leur dit qu'ils n'ont pas l'autorisation de le faire:

 nonrootuser@server:~$ mount -a mount: only root can do that 

Lorsque l'user non root essaie de monter ce lecteur spécifiquement, il indique qu'il est déjà monté (même s'il ne l'est pas):

 nonrootuser@server:~$ mount /mnt/USBexternal/ mount: according to mtab, /dev/sdb1 is already mounted on /mnt/USBexternal 

Comme mentionné, le lecteur n'est pas réellement monté, mais (en raison de la sortie ci-dessus), si l'user non-root tente de démonter le lecteur, il indique que sa requête n'est pas en accord avec fstab:

 nonrootuser@server:~$ umount /mnt/USBexternal/ umount: /mnt/USBexternal/ mount disagrees with the fstab 

Comment puis-je autoriser cet user à monter ce lecteur sans lui donner d'autres pouvoirs administratifs?

Vous pouvez configurer une input dans le file /etc/sudoers pour que cet user puisse utiliser la command mount. Ajoutez quelque chose comme ceci à la fin du file /etc/sudoers :

username ALL=NOPASSWD: /usr/bin/mount, /sbin/mount.ntfs-3g, /usr/bin/umount

Assurez-vous que le path exact de chaque exécutable est correct pour votre système. Par exemple, votre command mount peut être dans /bin au lieu de /usr/bin .

L'ajout de la partie mount.ntfs-3g est important pour fournir cet access à l'user. Je peux voir dans votre command mount que vous utilisez un type de système de files ntfs-3g .

Vous pourriez, à la place, créer un script shell pour gérer le assembly / déassembly et placer cela dans votre file sudoers. Par exemple:

créez le script /usr/local/bin/mount-ntfs-drive :

 #!/bin/bash device_path="/dev/disk/by-uuid/CEE0476DE0388DA9/" mount_point="/mnt/USBexternal" if [ "$1" = "-u" ] ; then # do unmount /bin/umount $mount_point else # do mount /bin/mount $device_path $mount_point fi 

éditez le file /etc/sudoers :

username ALL=NOPASSWD: /usr/local/bin/mount-ntfs-drive

Assurez-vous de faire chmod +x /usr/local/bin/mount-ntfs-drive . En outre, lorsque votre user exécute le file, il devra utiliser le path d'access complet pour qu'il fonctionne. Cela pourrait fonctionner à partir de leur path, mais pas sûr.

sudo /usr/local/bin/mount-ntfs-drive

Vous pouvez écrire un script qui vérifie si la connection est brisée et effectue le nettoyage nécessaire dans ce cas. Ce script pourrait être exécuté toutes les 30 minutes en tant que root par cron .

Peut-être disparaît de /proc/mounts lorsque le kernel détecte que le périphérique est parti. Sinon, le script pourrait simplement essayer de créer un file sur le volume monté.

Cela éviterait la situation problématique que vous avez décrite.

Une approche différente est de ne pas utiliser la fonctionnalité user de fstab mais d'utiliser sudo place pour que l'user puisse exécuter un script avec privilège de super-user qui effectue à la fois le nettoyage (si nécessaire) et le assembly.