2

我有一个允许用户存储和检索文件的 Windows 桌面应用程序(用 Delphi 编写)。

  1. 应用程序将这些文件存储在单个网络共享文件夹 (Active Directory) 中。
  2. 应用程序的各个用户并不都有查看所有文件的权限,这些权限由应用程序控制。

目前我们必须允许应用程序的每个用户访问共享文件夹,以便恶意用户可以找到该目录并获得对所有文件的访问权限。

有没有一种方法可以让应用程序充当特定用户,这样只有“应用程序作为用户”而不是每个人都需要共享文件夹的权限?

4

3 回答 3

5

您需要:

1)以所需用户身份运行应用程序。

2)在访问共享文件夹之前,让您的代码通过LogonUser()and或其他类似功能以可编程方式模拟所需的用户。ImpersonateLoggedOnUser()完成使用该文件夹后,不要忘记停止模拟。

于 2013-05-08T17:38:50.920 回答
1

不直接,不。该应用程序与其用户拥有完全相同的权利。这是操作系统安全模型的一部分。如果我不得不处理这样的事情,我会这样做:

创建作为服务运行的第二个程序,并将其设置为在有权访问共享文件夹的用户帐户下运行。它应该实现某种验证逻辑,并监听传入的消息。(它使用什么确切的方法取决于你,但你实际上是在创建一个服务器。)

您的桌面应用程序在受限用户帐户下运行。要请求文件,它会向服务器发送一条消息,在该消息中识别用户及其发出的请求。

服务器检查请求,如果有效,则检索文件并将其传递回用户应用程序。如果不是,它应该返回某种错误消息。

于 2013-05-08T17:23:45.967 回答
1

不是标准文件共享——应用程序总是在登录用户的安全上下文中运行。

我可以看到两个明显的解决方案:

  1. 使用您已有的 AD 安全和用户帐户来修改共享文件夹中文件的权限。这仅在您的应用程序中的安全性已经可以映射到 AD 安全性对象时才有效。如果您需要允许模拟(例如,管理员从另一个用户会话以他或她自己的身份“登录”应用程序),那么您将需要非常熟悉各种 Windows 安全 API。
  2. 编写一个服务器端组件来处理应用程序的身份验证机制并向客户端提供文件列表和内容。

有可能#2 可以使用 WebDAV、FTP/SFTP/FTPS 或其他一些“已经完成”的文件传输协议来实现,您可以使用这些协议来节省一些工作。

于 2013-05-08T17:25:42.007 回答