【问题标题】:How to control file access in Windows?如何在 Windows 中控制文件访问?
【发布时间】:2016-01-31 10:53:36
【问题描述】:

Go 提供os.Chmod() 用于设置文件和目录权限。例如,如果我想确保文件只能由当前用户访问,我可以执行以下操作:

os.Chmod("somefile.txt", 0600)

这在 Linux 上效果很好,但在 Windows 上完全没有。在深入研究 Go 源代码后,我遇到了its implementation。似乎 S_IWRITE 是唯一受支持的属性。

如何使用 Go 控制对 Windows 上文件或目录的访问?

【问题讨论】:

    标签: go file-permissions chmod


    【解决方案1】:

    说明

    Windows 不使用传统的 Unix 权限。相反,Windows 通过access control 控制对文件和目录的访问。每个对象都有一个ACL (Access Control List)*,用于控制对对象的访问。

    每个 ACL 基本上都是ACEs (Access Control Entries) 的列表,它确定授予特定受托者(用户、组等)的访问权限。例如,一个文件可能包含一个 ACE,该 ACE 授予特定用户对该文件的读取权限 (GENERIC_READ)。

    通过 Windows API 中的 authorization functions 操作 ACL 和 ACE。

    * 从技术上讲,每个对象都有两个 ACL - 一个 DACL 和一个 SACL

    解决方案

    谢天谢地,学习所有这些功能并不是必需的。我已经将a small Go package named "go-acl" 放在一起,它完成了所有繁重的工作并公开了一个名为(还有什么?)Chmod 的函数。基本用法如下:

    import "github.com/hectane/go-acl"
    
    err := acl.Chmod("C:\\path\\to\\file.txt", 0755)
    if err != nil {
        panic(err)
    }
    

    结果

    Chmod() 函数在文件的 ACL 中创建三个 ACE:

    • 一个给所有者 (WinCreatorOwnerSid)
    • 一个用于组 (WinCreatorGroupSid)
    • 一个给其他人 (WinWorldSid)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-19
      • 2017-03-19
      • 2017-03-13
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      相关资源
      最近更新 更多