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

Jer*_*ska 6 filesystems automounting mount 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
Run Code Online (Sandbox Code Playgroud)

1. 如何防止非用户自动挂载或挂载my 中root指定的驱动器/分区?/etc/fstab

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

PS这个特殊的PARTUUID只是用来传达我的意思 - 我知道它的格式不正确,因此root会导致安装失败。我使用的是 Ubuntu 22.04 LTS。

don*_*sti 7

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

org.freedesktop.udisks2.filesystem-mount
Run Code Online (Sandbox Code Playgroud)

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

pkaction --verbose --action-id org.freedesktop.udisks2.filesystem-mount
Run Code Online (Sandbox Code Playgroud)

它返回类似这样的内容:

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
Run Code Online (Sandbox Code Playgroud)

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

/etc/polkit-1/rules.d/90-disable-automount.rules
Run Code Online (Sandbox Code Playgroud)

包含以下内容:

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

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


num*_*er9 3

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

\n

基本上,关闭 udiks2。

\n
systemctl stop udisks2.service\n
Run Code Online (Sandbox Code Playgroud)\n

然后测试,并永久执行:

\n
systemctl mask udisks2\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

正如 Marcus M\xc3\xbcller 在评论中指出的那样,我认为2)的解决方案并不简单。我无法立即想出一个好的答案(例如,如果我是root,我如何防止自己安装任何驱动器?)。root 必须能够挂载驱动器,这就是内核启动、加载 RAM 磁盘等的方式。

\n

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

\n
systemctl mask udisks2\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

  • 您可以删除 udisks2,但您不能确定您永远不会安装将其拉回的东西。这就是为什么您应该执行 `systemctl mask udisks2`,这确保即使稍后以某种方式安装了软件包,`systemctl ` 不会启动它。在我的系统上,当我安装了名为“bcompare”的商业软件包时,“udisks2”被重新安装 - 不知道为什么需要“udisks2”,但我在这里提到这一点是为了表明“udisks2”可以在您不安装时安装期待它。 (2认同)