[Preface] 印象中,security总与convenience矛盾,虽然有时候inconvenience并不总是那么的显而易见。 [Background] 公司的电脑总是会冷不丁的给你surprise,真所谓“重启就会有奇迹”,某次系统reboot后,我惊奇的发现系统在介于BIOS和Boot Loader之间多了个步骤(user experience蛮好,至少有个进度条),然后就是我的linux dual boot不灵了,kernel都没有解压完就卡在那不动了,windows倒是继续能很happy的boot,一刹那顿时觉得好神奇…… 系统真正起来后才发现windows多了个软件叫SafeBoot(被McAfee收购后,现在学名McAfee Endpoint Encryption) 别的功能不清楚,一个最醒目的feature是disk encryption,经我测试貌似不是full disk的encryption,只是windows所在的那几个分区被加密了,开机的时候那个进度条应该是在解密(把MBR都改了,好强悍,更强悍的是改MBR连告都不告诉一下,算你狠),加了密然后boot时实时解密,所以windows还能很perfect的boot,linux所在的分区并未被加密,按理来说boot应该不会有问题,但是不知道为啥就是卡在那不动,想来必是boot时的实时解密多此一举了,导致没有加密的硬盘反而无法正确读取,真是you don’t know what you know…… [Solution 1: Uninstall] 很多人可能和我一样,第一反应是卸载,眼不见为净,但是这个想法在这儿貌似有点naive,就像fox river一样,有些东西真的是进去简单出来难,搜索到的卸载方法并没有让我实现我的家庭梦想,sbsetup -uninstall 后我得到了如下的错误提示:“Boot protection is still enabled on this machine. The client can not be uninstalled while boot protection is enabled.” 然后搞笑的是disable这个boot protection的option在我client端是没有的(怀疑server端应该是有的,当然我没有授权,呵呵),由于这个boot protection是被写到了MBR,安全模式引导也绕不过,所以我马上想到了…… [Solution 2: Overwrite MBR, then uninstall] 当时的想法是把MBR给覆盖了,然后boot protection估计就没了,然后再uninstall估计就可以过了…… 但是这里面还有个鸡生蛋,蛋生鸡的问题,MBR覆盖掉,没有boot protection(估计就是解密)后,加了密的disk就没办法读了,windows系统都起不来了,你还怎么uninstall…… 好吧,看来加了密的硬盘是个问题…… [Solution 3: Decryption] 到这一步,其实脑子里面还一直想着uninstall,可不是吗,decryption后然后再overwrite mbr,硬盘可以继续保持可读,uninstall就可以实现了,但是天知道解密本身对我来说又有一个不可能完成的任务…… 参照这篇文章,正常解密需要server端配合或者是要有safeboot的专用软盘…… 巧妇难为无米之炊,何况还不是很巧…… [Solution 4: Overwrite MBR, starting SafeBoot with Grub] 终于放弃卸载的想法了,换种思考的方式,linux系统boot不能有safeboot,windows又一定需要safeboot,能不能修改MBR和Grub,同时满足以上两个条件呢,答案是肯定的,前人已经给出了解决方案(Starting SafeBoot with Grub)。 其主要思想就是备份现在被safeboot改过的MBR,然后用grub重新覆盖MBR,这样linux的boot就没有safeboot骚扰了,然后为了让windows能够继续以safeboot进行引导,修改grub的menu.lst文件,在chainloader里加上刚才备份过的safeboot的MBR。 Looks good, isn’t it? 但是最后并没用这个方法,因为据说safeboot每次和server同步后还会再把你的MBR改回去……何况老是整MBR也不是什么安全的事情…… [Solution 5: Walk around] 这也是我最后采用的方法,主要原因是因为其对本机的影响最小,基本上不用做任何修改,缺点是你要另外搞个liveusb,由于我之前本身就做好一个,所以工作量很小,呵呵。 下面具体解释一下,看完不要打我:),启动windows什么也不用做,启动linux时插上usb,设置BIOS从usb引导,这样就绕过了本机的safeboot,也绕过了本机的grub,然后设置liveusb上的grub去引导本机的linux,that’s it。一旦grub的bootloader完成,usb就可以拔了,因为控制权又交回主机硬盘上的linux了。 [Screenshot] 最后截图一张: