如何在 Windows 中控制文件访问?
Posted
技术标签:
【中文标题】如何在 Windows 中控制文件访问?【英文标题】:How to control file access in Windows? 【发布时间】:2016-01-31 10:53:36 【问题描述】:Go 提供os.Chmod()
用于设置文件和目录权限。例如,如果我想确保文件只能由当前用户访问,我可以执行以下操作:
os.Chmod("somefile.txt", 0600)
这在 Linux 上效果很好,但在 Windows 上完全没有。在深入研究 Go 源代码后,我遇到了its implementation。似乎 S_IWRITE
是唯一受支持的属性。
如何使用 Go 控制对 Windows 上文件或目录的访问?
【问题讨论】:
【参考方案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
)
【讨论】:
以上是关于如何在 Windows 中控制文件访问?的主要内容,如果未能解决你的问题,请参考以下文章