Использование umount для монтируемого на USB тома ext4 без sudo

Я подключаю жесткий диск USB, используемый для резервного копирования плагинов, через запись 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

Размонтировать, sudo umount /mnt/Bu-ehd2 работает, но пытается размонтировать как обычный (не root) пользователь:

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

Почему это так, описано в ответе @MariusGedminas об AU, но не о том, как обойти ограничение использования umountбез sudo,

  • Добавление user к опциям монтирования не помогает.

  • Добавление users помогает, но размонтирование любым пользователем становится возможным даже после того, как монтирование было выполнено на основе /etc/fstab запись. Возможное, но плохое решение.

  • Добавление uid=1000,owner нарушает процесс монтирования вместе с:

Ошибка монтирования устройства под управлением системы /dev/sdc1:

Выход из командной строки `mount "/mnt/Bu-ehd2"с ненулевым состоянием выхода 32: mount: неверный тип fs, неверный параметр, плохой суперблок в /dev/sdc1,...

Я проверил:

$ 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: Разве отключение как обычного пользователя невозможно из-за того, что подключенное устройство принадлежит root? Если да, то как сделать устройство монтируемым someuser просто выдав cmd umount /dev/sdc1? В идеале это было бы, сделав someuser владелец собственного внешнего USB жесткого диска.

Примечание: я предпочитаю не прибегать к sudo visudo для того, чтобы написать правило исключения sudo для каждого отдельного пользователя, для umount, Это все равно заставит каждого someuser печатать sudo umount /mnt/Bu-ehd2 вместо просто umount /dev/sdc1 тем не мение.

2 ответа

Решение

Если не rootПользователь не может umount любая файловая система, смонтированная другим пользователем.

Если вы использовали user вариант в mount (/etc/fstab), вы можете проверить вывод mount команда, вы увидите user= показывающий пользователя, который смонтировал файловую систему. Только этот пользователь (и root) можешь использовать umount размонтировать файловую систему.

Есть хакерские способы размонтирования от имени другого пользователя, но я не думаю, что umount путь.


Вот функция (основанная на идее ОП), которая будет работать umount или же gvfs-mount основанный на EUID. Это можно было бы положить в /etc/bash.bashrc так что он будет доступен на всех интерактивных оболочках пользователя:

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
}

Ты можешь использовать udisksctl размонтировать без прав root:

udisksctl unmount --block-device /dev/sdc1

Использовать udisksctl mount/unmount -b /dev/sdX. Чтобы использовать mount или umount без прав root, вам необходимо отредактировать /etc/sudoersфайл с помощью visudo и добавьте строки:

username ALL=(ALL) NOPASSWD: /bin/mount, /bin/umount

Потом перезагрузитесь.

Другие вопросы по тегам