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.