c# - 写入没有读取权限的文件

标签 c# .net windows file-permissions acl

我正在尝试用 C# 在本地 Windows 帐户上实现 Bell-La Padula 模型,在这个模型中,较低安全级别的用户可以写入属于较高安全级别的文件而无需读取它! 我已经为这样的文件添加了权限

file.txt : read [deny] - write [Allow]

现在我正在研究允许用户将文本附加到 file.txt 而无需读取它。 我用过这个:

using (FileStream aFile = new FileStream(filename, FileMode.Append, FileAccess.Write))
                using (StreamWriter sw = new StreamWriter(aFile))
                {
                    sw.WriteLine(DateTime.Now.ToString() + " Modified BY :" + username + Environment.NewLine);
                    sw.WriteLine(textBox1.Text);
                    sw.WriteLine("---------- END User Edition --------------");
                }

当我从管理员帐户运行该程序时,它起作用了,但是当我尝试从 Guset 帐户运行它时,它引发了异常:您无法访问此文件!

我尝试在开始编辑之前添加读取权限并在完成后将其删除,但文件权限从未改变。

是否有任何编程方式可以实现该目的,或者允许我的应用程序在 guest 帐户中运行时对文件生效?

最佳答案

花了一点时间,但弄清楚了。不得不使用 procmon 来解决这个问题。你的代码没问题。但是,您需要正确设置权限。

对于您的文本文件,您需要将有限的帐户权限授予“只写”。不要检查拒绝列下的任何内容。因为如果你这样做,拒绝访问将胜过其他一切。您还需要授予该帐户读取属性读取扩展属性权限。

您或许可以使用 icaclscacls 完成同样的事情。以下是有关如何手动执行此操作的手动说明。这是基于Windows 10(Win7应该类似):

  1. 右键单击文件

  2. 点击属性。

  3. 切换到“安全”选项卡。

  4. 点击“编辑”按钮

  5. 点击“添加...”按钮

  6. 找到受限用户帐户。

  7. 返回权限选项卡,选择帐户。

  8. 取消选中除“写入”复选框之外的所有内容。 enter image description here

  9. 单击“确定”关闭此对话框。

  10. 点击“高级”按钮。

  11. 选择帐户并点击“编辑”按钮。

  12. 在下一个对话框中,单击“显示高级权限” enter image description here

  13. 确保选中以下复选框。

    • 读取属性
    • 读取扩展属性
    • 创建文件/写入数据
    • 创建文件夹/附加数据
    • 写入属性
    • 编写扩展属性

      enter image description here

  14. 在所有对话框上单击“确定”。

关于c# - 写入没有读取权限的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34696198/

相关文章:

c# - 为什么 type.getConstructor 将类型数组作为参数?

c# - Web API 自托管客户端配置

c# - 完成 TPL 数据流链

windows - 打开不在同一目录中的文件

c# - 到处查找枚举转换为字符串

c# - 为什么 Double.TryParse() 对于包含 double.MaxValue 或 double.MinValue 的字符串返回 false?

windows - 推荐开源或免费软件工具来检查两台服务器之间的网络流量

windows - 在 Windows 上发送数据报时出现 EACCES 错误

c# - 指定最大长度属性以匹配 varchar(max)

.net - 德尔福棱镜 : Does BinaryWriter "Write method" work the same as Writeln method from Delphi?