我在两台不同的机器上运行 Linux Mint (17.2) 和 Ubuntu (18.04)。当我插入外部硬盘或 USB 闪存驱动器时,驱动器会自动挂载。创建一个目录(例如 /media/ben/FlashDrive/),用户和组设置为“ben:ben”,权限设置为所有者可以读/写,其他人都不能读/写。
我想更改组和组权限全部未来的 USB 闪存驱动器和外部硬盘驱动器。
换句话说,如果我插入 USB 闪存驱动器或外部硬盘驱动器,我希望它自动安装到与之前相同的自动确定的安装点,并将用户设置为当前系统用户,但将组设置为某个特定组(即“用户”),并将组权限设置为只读(而不是无访问权限)。
这个想法是,无论谁插入 USB 闪存盘,系统的任何有效用户都可以读驱动器,但无需手动配置每个驱动器。
到目前为止,我发现的所有说明都需要编辑 /etc/fstab,并且需要指定特定驱动器的 UUID 或设备 ID、硬编码挂载点以及硬编码用户名和组。这意味着 /etc/fstab 需要为每个设备单独更新,并且它对多个用户来说不够灵活。
这可能吗?
答案1
如果您能想到合适的匹配标准,您可以编写一个 udev 规则,然后使用 GROUP:= 操作来设置刚添加的设备的组。请参阅此链接进行讨论。 https://www.tundraware.com/TechnicalNotes/Deconstructing-Linux-udev-Rules/Deconstructing_Linux_udev_Rules.pdf
我不太清楚,但我认为 udev、内核等不会监控 /media/xxxx/device 的变化,只会监控 /dev 和 /sys 目录。所以你可能还有更多工作要做。另一种方法是使用 来inotifywait,
监视 /media 目录,当创建新的挂载点时,使用 更改组chgrp
,或使用 更改权限chmod
。
这是 inotifywait 命令的一个示例。在本例中,/media/greg19 已经存在,因为我已经插入了一根 USB 棒。首先,我拔下该棒,然后将其重新插入。然后,我拔下另一根有两个分区的棒,该棒也已插入。
inotifywait -m -e create -e delete /media /media/greg19
Setting up watches.
Watches established.
/media/greg19/ DELETE,ISDIR BLUELEXAR
/media/greg19/ CREATE,ISDIR BLUELEXAR
/media/greg19/ DELETE,ISDIR BLUELEXAR
/media/greg19/ DELETE,ISDIR GREENUSB2
/media/greg19/ DELETE,ISDIR GREENUSB1
由于某种原因,即使我指定递归模式,它也只会输出在 /media 下创建 userdir 的第一个事件,而不会输出为实际棒创建挂载点的事件。
inotifywait -m -r -e create -e delete /media
设置监视。注意:由于指定了 -r,这可能需要一段时间!监视已建立。
/媒体/创建,ISDIR greg19
但您仍然可以使用 sudo chgrp 更改用户目录。但是,即使使用 sudo,更改设备挂载点的组也存在问题。我认为这是因为该设备是 vfat 设备,并且这些 FS 没有组的概念。因此,您能做的最好的事情就是使用 chmod 将权限更改为 0777。
因此,现在您所需要的只是一个在后台永远运行的 shell 脚本,其中 inotifywait 监视 /media 目录,并让 shell 脚本中的 while 循环从 inotifywait 的输出中读取。
最后一个选项是创建一个 (usesr) systemd 服务来执行您想要的操作,但我不确定如何做到这一点。pgmer6809