我有一台Windows 10 Pro PC,没有域,我不在系统驱动器上使用BitLocker,但已使用BitLocker和密码(没有TPM)对某些固定数据驱动器进行了加密。
当我想解锁这些驱动器时,可以在“文件资源管理器”中选择它们,然后选择Unlock Drive...
,输入密码后,该驱动器将被解密并可以使用。
因为我有几个使用相同密码的驱动器,所以我编写了一个脚本来同时解锁所有这些驱动器。
Unlock-BitLocker -MountPoint X: -Password $myPassword
当以提升的管理员身份执行时,此方法工作正常,但是当我以普通标准用户身份运行脚本时,它将失败:
Get-CimInstance:访问被拒绝
WBEM_E_ACCESS_DENIED(0x80041003)当前用户没有执行该操作的权限。
我假定文件浏览器和PowerShell BitLocker模块都使用相同的Win32 API,为什么一个作为标准用户却另一个却不起作用?
使用时:
manage-bde –unlock E: -rp password
我得到:
BitLocker Drive Encryption: Configuration Tool version 10.0.14393
ERROR: An attempt to access a required resource was denied.
Check that you have administrative rights on the computer.
使用进程监视器,我可以看到对以下注册表项的访问被拒绝:
HKLM\Software\Microsoft\WBEM\CIMOM
我还发现File Explorer内容菜单调用可执行文件:
%systemroot%\System32\bdeunlock.exe
这将显示一个弹出窗口,用于输入密码。
当不使用bdeunlock.exe
任何访问权限时,HKLM\Software\Microsoft\WBEM\CIMOM
将在Process Monitor中显示。因此,它似乎可以在不访问该密钥的情况下解锁驱动器。
看起来两个PowerShell cmdlet都manage-bde.exe
使用WMI:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption"
-ClassName Win32_EncryptableVolume
并且标准用户无权访问。
但是bdeunlock.exe
可以先使用(Bitlocker API文件)中的功能FveOpenVolumeW
,FVEAPI.dll
而无需先使用WMI。
有没有办法以标准用户身份在命令行上解锁Bitlocked固定数据驱动器?
继续我在问题本身中解释的研究,我对此进行了进一步研究。
使用PowerShell cmdlet,Unlock-Bitlocker
因为其代码在每台Windows计算机上均以明文形式提供。
执行cmdlet期间的第一个错误发生在调用时:
Get-CimInstance
-Namespace "root\cimv2\Security\MicrosoftVolumeEncryption" `
-ClassName Win32_EncryptableVolume
我得到一个 Access Denied
@Homey_D_Clown_IT建议更改有问题的WIM对象的安全性,为此,请打开wmimgmt.msc
,右键单击WMI Control (Local)
左侧的节点,然后单击Properties
。选择Security
选项卡,然后找到对象Root\CIMV2\Security\MicrosoftVolumeEncryption
,单击Security
按钮。添加您要允许解锁位锁驱动器的组或用户。检查“允许”Execute Methods
权限。
完成此操作后,标准用户可以使用该manage-bde.exe
工具来解锁驱动器:
manage-bde -unlock X: -pw
问题是,这提示用户输入密码,此时我有四个驱动器要解锁,我希望只输入一次密码。
现在,在PowerShell中使用Unlock-Bitlocker cmdlet会传递上一个错误,但会显示另一个错误:
Get-BitLockerVolumeInternal中的访问被拒绝...
查看PowerShell模块的代码,该代码在代码尝试访问恢复密码时会中断,而这只能由管理员来完成。如果我更改代码以忽略该错误,而只是继续而不是中断,那么它将正常工作。
但这是一个糟糕的技巧,因为我必须拥有模块文件的所有权,更改权限,然后编辑代码。我不应该使用Windows系统文件做的所有事情,再加上Microsoft下次更新PowerShell模块时,我的更改将被覆盖。
一种解决方案是将相关代码段复制到我自己的PowerShell模块中,而改用该模块。那可能甚至不合法。
另一个解决方案是删除recoverypassword:
manage-bde -protectors -delete X: -type recoverypassword
这只给我留了一个用于Bitlocked驱动器的保护器,即普通密码。
为什么从用BitLocker加密的固定数据驱动器中删除恢复密码是一个好主意?
任何管理员都可以看到恢复密码,并用它来解密驱动器WFT!
我的主要目的是保护驱动器上的数据免受他人侵害。有人可以窃取我的PC,启动到Live-CD linux中,并可以访问Windows安装上的管理员帐户。
删除恢复密码后,我可以使用原始Unlock-Bitlocker
cmdlet作为标准用户来解锁驱动器。如上所述,我仍然需要更改WMI对象的权限。
编辑: Windows 10更新后,在这种情况下,14939.222
对的权限root\cimv2\Security\MicrosoftVolumeEncryption
被重置,我不得不再次更改它们。因此,毕竟这似乎不是永久性的解决方案。
由于Windows Update进行了此重置,因此我决定为WMI权限编写更改脚本。我使用的Set-WmiNamespaceSecurity.ps1
是在此提供微软博客文章,然后我可以使用:
.\Set-WmiNamespaceSecurity.ps1 -namespace "root/cimv2/Security/MicrosoftVolumeEncryption" -operation add -account MyUserName -permissions MethodExecute,Enable
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句