我正在为客户设计一个安全敏感的设置。情况如下:
敏感信息必须存储在可能被未经授权人员访问的服务器上。没有办法以 100% 安全的方式保护硬件。
这是我的方法:
我用 cryptsetup/luks 加密根计算机,然后用 cryptsetup/luks 加密映像并将其安装为虚拟机的硬盘。虚拟机再次具有加密的根 FS。
现在我想阻止任何人在机器运行时访问机器的硬件。我想检测插入其中的未知设备,如 USB 拇指驱动器或 Firewire 设备等。
有没有办法在 udev 中优雅地检测未知设备?到目前为止,我只找到了为已知设备定义操作的方法。但我想为未知设备连接时定义一个操作。
感谢您的输入。
答案1
如果您想要这样的功能,您需要将所有设备视为可疑设备,并且在任何设备插入时都要求只有该设备所有者才能知道的信息。对于您认为之前已获批准的设备,您不能跳过此步骤,因为插入该设备的用户不必是同一个人。
有没有办法在 udev 中优雅地检测未知设备?
udev
无法识别“未知设备”:由于 中有条目,因此它只能识别所有 USB/firewire 设备,或者无法识别任何 USB/firewire 设备/dev/
。未知udev
意味着该设备无法在该系统中使用。并且 ID_VENDOR_ID 和 ID_MODEL_ID 无法让您看到同一品牌和型号的两个设备之间的差异。
一种可能的方法:
看https://wiki.archlinux.org/index.php/Execute_on_USB_insert用于插入设备时执行的基本脚本。这将强制任何设备显示菜单,用户需要验证其是否有权访问。
链接中的规则...
ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"
将在任何尝试安装的设备上运行/media/
并启动脚本“exdongle”(该脚本可能需要进行一些调整,因为它有一个免责声明)。
您认为的“未知”是 Linux 所知道的 USB 特定设备。因此,如果存在 USB 支持,则所有 USB 设备都将被平等对待。设备具有供应商和产品 ID,但这些 ID 对于每个品牌/型号都是唯一的,而不是每个 USB 设备。
唯一具有唯一 ID 的 USB 设备是加密狗(http://en.wikipedia.org/wiki/Software_protection_dongle)。这些往往带有用于验证的软件(因此也不适用于无头系统),但您可能能够将标识保存到文件中并编写类似上述的脚本来针对已知的一组 ID 进行测试。