使用 `umount` 挂载 USB 的 ext4 卷,无需 `sudo`

使用 `umount` 挂载 USB 的 ext4 卷,无需 `sudo`

我通过 fstab 条目安装用于间歇性插件备份的 USB HDD:

# <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 上,但没有知道如何绕过umountwithout上的使用限制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`

问:由于挂载的设备归 root 所有,因此普通用户无法卸载该设备吗?如果是这样,我如何通过someuser发出 cmd来使设备可卸载umount /dev/sdc1?理想情况下,这是通过使其成为其自己的外部 usb 硬盘设备的所有者来实现的someuser

笔记:我并不想诉诸sudo visudo于为每个不同的用户编写 sudo-exception 规则,例如umount。它仍然会强制每个someuser人输入sudo umount /mnt/Bu-ehd2,而不是umount /dev/sdc1无论如何。

答案1

除非root,否则用户不能umount挂载其他用户的任何文件系统。

如果您使用了( )user中的选项,则可以检查命令的输出,您将看到显示已挂载文件系统的用户。只有该用户(和)才能用来卸载文件系统。mount/etc/fstabmountuser=rootumount

有一些比较简单的方法可以以不同的用户身份进行卸载,但我认为没有任何直接的umount方法。


umount这是一个将运行或基于 EUID的函数(基于 OP 的想法)gvfs-mount。可以将其放入,/etc/bash.bashrc以便它可以在所有用户的交互式 shell 上可用:

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
}

答案2

您可以使用udisksctl以下命令卸载而无需 root 权限:

udisksctl unmount --block-device /dev/sdc1

答案3

使用udisksctl mount/unmount -b /dev/sdX。要使用 mount 或 umount 而不需要 root 权限,你需要使用/etc/sudoers以下命令编辑文件维苏多并添加以下行:

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

然后重新启动。

相关内容