C#应用程序级权限大于用户的权限?

时间:2009-08-31 18:18:52

标签: c# permissions

用户schmoe_j是否可以运行将文件复制到schmoe_j无法写入的目录的应用程序?

6 个答案:

答案 0 :(得分:2)

不,文件的权限由文件系统处理,文件系统在系统中的级别比C#代码运行的级别低得多。 C#代码无法直接绕过文件系统安全性。如果应用程序以schmoe_j运行,则无法写入磁盘上schmoe_j没有写访问权限的位置。

一个例外是如果schmoe_j有备份&恢复权限,在这种情况下,他可以写入磁盘上的任何位置。普通用户没有此权限,因为授予这是一项非常危险的权限。

还有其他理论方法 - 例如,如果盒子上有一个不安全的服务,标准用户可以说服该服务写入磁盘上的任意位置。任何此类案件都是一个应该修复的安全漏洞。

答案 1 :(得分:2)

您可以在您的可执行文件中包含一个Manifest,以请求以更高的权限运行该应用程序。

请参阅Adding a UAC Manifest to Managed Code

答案 2 :(得分:1)

我认为通常采用的方式是使用服务(或服务应用程序),该服务在提升的权限下运行,但表面积非常小,没有GUI。用户与在较低权限下运行的应用程序交互,这将执行用户帐户可以执行的操作 - 将文件放在dropoff文件夹中,写入数据库等等。想想IIS,MMC,TrustedInstaller等。

答案 3 :(得分:1)

应用程序将在用户权限下运行,如果用户可以执行此操作,则应用程序无法执行此操作。

但是,应用程序可以尝试模拟其他用户,在这种情况下,它可以访问该目录。这涉及应用程序临时获得另一个用户的权利。这就是ASP.NET经常运作的方式。

最新版本是用户必须提供模拟用户的凭据。

Article证明了这一点。

答案 4 :(得分:1)

他可以运行应用吗?是。它会在尝试复制这些文件时抛出UnauthorizedAccessException,但之前不会。{/ p>

答案 5 :(得分:0)

根据所使用的类,当您没有适当的权限写入目录时,通常会抛出异常。

例如,根据MSDN,在调用File.CreateFile.Copy时,如果调用者没有所需的权限,则会抛出UnauthorizedAccessException