在我的 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_ADMIN
为NO
。
答案2
基本上,关闭 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规则允许任何键盘和鼠标