gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:18:30 24 4
gpt4 key购买 nike

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

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

这在 Linux 上运行良好,但在 Windows 上完全无效。在深入研究 Go 源代码后,我发现了 its implementation .似乎 S_IWRITE 是唯一受支持的属性。

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

最佳答案

说明

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

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

操作 ACL 和 ACE 是通过 authorization functions 完成的在 Windows API 中。

* 从技术上讲,每个对象都有两个 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:

enter image description here

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

关于go - 如何在 Windows 中控制文件访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33445727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com