我需要创建一个将用于存储机密数据的文件;目标是最终得到一个ACL,该ACL限制对创建时运行的域\用户的访问。但默认设置似乎也允许系统和管理员不受限制地访问。
两个问题:首先,在Windows或.NET中,如果系统和管理员被拒绝访问某个文件,是否会发生可怕的崩溃?
其次,如何从C#实际获得所需的权限?我现在只是在做一个File.Create("myFile.dat");很明显,这个版本不是我应该使用的版本。我找到了一个非常复杂的替代方案,但它似乎假设我知道当前的域名和用户名;这实际上是唯一的方法吗?
谢谢!
发布于 2011-05-04 02:50:09
我建议你看看加密文件系统。它内置于XP Pro、Vista和Windows7(以及服务器产品)中。
它可以让你做你想做的事情。只有加密文件所使用的用户(即与正在运行的应用程序相关联的凭据)才能访问相关文件。即使是本地管理员也无法读取该文件,而不管文件系统权限如何。
您可以使用System.IO.File.Encrypt / Decrypt来执行操作。最好的部分是,用户仍然可以双击文件来打开它。没有密码。不需要自定义应用程序。
请注意,拥有恢复证书的人(通常是域管理员)仍然可以解密文件,但除非您创建自己的加密机制并在每次尝试打开文件时提示用户输入密码,否则您对此无能为力。
发布于 2011-05-04 02:03:39
据我所知,这是不可能的。
除非我弄错了,否则系统可以访问一切,句号。我很确定这就是重点。管理员在能力上是相似的,如果他们甚至不能像那些拥有较少权限的人那样访问文件,他们就不能成为很好的管理员(当然也有例外)。但是,如果系统无法访问该文件,如何在其上完成任何操作?
从逻辑上考虑,我不得不说“不,这是不可能的。”虽然也有可能,我是错的。
发布于 2011-05-04 02:08:49
据我所知,管理员可以访问任何内容,无论您对其设置了什么保护。你可以对文件进行加密,并在你的应用程序中硬编码密钥。
看看System.Io.File.Create的第四个重载。第四个参数是一个System.Security.AccessControl.FileSecurity对象。这应该能起到作用。
https://stackoverflow.com/questions/5873597
复制相似问题