关于安全性:从网络共享运行“部分受信任”的.NET程序集

关于安全性:从网络共享运行“部分受信任”的.NET程序集

Running “partially trusted” .NET assemblies from a network share

当我尝试从网络共享(映射到驱动器)运行.NET程序集(boo.exe)时,它失败了,因为它仅部分受信任:

1
2
3
4
5
6
7
8
9
10
11
12
13
Unhandled Exception: System.Security.SecurityException: That assembly does not allow partially trusted callers.
   at System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly asm, PermissionSet granted, PermissionSet refused, RuntimeMethodHandle rmh, SecurityAction action, Object demand, IPermission permThatFailed)
   at BooCommandLine..ctor()
   at Program..ctor()
   at ProgramModule.Main(String[] argv)
The action that failed was:
LinkDemand
The assembly or AppDomain that failed was:
boo, Version=0.0.0.0, Culture=neutral, PublicKeyToken=32c39770e9a21a67
The Zone of the assembly that failed was:
Intranet
The Url of the assembly that failed was:
file:///H:/boo-svn/bin/boo.exe

根据博客文章中的说明,我向.NET配置中添加了一个策略,以完全信任所有以file:///H:/*作为其URL的程序集。 我通过在.NET Configuration中的"评估程序集"工具中输入URL file:///H:/boo-svn/bin/boo.exe并注意到boo.exe具有Unrestricted权限(该权限在策略之前没有此权限)来验证这一点。

即使获得许可,boo.exe也不会运行。 我仍然收到相同的错误消息。

我该怎么做才能调试此问题? 是否有另一种方法可以从网络共享运行"部分受信任的"程序集,而不必为我要运行的每个程序集更改某些内容?


使用.NET 3.5 SP1,从UNC共享运行的.NET程序集具有完全权限。

有关变通办法和讨论,请参见Brad Abrams的"允许从网络共享运行.exes",最后,后续的.NET 3.5 SP1允许从网络共享启动托管代码。


我按照Johnny Hughes的博客文章"通过网络共享运行.Net应用程序"中的说明使用caspol解决了该问题:

1
caspol -addgroup 1.2 -url file:///H:/* FullTrust

看来用于管理策略的.NET配置GUI根本不起作用。


看一下" caspol.exe"程序(.NET运行时提供)。您将必须在尝试从中运行应用程序的计算机上执行此操作。我无法"标记"和组装(可能只是我自己)。但是,使用caspol并为我的应用LocalIntranet_Zone设置适当的权限,可以解决类似的问题。

我听说过(但尚未尝试过),. NET 3.5 sp1删除了此严格的安全要求(默认情况下,不允许.NET程序集驻留在共享上)。


我认为您想将AllowPartiallyTrustedCallers属性添加到您的程序集。该错误消息表明正在完全调用您的boo.exe程序集中的某些内容,并且boo.exe没有允许它的此属性。


推荐阅读