我通过 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 上,但没有知道如何绕过umount
without上的使用限制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/fstab
mount
user=
root
umount
有一些比较简单的方法可以以不同的用户身份进行卸载,但我认为没有任何直接的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
然后重新启动。