问题标签 [dacl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1359 浏览

windows - 当我拥有有效的读取权限时,为什么会收到“拒绝访问”?

我无法读取特定文件,即使据我所知我对它具有读取权限。这是“有效访问”显示的内容:

有效访问

Get-Acl是给我的。

当我尝试在记事本中打开它,甚至只是从命令行复制它时,我收到一个错误:

我以 登录Admin,并且cmd.exeshell 也被提升(右键单击并执行“以管理员身份运行”)。

请注意,它最初不是SDDL_PROTECTED,但我添加了它(通过 Windows GUI),以确保没有被继承的东西会混淆访问。然后我添加了一个 ACE 来让管理员完全控制。该驱动器以前是Win7机器的系统盘,但我试图在Win10机器上读取它。

0 投票
1 回答
656 浏览

c++ - Win32 API:为当前用户创建公共文件,但对其他人私有

我正在使用 Win32 API 在 C 中测试以下代码,该 API 旨在创建一个新文件,该文件可供当前用户访问,但对其他人来说是私有的(不可访问)。

为此,拒绝所有人 SID 的所有权限,然后为当前的用户 SID 设置权限。

该文件已成功创建并且权限显然设置成功(请参见下面的屏幕截图),但是当我尝试用记事本打开文件时,它说“访问被拒绝”(我的文件资源管理器正在同一会话下运行),也如果我打开命令提示符并执行“键入 file_created.txt”,则会出现相同的“访问被拒绝”。

我当然可以手动恢复权限,因为我是管理员,但我的想法是让它以编程方式工作。

具有所有人权限的图像: 在此处输入图像描述

具有当前用户权限的图像: 在此处输入图像描述

编码:

注意:我意识到代码存在内存泄漏和其他问题,我只是快速破解来测试这个想法。

0 投票
1 回答
238 浏览

winapi - 为什么 AccessCheck 不将 GenericMapping 应用于 DACL?

AccessCheck 函数获取一个 GenericMapping 参数。这个参数是干什么用的?它不用于 DesiredAccess 参数,因为之前必须将 MapGenericMask 应用于 DesiredAccess。

它也不适用于 SecurityDescriptor 中包含的 DACL,因为我发现使用 C 程序执行此操作:

  • 打开当前线程令牌
  • 从令牌创建具有所有者和默认组的安全描述符,以及将 GENERIC_ALL 授予所有者“D:(A;;GA;;;ownerSID)”的 DACL
  • 设置 GENERIC_MAPPING,它将(除其他外)GenericAll 映射到我的 OWN_READ | OWN_WRITE(定义为 0x0001 和 0x0002)
  • 使用上面创建的安全描述符、线程令牌、OWN_READ 作为 DesiredAccess、所描述的 GENERIC_MAPPING 调用 AccessCheck

但是,这会失败并出现拒绝访问错误。当我将安全描述符更改为“D:(A;;0x0001;;;ownerSID)”时,访问被授予。这表明 AccessCheck 没有使用 GenericMapping 参数将 DACL 中的通用访问标志 (GA/GW/GR/GX) 转换为特定的访问权限。为什么?难道我做错了什么?

https://msdn.microsoft.com/de-de/library/windows/desktop/aa374815(v=vs.85).aspx没有给出关于如何设置安全描述符的任何提示。

0 投票
1 回答
345 浏览

winapi - CNG 密钥的 DACL 中访问掩码的映射

(注意:IMO 的问题主要是关于 WinAPI 和 DACL,而不是关于 CNG,所以请继续阅读!)

我目前正在尝试修改 Microsoft 的 Cryptographic Provider Development Kit 的示例 CNG 密钥存储提供程序,使其不会密钥存储在单个文件中。但是,我遇到了可以分配给私钥的安全描述符的问题。

在 Windows Server 管理控制台的证书管理单元中,可以管理证书的私钥,即可以更改密钥的所有者、DACL 和 SACL,这会导致以安全描述符作为参数的 NCryptSetProperty 调用。对于 DACL,管理单元只允许/拒绝“完全控制”或“读取”,这会导致在 ACE 的访问掩码中设置 GENERIC_ALL 或 GENERIC_READ 位。

据我所知,这些通用位需要映射到特定于应用程序的权限 - 否则 AccessCheck 将不起作用。但是我真的需要手动完成吗???

CreatePrivateObjectSecurity+SetPrivateObjectSecurity 并不总是有效,因为 CreatePrivateObjectSecurity 对输入安全描述符中的所有者和组非常挑剔。此外,当应用映射时,访问掩码中的通用位会被清除,这会导致管理单元显示错误的设置(正如我所说,管理单元在显示当前权限时只考虑 GA 和 GR 位)。

似乎我在这里遗漏了一些东西......

0 投票
0 回答
31 浏览

windows - Windows DACL 中 ACE 条目 SYSTEM 的用途是什么?

ACE 条目 SYSTEM 的目的是什么,在 Windows DACL 中授予 FULL CONTROL?据我所见,它似乎总是在那里(是吗?)但我没有找到任何解释它的目的。

0 投票
1 回答
485 浏览

powershell - 将对象复制到具有更改值的新对象

需要获取 ACL 对象并替换一个Access.IdentityReference.Value并保持对象的其余部分完好无损,以便我可以将其Set-Acl应用于另一个系统。

我有很多方法可以做到这一点,而我能得到的最好方法是找到并替换目标值,但会丢失原始对象的其余部分。


编辑:当我尝试这段代码时:

我收到以下错误:


Edit2:新脚本,但还没有:

我收到以下错误:

0 投票
3 回答
1425 浏览

winapi - Windows 创建仅允许所有者访问文件的文件访问 (Win32)

我正在尝试以只有所有者(甚至其他管理员)才能访问文件的方式修改 Windows 对文件的访问权限。有点相当于 unix chmod 700 文件。

我玩过拒绝一般组(EVERYONE,ADMINISTRATORS)的权限并将它们授予当前用户,但当前用户也总是失去权限。

我试图更改顺序(eas[0]、eas[1])和其他东西,但没有成功。

任何人的想法?

0 投票
2 回答
497 浏览

installshield - 如何设置 Windows 服务的 DACL 以便普通用户可以启动/停止服务

我有一个 Windows 服务应用程序,我正在使用 install shield 构建它的安装程序。安装时如何设置服务的DACL?我知道我可以在安装后执行“sc sdset”。但我想将提升的权限设置为安装过程的一部分。有没有办法做到这一点?

0 投票
0 回答
280 浏览

c++ - 像防病毒软件一样设置应用程序的访问权限

我正在尝试将应用程序的权限设置为只读/执行,我可以通过使用 c++ windowsSetSecurityDescriptorDacl()函数来实现这一点。

但是之后管理员可以通过右键单击文件来更改它

属性->安全->高级->更改权限

但不知何故,杀毒软件会阻止他们的应用程序产生这些费用,如下图所示

在此处输入图像描述

0 投票
0 回答
197 浏览

c++ - 提升为管理员后设置文件夹权限失败

背景故事:我的 Windows MFC C++ 应用程序的 Visual-Studio 2010 安装程序包创建了一个数据文件夹 C:\MyDataFolder。因为这是在安装过程中创建的,所以文件夹的所有者是NT AUTHORITY\SYSTEM. 我希望我的应用程序的所有(非管理员)用户都拥有对该文件夹的完全访问权限,因此我添加了一些代码来为所有经过身份验证的用户授予完全权限(SetEntriesInAcl, SetNamedSecurityInfo等)。当以管理员身份运行时,这可以正常工作。

为了让用户超级容易,我想允许他们以管理员身份安装,然后以受限用户身份运行程序,尝试设置这些权限,然后在必要时提示他们提升为管理员。(这也将涵盖尚未拥有这些权限的现有安装。)我也成功地做到了这一点(CredUIPromptForWindowsCredentials, CredUnPackAuthenticationBuffer, CredUIParseUserName, LogonUser, ImpersonateLoggedOnUser)。这给了我一个提升的令牌。我已经尝试过,有没有最后一次调用ImpersonateLoggedOnUser.

问题:重试调用SetNamedSecurityInfo仍然失败,拒绝访问。我也尝试使用AdjustTokenPrivileges为我提升的令牌SE_TAKE_OWNERSHIP_NAME授予特权,但这失败了“并非所有引用的特权或组都分配给调用者

我相信我需要拥有此文件夹的所有权,因为它归 SYSTEM 所有,但如果我的提升令牌还没有 SE_TAKE_OWNERSHIP_NAME 权限,我不确定如何授予它。

我对这一切都很陌生,所以我很可能错过了一些非常基本的东西。我也曾想过我应该只制作一个在安装过程中运行并执行此操作的小应用程序,但现在我已经走到了这一步,我很固执,想让海拔部分正常工作。谢谢你的帮助!