web-dev-qa-db-fra.com

Utilisation de «umount» pour le volume ext4 monté sur USB sans «Sudo»

Je monte un disque dur USB utilisé pour la sauvegarde intermittente des plugins via l'entrée fstab:

# <file system>                           <mount point> <type>  <options>                                                                        <dump> <pass>
UUID=cd9f3fc4-f67f-42c4-8190-21d2766d2b65 /mnt/Bu-ehd2  ext4    rw,nosuid,noexec,nodev,noauto,nofail,relatime,user_xattr,acl,comment=x-gvfs-show 0      2

Pour démonter, Sudo umount /mnt/Bu-ehd2 fonctionne, mais en essayant de démonter en tant qu'utilisateur normal (non root):

$ umount /mnt/Bu-ehd2
umount: only root can unmount UUID=cd9f3fc4-f67f-42c4-8190-21d2766d2b65 from /mnt/Bu-ehd2

La raison pour laquelle il en est ainsi est couverte par @MariusGedminas ' réponse sur AU, mais pas comment contourner la restriction d'utilisation sur umount sans Sudo.

  • L'ajout de user aux options de montage n'aide pas.

  • L'ajout de users aide mais le démontage par n'importe quel utilisateur devient possible même après que le montage a été effectué sur la base d'un /etc/fstab entrée. Une solution possible mais mauvaise.

  • Ajouter uid=1000,owner interrompt le processus de montage avec:

Erreur lors du montage du périphérique géré par le système/dev/sdc1:

La ligne de commande `mount"/mnt/Bu-ehd2 "'est sortie avec un état de sortie non nul 32: mount: mauvais type fs, mauvaise option, mauvais superbloc sur/dev/sdc1, ...

J'ai vérifié:

$ df -l | grep Bu-ehd2
/dev/sdc1        192162396     60744 182317284       1% /mnt/Bu-ehd2

$ ls -lAsF /dev/disk/by-uuid | grep sdc1
0 lrwxrwxrwx 1 root root 10 Mar 29 11:24 cd9f3fc4-f67f-42c4-8190-21d2766d2b65
-> ../../sdc1

$ stat /mnt/Bu-ehd2 | head -4
File: ‘/mnt/Bu-ehd2’
Size: 4096          Blocks: 8          IO Block: 4096   directory
Device: 821h/2081d  Inode: 2           Links: 3
Access: (0770/drwxrwx---)  Uid: ( 1000/someuser)   Gid: (    0/    root)

$ stat /dev/sdc1 | head -4
File: ‘/dev/sdc1’
Size: 0             Blocks: 0          IO Block: 4096   block special file
Device: 5h/5d   Inode: 176539      Links: 1     Device type: 8,21
Access: (0660/brw-rw----)  Uid: (    0/    root)   Gid: (    6/    disk)

$ blkid | grep Bu-ehd2 # yields nothing on /dev/sdc1 when actually 
$                      #+ mounted on `/mnt/Bu-ehd2`

Q: Le démoutage en tant qu'utilisateur normal est-il impossible en raison du fait que le périphérique monté appartient à root? Si oui, comment puis-je rendre le périphérique démontable par someuser simplement en émettant cmd umount /dev/sdc1? Idéalement, ce serait en faisant someuser le propriétaire de son propre périphérique de disque dur USB externe.

Remarque: Je préfère ne pas recourir à Sudo visudo afin d'écrire une règle d'exception Sudo pour chaque utilisateur différent, pour umount. Il forcerait toujours chaque someuser à taper Sudo umount /mnt/Bu-ehd2 au lieu de simplement umount /dev/sdc1 en tous cas.

1
Cbhihe

À moins que root, un utilisateur ne puisse umount aucun système de fichiers monté par un autre utilisateur.

Si vous avez utilisé l'option user dans mount (/etc/fstab), vous pouvez vérifier la sortie de la commande mount, vous verrez le user= montrant l'utilisateur qui a monté le système de fichiers. Seul cet utilisateur (et root) peut utiliser umount pour démonter le système de fichiers.

Il existe des moyens hacky de faire le démontage en tant qu'utilisateur différent, mais je ne pense pas qu'il existe un moyen direct umount.


Voici une fonction (basée sur l'idée d'OP) qui exécutera umount ou gvfs-mount basé sur l'EUID. Cela pourrait être mis dans /etc/bash.bashrc pour qu'il soit disponible sur tous les shells interactifs de l'utilisateur:

unmount () {
    if [[ "$#" -eq 1 ]]; then
        { [[ "$(id -u)" -eq 0 || "$1" =~ ^-.* ]] && "$(command -v umount)" "$1" || gvfs-mount -u "$1" ;}
    else
        printf "Usage: unmount [option -h [|-V]|mount-point|device-path]\n"
    fi
}
3
heemayl

Vous pouvez utiliser udisksctl pour démonter sans privilèges root:

udisksctl unmount --block-device /dev/sdc1
1