【问题标题】:How to block USB storage devices in user space of Linux operating system programatically如何以编程方式阻止 Linux 操作系统用户空间中的 USB 存储设备
【发布时间】:2016-02-18 15:10:53
【问题描述】:

我必须开发功能,当 USB 存储设备连接到 Linux 机器时,我的密码窗口会弹出。如果用户输入正确的密码,设备将继续安装。如果密码错误,用户应该无法访问设备。这就像 Linux 操作系统的端点保护。

我们如何仅在 Linux 用户空间中实现这一点?

这里我不想进行内核模式编程,因为它非常耗时并且涉及与分布范围兼容性相关的问题。

此外,该解决方案应该适用于所有内核版本和 Linux 发行版。

提前致谢。

【问题讨论】:

  • 这不正是polkit 所做的吗?
  • "my 密码窗口 ..." - 不要使用自制软件!而是使用 PAM。
  • 如果你想要密码你最好做加密。阻止 fs 挂载太容易被黑了
  • 内核只允许root挂载设备。因此,如果您希望用户能够挂载设备,则需要一个无论如何都能获得 root 权限的用户空间程序。
  • 没有通用的 Linux USB 自动挂载机制,因此没有符合您要求的解决方案。

标签: c++ c linux linux-kernel linux-device-driver


【解决方案1】:

要限制任何外部 USB 存储媒体,

将负责支持 USB 大容量存储的驱动程序列入黑名单。

例如在 Ubuntu 上,将以下行添加到文件 /etc/modprobe.d/blacklist.conf 的末尾。

# disable usb storage access
blacklist usb_storage

在随后重新启动时,将不支持 USB 存储设备,直到首先加载驱动程序(只有超级用户才能这样做)。

请注意,首先只有超级用户帐户才能修改此黑名单文件。

现在您可以简单地以超级用户身份移除用于 USB 大容量存储的内核模块

rmmod usb_storage

现在只有超级用户可以modprobeinsmod USB 存储驱动程序来启用 USB 存储介质。

可以编写一个以超级用户身份运行的 GUI 应用程序,它可以提示用户输入密码并根据需要加载/删除 usb_storage.ko

请注意,应用程序现在成为攻击的目标,并且根据它存储/验证密码的方式,它很容易被有合理动机的“攻击者”绕过。

另请注意,使用这种方法,它是一个全有或全无的功能,即一旦通过身份验证,所有 USB 端口上的任何 USB 存储介质都可以访问,直到通过卸载 usb_storage.ko 模块再次禁用它们。


为了保护外部 USB 媒体中的数据,

dm-cryptecryptfs 的帮助下开始使用加密存储设备。

基本上您需要先加密外部 USB 存储介质。随后当它连接到系统时,取决于配置:

  • 用户必须在终端上运行几个命令(并提供密码)

  • 系统提示输入密码,一旦提供,尝试挂载加密盘。

请参阅以下wiki,了解有关创建加密外部磁盘和配置 Ubuntu Linux 机器以提示输入密码并在连接时自动挂载加密磁盘的分步指南。

【讨论】:

  • 您如何建议他在实践中执行加密部分?比如说,他有一个朋友送的 U 盘,想从中获取文件,只是想在将 U 盘插入计算机时提示密码。他应该怎么做加密?
  • @hyde 你是对的。我已经更新了处理限制对 ALL USB 存储介质的访问并允许在身份验证时启用它的答案。
  • 我必须将选定的 USB 存储设备列入白名单。如果我删除 usb_storage.ko,那么它将不允许插入和使用选定的 USB 存储设备。
猜你喜欢
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多