安全的使用Everything

相信大部分用过Everything的朋友们都再也离不开它了,我也一样。作为一个现今已不多见的“键盘流”,日常的大部分程序我基本都直接从Everything中启动,少了纷乱的快捷方式,桌面也清爽了不少。

Everything由于核心原理建立在NTFS的底层机制上,所以在Vista/Win7中不可避免的必须以提升的权限运行(UAC),不过这对与大多数PC玩家来说早已不算什么障碍。但你是否留意过,通过Everything启动的任何程序或打开的任何文件,也都继承了其拥有的提升权限,这对于重度依赖它的玩家来说,却是一个非常致命的隐患。当你从Everything中启动了Total Commander,又从Total Commander中启动其它应用,这整个程序链全都跑在不受约束的管理员权限下,对系统安全构成了严重的威胁。

那么,如何才能避免这种权限提升的传递呢?

好在Everything本身提供了非常全面的扩展机制,只要修改其everything.ini文件就可以修补这个安全漏洞了。打开ini文件,搜索“%1”便可以找到用于Everything启动其它程序的选项将其修改为:

explore_folder_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "%SystemRoot%explorer.exe" /n,/e,"%1")
explore_folder_path_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "%SystemRoot%explorer.exe" /n,/e,/select,"%1")
open_file_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "%1")
open_folder_path_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "%SystemRoot%explorer.exe" /n,/e,"$parent(%1)")
open_folder_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "%SystemRoot%explorer.exe" /n,/e,"%1")

如果你用的是Total Commander作为文件管理器,那么后两行需要改为:(别忘了把“X:TotalCmd”替换为Total Commander的实际路径)

open_folder_path_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "X:TotalCmdTotalCmd.EXE" /t /o /r="$parent(%1)")
open_folder_command=$exec("%SystemRoot%System32runas.exe" /trustlevel:0x20000 "X:TotalCmdTotalCmd.EXE" /t /o /r="%1")

经过上述修改后,你再从Everything中启动的程序或打开的文件,就只有正常的受限权限了。但由于Windows自带的“runas.exe”使用console方式运行,会在启动瞬间弹出一个一闪即逝的“黑窗口”。如果你不习惯的话,可以去下载一个“Hidden Start”,然后将上述ini文件中的内容替换为:

explore_folder_command=$exec("X:hstart.exe" /nonelevated ""%SystemRoot%explorer.exe" /n,/e,"%1"")
explore_folder_path_command=$exec("X:hstart.exe" /nonelevated ""%SystemRoot%explorer.exe" /n,/e,/select,"%1"")
open_file_command=$exec("X:hstart.exe" /d="$parent(%1)" /nonelevated "%1")
open_folder_path_command=$exec("X:hstart.exe" /nonelevated ""%SystemRoot%explorer.exe" /n,/e,"$parent(%1)"")
open_folder_command=$exec("X:hstart.exe" /nonelevated ""%SystemRoot%explorer.exe" /n,/e,"%1"")

或对于Total Commander:(别忘了把“X:TotalCmd”替换为Total Commander的实际路径,“X:HStart”替换为Hidden Start的实际路径)

open_folder_path_command=$exec("X:HStartHStart.exe" /nonelevated ""X:TotalCmdTotalCmd.EXE" /t /o /r="$parent(%1)"")
open_folder_command=$exec("X:HStartHStart.exe" /nonelevated ""X:TotalCmdTotalCmd.EXE" /t /o /r="%1"")

2010.6.25 更新: open_file_command 配置中给 hstart.exe 增加 /d 参数指定程序的启动路径为程序所在位置。

《安全的使用Everything》有35个想法

  1. 在win7用里改了上面的语句,在everything内打开文件只是闪了一下黑框就没反应,感觉结果是只单独运行了”%SystemRoot%System32runas.exe”这一段,后面跟的trustlevel参数跟”%1″都没有发生作用,请问系统环境还有什么要修改的吗?

      1. showtrustlevels结果只有一个0x20000 ,这方面应该没有不同。
        在cmd里运行runas /turstlevel:0X20000 能作用,everything里面调用就有问题。

  2. 我用的不是administrator账户,修改后用everthing打开安装程序提示必须以administrator登陆才行。请指教。谢谢

    1. 你是采用runas还是hstart的方式?前者可能需要你先用“runas /showtrustlevels”找到在你的环境里可用的level数值;后者应该不存在这个问题。

      1. 刚刚的想法是错的
        又有点新的想法
        explore_folder_command=$exec(“%SystemRoot%explorer.exe” /n,/e,”%1″)
        explore_folder_path_command=$exec(“%SystemRoot%explorer.exe” /n,/e,/select,”%1″)
        open_folder_path_command=$exec(“%SystemRoot%explorer.exe” /select,”%1″)
        open_file_command=$exec(“%SystemRoot%SysWOW64runas.exe” /trustlevel:0x20000 “%1”)
        open_folder_command=$exec(“%1”

      1. 确实

        explore_folder_command=$exec(“%SystemRoot%explorer.exe” /n,/e,”%1″)
        explore_folder_path_command=$exec(“%SystemRoot%explorer.exe” /n,/e,/select,”%1″)
        open_folder_path_command=$exec(“%SystemRoot%explorer.exe” /select,”%1″)
        open_file_command=$exec(“%SystemRoot%SysWOW64runas.exe” /trustlevel:0×20000 “%1″)
        open_folder_command=$exec(“%1″)
        我觉得应该照这样修改 你用高权限打开explorer.exe,也不会有权限的问题

        1. 二不二阿侬
          他原来的不好用可能是explorer参数问题
          但你这么把目录explorer的runas全去掉
          作者降权限的目的不就没了。。。
          本来就是说explorer从everything开启后会继承admin权限,而用户又不知道,继续使用后所有从中执行的东西都是admin权限了。

  3. Win7下,Everything不能在电脑启动后自动运行,因为它要管理员权限。即使把它放到自动运行中,也不行。请问有什么解决办法没?

  4. 与上面3楼的回复情况相同,按照本文方法修改ini后,运行程序无法打开查到的文件与文件夹,只有黑屏一闪而过

    trustlevels也只显示出0×20000

    望解答

    1. 有一点需要注意的是,修改everything.ini时一定要先关闭Everything程序(须要完全退出),否则修改的内容会被冲掉。

  5. everything作者说可通过安装服务的方式运行,这样启动everything时不会在要求提权,然而服务可以正常安装上,启动时却无效,还是要求提权,不知道为什么。

  6. 我在新装的笔记本(Win7 64位)下使用everything时发现,能够搜索到文件,但不能点击右键打开路径,我尝试过用同样版本的everything在同样版本的操作系统,的另一台式机下可以打开的,估计和我的笔记本的安装软件有关。的不知道大家有没有建议

  7. open_file_command=$exec(“%SystemRoot%System32runas.exe” /trustlevel:0x20000 “%1”)
    改成这一句后,无法直接打开 *.doc 文件了,估计 runas 只能执行 可执行 文件吧,不会使用系统的文件关联。

    1. (接上面)
      用hstart则可以:
      hstart.exe /shell /noelevate “e:tmptmp.doc”
      PS:我用的hstart是4.2版,文中hstart的参数可能写错了,是“/noelevate”不是“/nonelevate”(no[n])。

发表评论

电子邮件地址不会被公开。 必填项已用*标注