如何在 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 中控制文件访问?的主要内容,如果未能解决你的问题,请参考以下文章

电脑打开FTP文件夹出错提示Windows无法访问解决方法

如何在 Windows 操作系统上安装 influxdb 并访问管理控制台

如何在Mac OS中访问Windows共享文件夹

如何在windows下访问ubuntu共享文件

如何在局域网内访问 Synology NAS 上的文件

如何在 .NET Core 中修改文件访问控制