如何将只能安装到 /etc/fstab 中具有条目的驱动器/分区列入白名单?

如何将只能安装到 /etc/fstab 中具有条目的驱动器/分区列入白名单?

在我的 Ubuntu 系统上,我注意到某些文件管理器在打开时可以挂载通过我的 USB 端口之一(作为非 root)连接的任何驱动器。为了防止这种情况发生,我这样配置/etc/fstab

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/vgubuntu-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/nvme0n1p3 during installation
UUID=485794d0-6773-4136-9df9-c8f97fc3c3bc /boot           ext4    defaults        0       2
# /boot/efi was on /dev/nvme0n1p2 during installation
UUID=5E62-20EC  /boot/efi       vfat    umask=0077      0       1
/dev/mapper/vgubuntu-swap_1 none            swap    sw              0       0
#/media/j/sandisk-32GB is my primary USB drive for backups
PARTUUID=d199a40a-b5cc-724b-b70b-1b90e4274ea9 /media/user_xyz/sandisk-32GB ext4 defaults,nofail 0 3

1. 如何防止root驱动器/分区的用户以外的用户自动安装或安装不是/etc/fstab在我的?中指定

2.是否可以进一步限制root安装除白名单之外的驱动器?例如,root尝试执行mount PARTUUID=this-partition-is-not-whitelisted /media/user_xyz/not-whitelisted并失败,除非他们更改我尝试设置的配置。

聚苯乙烯这个细节PARTUUID只是用来传达我要表达的想法 - 我知道它的格式不正确,因此root无法安装它。我使用的是 Ubuntu 22.04 LTS。

答案1

文件管理器的挂载/自动挂载确实是通过以下方式完成的,udisks但是,这一切都经过一个名为的授权机制,polkit该机制定义了操作和规则(谁可以做什么......)。人们可以通过名为 的配置文件覆盖默认设置rules
在这种特殊情况下,该操作称为

org.freedesktop.udisks2.filesystem-mount

您可以通过检查此操作的默认设置

pkaction --verbose --action-id org.freedesktop.udisks2.filesystem-mount

它返回类似这样的内容:

org.freedesktop.udisks2.filesystem-mount:
  description:       Mount a filesystem
  message:           Authentication is required to mount the filesystem
  vendor:            The Udisks Project
  vendor_url:        https://github.com/storaged-project/udisks
  icon:              drive-removable-media
  implicit any:      auth_admin
  implicit inactive: auth_admin
  implicit active:   yes

正如您在最后一行看到的,用户active挂载文件系统的隐式权限设置为yes。您可以通过编写新规则来覆盖它。这不会对您的 中列出的内容产生任何影响/etc/fstab。创建文件

/etc/polkit-1/rules.d/90-disable-automount.rules

包含以下内容:

polkit.addRule(function(action, subject) {
               if (action.id == "org.freedesktop.udisks2.filesystem-mount" ) {
                   return polkit.Result.AUTH_ADMIN;
               }
           });

当您重新启动系统时,任何用户都不应能够安装/自动安装驱动器,除非他们具有管理员权限:系统将提示他们输入管理员密码。如果您也想禁用该提示,请替换AUTH_ADMINNO

答案2

问题的解答1)在这里找到:https://askubuntu.com/questions/1062719/how-do-i-disable-the-auto-mounting-of-internal-drives-in-ubuntu-or-kubuntu-18-04

基本上,关闭 udiks2。

systemctl stop udisks2.service

然后测试,并永久执行:

systemctl mask udisks2

这将阻止“普通”用户自动安装驱动器...您还应该确保他们不在 adm 或 sudo 组中,因为这样他们仍然可以安装驱动器。

正如马库斯·穆勒 (Marcus Müller) 在评论中指出的那样,解决方案2)我认为这不是一件容易的事。我一时想不出好的答案(例如,如果我是 root,我该如何防止自己安装任何驱动器?)。root 必须能够安装驱动器,这是内核启动、加载 RAM 磁盘等的方式。

此外,正如 Guntram Blohm 在评论中指出的那样,他补充道:

systemctl mask udisks2

将防止它在未来被拉回到系统中,这是一件“好事”。

答案3

通过我的 USB 端口之一连接...

所以你的安装条目/etc/fstab,但要处理磁盘热插拔通过USB你可以使用USB卫士

我不知道它是否适用于 Ubuntu,就像适用于 Redhat 一样,但这是一个简单的安装、配置问题/etc/usbguard/usbguard-daemon.conf根据您的喜好进行配置,但默认值可能就足够了。然后在启动usbguard服务之前,你必须创建该/etc/usbguard/rules.conf文件,否则您将不会有任何东西被列入白名单以在 USB 端口上工作,包括您的键盘和鼠标,并且您将拉动电源线重新启动,然后启动到单用户模式进行更正,

当您执行此usbguard generate-policy > /etc/usbguard/rules.conf操作之前,service usbguard start将自动捕获现有的 USB 设备,并且您可以识别文件中的设备rules.conf,其中之一将是您的 USB 连接的磁盘设备,这些设备将通过 id、序列号等具体明确地识别。这将管理什么外部 USB 磁盘在系统上是否工作,您将在 udisks 发现并安装它们之前在 USB 连接级别对其进行管理。

有关一些 usbguard 详细信息,请参阅:usbguard规则允许任何键盘和鼠标

相关内容