ter*_*don 10 permissions udev automounting usb-drive
我正在尝试将特定的 USB 驱动器设置为始终以只读方式安装。如果我插入它,它被视为sdb具有单个分区,sdb1. 以下是一些相关的udevadm行(当然不是整个输出):
$ udevadm info -a -n /dev/sdb1
looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4/2-1.4:1.0/host21/target21:0:0/21:0:0:0/block/sdb/sdb1':
KERNEL=="sdb1"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="976768002"
ATTR{stat}==" 473 30586 33938 3460 5 0 40 1624 0 2268 5084"
ATTR{partition}=="1"
Run Code Online (Sandbox Code Playgroud)
好的,所以我写了以下udev规则并将其保存为/etc/udev/rules.d/10-usbdisk.rules:
SUBSYSTEM=="block",
ATTR{size}=="976768002",
MODE="0555"
Run Code Online (Sandbox Code Playgroud)
根据此,使用size应该是足够的,但我也尝试过其他的排列。在任何情况下,规则似乎都被读取了(再次,选定的输出行,您可以在这里看到整个输出:
$ udevadm test $(udevadm info -q path -n /dev/sdb1) 2>&1
[...]
read rules file: /etc/udev/rules.d/10-usbdisk.rules
[...]
MODE 0555 /etc/udev/rules.d/10-usbdisk.rules:4
Run Code Online (Sandbox Code Playgroud)
因此,它看起来像应适用的规则,它看起来就像MODE="0555"是正确的语法。但是,当我真正插入磁盘时,我可以愉快地在其上创建/删除文件。
操作系统:Debian 测试 (LMDE)
那么,我做错了什么?如何使用 udev 1自动将特定 USB 驱动器挂载为只读?
1我知道如何使用 fstab 执行此操作,但 gvfs 会忽略 fstab 设置。我的目标是让它在 GUI 中以只读方式自动安装。据推测,这必须以某种方式通过 udev 或 gvfs 完成。
好的,总结是 Nautilus 使用 GVFS,您需要在读取 fstab 条目时告诉 udev 也使用 GVFS,您可以使用:
/dev/block-device /mount/point auto x-gvfs-show,ro 0 0
Run Code Online (Sandbox Code Playgroud)
x-gvfs-show 会告诉 udev 和任何有兴趣使用 GVFS 助手挂载文件系统的人,因此 gvfs 拥有所有控制挂载、卸载、移动挂载点等。
让我们看看我们是否了解如何使用 GUI(特别是 Nautilus)在现代 Linux 系统中安装驱动器:
Nautilus 使用GVFS作为后端,将 FTP、SMB、块设备等挂载到文件系统中。GNOME 为这种提议设计的工具称为磁盘,它是一种修改 GVFS 行为的工具。现在,乐趣来了。
Nautilus 会忽略未使用 GVFS 挂载的任何内容(例如使用 fstab),并使用 udev 为您提供非常基本的控制(Nautilus 不会要求 GVFS 卸载或挂载未使用 GVFS 操作的设备,包括 udev, fstab、mount 和任何其他 blob),例如卸载和挂载。使用存储在 fstab/udev 中的权限和选项,您可以相应地使用这些文件系统,但您不能使用 GVFS 修改行为。如果使用 挂载了某些东西sudo mount -o rw /dev/sda3,nautilus 会告诉 udev 它没有修改挂载点的权限,因此它将责任传递给 udev,后者又向 polkit 请求权限。如果您使用过 GVFS,nautilus 本身在没有权限的情况下卸载设备,也没有对话框等。