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

2023-11-23

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:

enter image description here

  • 一份给业主(WinCreatorOwnerSid)
  • 一个为团体(WinCreatorGroupSid)
  • 给其他人一份(WinWorldSid)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何控制Windows中的文件访问? 的相关文章

  • 在 Go 中获取机器 epsilon 的最简单方法

    在 Go 中获取机器 epsilon 的最简单方法是什么 浮点数的其他方面 例如精度 最小指数 最大指数 摆动等 又如何呢 我意识到有一个 math const 包 其中包含不同浮点类型的最大值和最小值 http golang org sr
  • 如何检查我的 golang 应用程序是否使用 Boringcrypto 而不是本机 golang crypto?

    上下文 我正在阅读多篇有关使我的 golang 应用程序符合 FIPS 要求的文章 换句话说 使我的应用程序使用 Boringcrypto 而不是本机 golang crypto https kupczynski info posts fi
  • 读取一个文本文件,替换其中的单词,输出到另一个文本文件

    所以我试图在 GO 中编写一个程序来获取一个充满代码的文本文件并将其转换为 GO 代码 然后将该文件保存到 GO 文件或文本文件中 我一直在试图弄清楚如何保存对文本文件所做的更改 但我可以看到更改的唯一方法是通过 println 语句 因为
  • 带 cookie 身份验证的 Gorilla websocket

    这是我的设置 我正在构建一个带有用户登录的服务 使用 Negroni 和 Gorilla 登录后 用户会获得一个会话 cookie 服务器使用该会话 cookie 来授权受保护的端点 受保护的端点之一允许用户 客户端与服务器打开 Webso
  • 将绝对路径和相对路径组合起来得到新的绝对路径

    我正在编写一个程序 其中一个组件必须能够采用给定的路径 例如 help index html or help 和基于该位置的相对路径 例如 otherpage index html or sub dir of help or help2 h
  • 具有多个等待组的管道中通道范围内的死锁

    我正在练习通过同时将计算分为 100 组来计算阶乘的挑战 我解决了 WaitGroups 上的很多问题 但仍然处于calculateFactorial函数我在通道部分的范围上陷入了僵局 希望有人能指出这个问题 谢谢 package main
  • 如何从脚本向 sudo 提供密码?

    请注意 这是在我的本地计算机上运行的来宾虚拟机 VBox 我不担心安全性 我正在编写一个将在 Linux Ubuntu VM 上执行的脚本myuser用户 该脚本将在下面创建一个非常大的目录树 etc myapp 目前我必须手动完成所有这些
  • 如何使用golang中通过引用传递的索引访问切片中的元素

    我将切片的引用传递给函数 并且我正在函数内的切片中进行更改 我还尝试使用索引访问切片中的元素 它在 golang 中抛出异常 通过引用传递的索引访问切片中的元素的最佳方法是什么 您可以在此处找到示例代码 参考 http www reddit
  • Go 中的切片分块

    我有一个切片 其中包含约 210 万条日志字符串 我想创建一个切片切片 其中字符串尽可能均匀分布 这是我到目前为止所拥有的 logs is a slice with 2 1 million strings in it var divided
  • golang从sdin扫描一行数字

    我正在尝试从标准输入读取输入 3 2 1
  • 在 Go 中执行字节数组

    我正在尝试在 Go 程序中执行 shellcode 类似于使用其他语言执行此操作的方式 示例 1 C 程序中的 Shellcode https stackoverflow com questions 16626857 shellcode i
  • 如何使用 Java 原生接口从 Java 调用 Go 函数?

    可以通过以下方式调用 C 方法JNA https en wikipedia org wiki Java Native AccessJava 中的接口 如何使用 Go 实现相同的功能 package main import fmt impor
  • 如何在 Go 应用程序中处理打开/关闭数据库连接?

    我的 Web API 应用程序中有一组函数 他们对 Postgres 数据库中的数据执行一些操作 func CreateUser db err sql Open postgres user postgres password passwor
  • for 循环初始值设定项中的结构

    知道为什么 for 循环初始值设定项中的这个结构表达式在编译时会出现语法错误吗 在这种情况下 指向结构的指针工作正常 但 ofc 我需要如下所示的局部变量 感谢您的建议 type Request struct id int line byt
  • 如何在运行“go test”时排除或跳过特定目录[重复]

    这个问题在这里已经有答案了 go test go list grep v vendor coverprofile testCoverage txt 我正在使用上述命令来测试文件 但有 1 个名为 Store 的文件夹我想从测试中排除 怎样才
  • 匿名结构和空结构

    http play golang org p vhaKi5uVmm http play golang org p vhaKi5uVmm package main import fmt var battle make chan string
  • Golang 正则表达式命名组和子匹配

    我正在尝试匹配正则表达式并获取匹配的捕获组名称 当正则表达式仅与字符串匹配一次时 这是有效的 但如果它与字符串匹配多次 SubexpNames不返回重复的名称 这是一个例子 package main import fmt regexp fu
  • 模板中的 bson.ObjectId

    我有一个具有 bson ObjectId 类型的结构 例如如下所示 type Test struct Id bson ObjectId Name string Foo string 我想在 html 模板中呈现它 Name Food a h
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req

随机推荐

  • 动态库中的 libstdc++ 静态链接

    为了理解问题 我应该告诉您更多有关加载动态库的程序的信息 这是半条命专用服务器 它使用位于可执行文件旁边的旧 libstdc 为了避免出现问题 当使用新标准库中的功能时 我通常将我的项目静态链接到 libstdc 我的朋友告诉我 如果加载
  • XSD 验证错误:元素“{http://www.example.com}Scope”:该元素不是预期的元素。预期是(范围)

    我创建了以下 XSD 使用 Eclipse
  • 如何在sql server中在两个二进制类型之间进行按位异或?

    根据这个链接 按位运算符 Transact SQL 我们可以在二进制和 int smallint tinyint 之间进行按位运算 反之亦然 但是如何在 sql server 中在两个二进制类型之间进行按位异或呢 或者 如果这是不可能的 我
  • SCNPhysicsWorld错误

    我一直在摆弄 swift 并试图让物理世界正常工作 这是我得到的错误 i386 架构的未定义符号 OBJC CLASS SCNPhysicsWorld 引用自 GameViewController o 中的 TFC3sk218GameVie
  • 从控制台应用程序发送电子邮件时导致套接字异常的原因是什么?

    我正在尝试编写一个基本的控制台应用程序来发送电子邮件 问题是我不断收到 Socket 异常 尝试以访问权限禁止的方式访问套接字 xxx xxx x xxx 25 我关闭了 Windows 防火墙 但它没有改变任何东西 我尝试在指定或不指定凭
  • 比较 2 个自定义对象 - C#

    我需要在基类中编写一个通用方法 该方法接受 2 个对象作为参数并比较它们是否相等 Ex public abstract class BaseData public bool AreEqual object O1 object O2 Need
  • ARM 上的 x86 Docker 镜像

    我有一个由 x86 计算机构建并上传到 Amazon ECR 的 Docker 映像 我正在尝试在 ARM 机器上运行此映像 但是 我得到以下信息 sudo docker run 1b3ed34937e8 WARNING The reque
  • 决定在运行时序列化哪些属性

    假设我必须按级别序列化 Car 类的对象 例如内部和公共 公共级别中的某些属性不应序列化 因为它们是内部的 目前 我能想到的实现此目的的 最简单 方法是使用继承 class CarPublic public int PropX get se
  • 如何在 HTML“选项”标签上显示工具提示?

    无论是使用纯 HTML 还是 jQuery 辅助 JavaScript 如何在个人上显示工具提示
  • 使用 AVPlayer 和 AVAssetExportSession 进行缓存

    我想使用 AVPlayer 缓存渐进式下载视频 如何将 AVPlayer 的项目保存到磁盘 我正在尝试在播放器的 currentItem 已完全加载 上使用 AVAssetExportSession 这段代码给了我 AVAssetExpor
  • Post/Redirect/Get 上的整页重新加载忽略缓存控制

    我有一个加载大量图像 CSS 和 JavaScript 的页面 我添加了一个远期的 Expires 标头 并将这些外部依赖项上的 Cache Control 设置为 public 以便它们应该被缓存 但每次我执行 Post Redirect
  • 运行bash脚本时自动输入密码[重复]

    这个问题在这里已经有答案了 例如 假设我有一个脚本说 bin bash sudo setpci s 00 02 0 F4 B 00 如何将 root 密码放入脚本中 以便在读取和执行 sudo 行时接受它作为密码 这样我就不必手动输入 产卵
  • MySQL 中 UNIX_TIMESTAMP 和 NOW() 的区别

    我有一个博客 用户可以发表评论 我插入他们发表评论的时间NOW 然后使用date j M Y stored timestamp 显示他们发布的时间 我想知道 NOW 是否返回locatime of the end user or the l
  • EntityManager查询后不刷新数据

    我当前的项目使用 HSQLDB2 0 和 JPA2 0 The scenario is I query DB to get list of contactDetails of person I delete single contactIn
  • Java 中的模拟文件 - 模拟内容 - Mockito

    我对模拟还很陌生 我一直在尝试模拟实际内容 本质上仅在内存中创建一个虚拟文件 以便在任何时候都不会将数据写入磁盘 我尝试过一些解决方案 例如模拟文件并模拟尽可能多的我能找出的属性 然后使用文件写入器 缓冲写入器写入其中 但这些解决方案效果不
  • android 工具链缺少 crtbegin_so.o (自定义构建)

    我使用 android build gcc sh 脚本将 gdc 与 gcc 一起编译 并在 build core definitions mk 中包含了一个新的存根 以在构建过程中处理 D 语言文件 我知道此时编译一切正常 但我的问题是链
  • 如何创建带有可重写变量的 PayPal 按钮

    您好 我想创建一个具有动态设定金额的贝宝购买按钮 我想通过表单内的文本输入字段传递金额 并通过隐藏字段传递 item number 问题是 无论我做什么 我都会从 paypal 网站上获得一个加密的 s xclick 按钮 此按钮不允许将隐
  • 2D 平台游戏两个轴的碰撞问题

    我正在使用 C 和 SDL 开发一个小型 2D 平台游戏 格斗游戏 但在碰撞检测方面遇到了很多麻烦 这些关卡由一系列图块组成 我使用 for 循环来遍历每个图块 我知道这可能不是最好的方法 而且我可能也需要这方面的帮助 对于角色的每一侧 我
  • Android:如何避免标题在列表视图中滚动,android?

    我有一个列表视图 我将 headerview 添加到该列表中 一切都很好 但是当滚动列表 headerview 也随着列表移动时 所以我想避免 headerview 滚动 我的意思是当我列表到达顶部视图 标题栏 时我必须只滚动列表 head
  • 如何控制Windows中的文件访问?

    Go 提供os Chmod 用于设置文件和目录权限 例如 如果我想确保文件只能由当前用户访问 我可以执行以下操作 os Chmod somefile txt 0600 这在 Linux 上工作得很好 但在 Windows 上却毫无作用 在深