如何在Windows中控制文件访问?

Nat*_*man 2 file-permissions chmod go

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

os.Chmod("somefile.txt", 0600)
Run Code Online (Sandbox Code Playgroud)

这在Linux上很有用,但在Windows上绝对没有.在深入研究Go源代码之后,我遇到了它的实现.似乎S_IWRITE是唯一支持的属性.

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

Nat*_*man 9

说明

Windows不使用传统的Unix权限.相反,Windows通过访问控制来控制对文件和目录的访问.每个对象都有一个ACL(访问控制列表)*,用于控制对象的访问.

每个ACL基本上是一个ACE(访问控制条目)列表,用于确定授予特定受托者(用户,组等)的访问权限.例如,文件可能包含ACE,授予GENERIC_READ该文件特定用户读取访问权限().

操纵ACL和ACE是通过Windows API中的授权功能完成的.

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

值得庆幸的是,没有必要学习所有这些功能.我已经整理了一个名为"go-acl"的小型Go包,它可以完成所有繁重工作,并公开一个名为(还有什么?)的函数Chmod.基本用法如下:

import "github.com/hectane/go-acl"

err := acl.Chmod("C:\\path\\to\\file.txt", 0755)
if err != nil {
    panic(err)
}
Run Code Online (Sandbox Code Playgroud)

结果

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

在此输入图像描述

  • 一个为所有者(WinCreatorOwnerSid)
  • 一组(WinCreatorGroupSid)
  • 一个人为其他人(WinWorldSid)