如何防止磁盘安装?

如何防止磁盘安装?

我有一台 Iomega Prestige。该磁盘系列包含一个虚拟 CD 分区,其中包含一个只能在 Windows 计算机上使用的文件加密实用程序。每次我将外部驱动器安装到我的文件系统时,虚拟 CD 分区都会随之安装。

我想阻止虚拟 CD 安装,同时允许其余磁盘顺利安装。因此,问题是:我如何删除虚拟 CD 分区或如何阻止其安装?

我已经看到了几个选项,但它们不起作用:

  • Iomega 制作了一个实用程序来为 W​​indows 系统删除此问题;问题是我没有运行 Windows,而是使用 OS X 10.7。

  • 有一个提示MacOSX提示,但它对于 Lion 来说已经过时了。/etc/fstab在 Lion 中已被弃用,并且diskutil不再提供磁盘的 UUID(至少页面上暗示是这样)。

顺便说一句,不能简单地格式化并重新分区磁盘。虚拟 CD 不会被删除。

答案1

现在,OSX 上可以使用加密实用程序来删除/隐藏虚拟 CD。

Iomega 加密实用程序版本 3.0 适用于 Mac OS:请先阅读

答案2

保持以下程序在后台始终运行,例如通过使用自动启动launchd

#include <CoreFoundation/CoreFoundation.h>
#include <DiskArbitration/DiskArbitration.h>

DADissenterRef BlockMount(DADiskRef disk, void *context)
{
    DADissenterRef dissenter = DADissenterCreate(kCFAllocatorDefault, kDAReturnNotPermitted, CFSTR("forbidden!"));

    CFDictionaryRef description = DADiskCopyDescription(disk);

    // UUID of the disk you don't want to mount:
    CFUUIDRef backupDisk = CFUUIDCreateFromString(NULL, CFStringCreateWithCString(NULL, "3B5315C1-96AE-3471-B43C-2C41CDB12A64", kCFStringEncodingUTF8));

    if (CFDictionaryContainsKey(description, kDADiskDescriptionVolumeUUIDKey)) {
        CFUUIDRef value = CFDictionaryGetValue(description, kDADiskDescriptionVolumeUUIDKey);
        if (CFEqual(backupDisk, value)) {
            return dissenter;
        }
    }
    return NULL;
}


int main (int argc, const char * argv[])
{
    DAApprovalSessionRef session = DAApprovalSessionCreate (kCFAllocatorDefault);
    if (!session)
    {
        fprintf(stderr, "failed to create Disk Arbitration session");
    }
    else
    {
        DARegisterDiskMountApprovalCallback(session, NULL, BlockMount, NULL);
        DAApprovalSessionScheduleWithRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);

        while (true) {
            CFRunLoopRunInMode(kCFRunLoopDefaultMode, 60 /* seconds */, false);
        }

        DAApprovalSessionUnscheduleFromRunLoop(session, CFRunLoopGetCurrent(), kCFRunLoopDefaultMode);
        DAUnregisterApprovalCallback(session, BlockMount, NULL);
        CFRelease(session);
    }
    return 0;
}

找出您不想挂载的卷的 UUID diskutil list(以获取设备名称)并diskutil info读取 UUID。

保存为 main.c 并使用以下命令进行编译(您需要开发人员工具):

cc main.c -o mountstopd -framework Foundation -framework DiskArbitration

在 Mac OS X 10.7.1 上,执行以下操作对我来说刚刚有效(与 OS X Hint 中的内容几乎相同):

首先,找出您不想挂载的卷的设备名称:

diskutil list

部分输出如下:

/dev/disk3
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     Apple_partition_scheme                        *2.2 TB     disk3
   1:        Apple_partition_map                         32.3 KB    disk3s1
   2:                  Apple_HFS DroboBackup             2.2 TB     disk3s3

在此示例中,Drobo备份是实际的分区,也是/dev/disk3s3我们接下来需要的设备。然后找出它的 UUID:

diskutil info /dev/disk3s3

寻找Volume UUID,例如3B5315C1-96AE-3471-B43C-2C41CDB12A64

然后输入以下内容:

sudo touch /etc/fstab
sudo sh -c 'echo "UUID=3B5315C1-96AE-3471-B43C-2C41CDB12A64 none hfs rw,noauto" >> /etc/fstab'

这将阻止磁盘安装。

答案3

我没有 Iomega Prestige 可以测试,但你可以试试 Aaron Burghardt 的磁盘仲裁器公用事业。

从介绍中自述(重点是我的):

Disk Arbitrator 是 Mac OS X 取证实用程序,旨在帮助用户确保在对磁盘设备进行映像处理期间遵循正确的取证程序。

磁盘仲裁器本质上是磁盘仲裁框架的用户界面,它使程序能够参与块存储设备的管理,包括文件系统的自动挂载。启用后,磁盘仲裁器将阻止文件系统的挂载以避免以读写方式安装并破坏证据的完整性。

需要注意的是磁盘仲裁器不是软件写阻止程序 — 它不会改变当前连接的设备的状态,也不会影响新连接的设备以​​强制设备为只读。用户仍然必须小心,不要意外使用诸如 之类的命令写入磁盘dd。由于这个事实,对于大多数健全的程序来说,硬件或软件写阻止程序仍然是可取的。磁盘仲裁器通过其他有用的功能补充了写阻止程序,并消除了“禁用磁盘仲裁”的典型取证建议。

相关内容