Go 提供os.Chmod()用于设置文件和目录权限。例如,如果我想确保文件只能由当前用户访问,我可以执行以下操作:
os.Chmod("somefile.txt", 0600)
这在 Linux 上工作得很好,但在 Windows 上却毫无作用。在深入研究 Go 源代码后,我发现其实施。这好像是S_IWRITE
是唯一受支持的属性。
如何使用 Go 控制对 Windows 上的文件或目录的访问?
解释
Windows does not use traditional Unix permissions. Instead, Windows controls access to files and directories through access control. Each object has an ACL (Access Control List)* which controls access to the object.
每个 ACL 基本上都是一个列表ACE(访问控制条目)它确定授予特定受托者(用户、组等)哪些访问权限。例如,文件可能包含授予特定用户读取访问权限的 ACE(GENERIC_READ
) 到文件。
操作 ACL 和 ACE 是通过授权功能在 Windows API 中。
* technically each object has two ACLs - a DACL and a SACL
Solution
值得庆幸的是,没有必要学习所有这些功能。我已经整理好了一个名为“go-acl”的小 Go 包它完成了所有繁重的工作并公开了一个名为(还有什么?)的函数Chmod
。基本用法如下:
import "github.com/hectane/go-acl"
err := acl.Chmod("C:\\path\\to\\file.txt", 0755)
if err != nil {
panic(err)
}
Results
The Chmod()
函数在文件的 ACL 中创建三个 ACE:
- 一份给业主(
WinCreatorOwnerSid
)
- 一个为团体(
WinCreatorGroupSid
)
- 给其他人一份(
WinWorldSid
)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)