标签: dacl

是什么原因导致"<folder>上的权限被错误地排序"?

在调试涉及SQLite和IIS的特别麻烦的错误时,我们在访问App_Data属性时遇到了权限问题

App_Data上的权限排序不正确,这可能导致某些条目无效.

这是一个截图:

在此输入图像描述

我的问题不是错误排序,我认为你如何以编程方式修复非规范ACL?已经给出了一个很好的介绍问题.

我想知道的是什么类型的订购不正确?例如,如果我们把Full ControlEveryone,应该是之前或之后的一些其他的许可?是否存在触发错误的错误排序示例?我们点击了,Reorder所以我们不再能在我们的机器上重现错误.

windows dacl

8
推荐指数
2
解决办法
3763
查看次数

有没有办法在C#中修改进程DACL

我有遗留的C++代码,它改变了进程DACL,并尝试使用.NET 3.5中的托管代码类.我在网上找到了有人创建了一个SetAclOnServices类的代码,该类扩展了服务的NativeObjectSecurity类.我认为我可以实现这一点,只需将ResourceType.Service更改为ResourceType.KernelObject,但是当我调用GetAccessControl时,它会失败并显示File Not Found错误.

c# security dacl

6
推荐指数
1
解决办法
3992
查看次数

WiX 权限,如何用 DACL 标志表达“修改”

我正在尝试将自定义权限应用于文件夹作为 WiX 3.0.4318.0 安装程序的一部分。

就资源管理器中的安全属性 UI 而言,我想添加修改 BUILTIN\Users 的权限。显然,它需要能够抵抗用户名的本地化。因此,根据我迄今为止的研究,我至少想要:

<CreateFolder Directory="XYZ" >
    <PermissionEx User="[WIX_ACCOUNT_USERS]" 
         GenericRead="yes" GenericWrite="yes" Delete="Yes" />
</CreateFolder>
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我在子目录中执行此操作 - 我是否正确地假设 Permission 和 PermissionEx 之间的选择没有实际意义?

  2. 资源管理器中文件夹权限对话框中的“修改”在权利方面映射到什么 - 我看到很多示例,人们将其转换为一个神奇的数字或一大组标志 - 其他人使用了什么(目的是允许创建、读取、写入、追加和删除,这在 UI 中最好用简单权限表示为“修改”)。我查看了底层权限,icacls告诉我它被称为“M”,但我无法将它们映射到“特定权限”(按照使用的术语icacls /?)。Windows 帮助中还有另一个映射表。有没有人得到有效的权威答案?

在关于 PermissionEx (WIX) 的问题上有一个非常类似的未回答的问题,将其作为重复引用是残酷但公平的。

permissions wix dacl create-directory

5
推荐指数
1
解决办法
3721
查看次数

What lifetime is required of lpSecurityAttributes in CreateNamedPipe()?

  1. How soon can I destroy the structure pointed to by lpSecurityAttributes passed to CreateNamedPipe()?
  2. Do I need a separate one for each pipe instance?

The MSDN documentation for CreateNamedPipe() says:

lpSecurityAttributes [in, optional]

A pointer to a SECURITY_ATTRIBUTES structure that specifies a security descriptor for the new named pipe...

Emphasis mine. Does 'new' mean new named pipe, or new instance of the named pipe? It goes on to say:

Remarks

To create an instance of a named pipe by …

windows security named-pipes dacl

5
推荐指数
1
解决办法
906
查看次数

如何创建NULL /空DACL?

我需要为每个人创建一个我正在创建的命名管道的访问权限.我知道这样做的方法是创建一个NULL /空DACL并将其传递给CreateNamedPipe.

如何创建NULL DACL?我被告知这与传递NULL指针不同LPSECURITY_ATTRIBUTES.

c++ security winapi dacl

5
推荐指数
1
解决办法
2732
查看次数

如何在 CreateEvent 的 SDDL 字符串中添加同步权

我的 Windows 服务使用 CreateEvent 创建 2 个事件,以便与用户应用程序进行通信。该服务和用户应用程序不在同一用户帐户下运行。用户应用程序打开事件并将其设置为有信号,不会出现错误。但该服务从未收到该事件。另一个事件的作用方向相反。所以我认为这些事件错​​过了同步权利。

服务:

SECURITY_ATTRIBUTES security;
ZeroMemory(&security, sizeof(security));
security.nLength = sizeof(security);
ConvertStringSecurityDescriptorToSecurityDescriptor(L"D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GWGR;;;IU)", SDDL_REVISION_1, &security.lpSecurityDescriptor, NULL);
EvtCreateNewUserSession = CreateEventW( 
            &security,       // security attributes
            TRUE,       // manual-reset event
            FALSE,      // initial state is not signaled
            L"Global\\MyEvent"      // object name 
            );
Run Code Online (Sandbox Code Playgroud)

互动应用程序:

HANDLE EvtCreateNewUserSession = OpenEventW( 
EVENT_MODIFY_STATE | SYNCHRONIZE,       // default security attributes
FALSE,      // initial state is not signaled
L"Global\\MyEvent"      // object name 
;
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助,

奥利维尔

windows service acl dacl

5
推荐指数
1
解决办法
1076
查看次数

使用安全描述符的 DACL 只允许某些进程/应用程序访问互斥对象

我正在创建一个用于创建互斥锁的安全描述符CreateMutex()。事实证明,当创建进程在服务中并且访问进程来自用户时,您不能使用默认自由访问控制列表 (DACL) 附带的默认描述符。

我不想使用NULLDACL,因为它没有安全性并且从不推荐。我希望能够以仅允许指定进程访问的方式创建或使用 DACL。那可能吗?

DACL 是否可能有一个允许特定进程的访问控制条目?也许使用某种进程 ID 或常量?

c++ winapi acl mutex dacl

5
推荐指数
0
解决办法
300
查看次数

为什么 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)
  • 使用上面创建的安全描述符调用 AccessCheck,线程令牌,OWN_READ 作为 DesiredAccess,描述的 GENERIC_MAPPING

但是,这会因访问被拒绝错误而失败。当我将安全描述符更改为“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没有给出关于如何设置安全描述符的任何提示。

permissions winapi dacl

5
推荐指数
1
解决办法
210
查看次数

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

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

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

该文件已成功创建,并且权限显然已成功设置(请参阅下面的屏幕截图),但是当我尝试使用记事本打开文件时,它会显示"访问被拒绝"(我的文件浏览器在同一会话下运行),如果我打开命令提示符并执行"输入file_created.txt",则会出现相同的"访问被拒绝".

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

图像与每个人的权限: 在此输入图像描述

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

代码:

#include <windows.h>
#include <AccCtrl.h>
#include <aclapi.h>

#include <stdio.h>
#include <stdexcept>
#include <string>

#undef UNICODE

int GetCurrentUserSid(PSID* pSID)
{
  const int MAX_NAME = 256;
  DWORD i, dwSize = 0;
  HANDLE hToken;
  PTOKEN_USER user;
  TOKEN_INFORMATION_CLASS TokenClass = TokenUser;

  if (!OpenProcessToken(GetCurrentProcess(), TOKEN_READ | TOKEN_QUERY, &hToken))
    return GetLastError();
  else
    wprintf(L"OpenProcessToken() - got the handle to the access token!\n");

  if (!GetTokenInformation(hToken, TokenClass, NULL, 0, &dwSize))
  {
    DWORD dwResult = GetLastError();
    if (dwResult != ERROR_INSUFFICIENT_BUFFER)
    {
      wprintf(L"GetTokenInformation() failed, …
Run Code Online (Sandbox Code Playgroud)

c++ winapi sid dacl visual-c++

4
推荐指数
1
解决办法
365
查看次数

如何防止产生子进程产生的进程?

我的Windows XP/7程序使用Windows API CreateProcess()函数作为其操作的一部分启动子进程.我希望能够以一种特定方式"沙箱化"应用程序.我不想让子进程生成自己的进程(孙子进程).有没有办法做到这一点,而无需进行任何挂钩或DLL注入(或IAT修补)?

我在Process Security和Access Rights上看到了这个MSDN页面:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx

我注意到以下特定于进程的访问权限:

PROCESS_CREATE_PROCESS (0x0080) Required to create a process.
Run Code Online (Sandbox Code Playgroud)

我可以在挂起状态下启动子进程,通过XOR操作删除该访问权限,使用SetSecurityDescriptor()更新子进程的访问权限,并恢复它以防止它创建自己的子进程吗?或者我应该将它应用于磁盘上的EXE文件吗?这会有用吗?

如果是这样,我会很感激使用SetSecurityDescriptor()的一个很好的代码示例,它会告诉我这样做的细微差别.如果这种方法不起作用,那么您可能会有任何想法或提示.

winapi process createprocess access-control dacl

3
推荐指数
1
解决办法
933
查看次数

是否可以禁止取得文件的所有权?

我很好奇是否有办法阻止用户(包括属于管理员组的用户)获取文件的所有权?

我最初是从我在Local System帐户下运行的服务创建这样的文件.然后我把这个文件的DACL,以D:(A;OICI;GA;;;SY)仅让SYSTEM帐户具有完全访问权限,并设置my service为所有者:

DWORD dwRes = ::SetNamedSecurityInfo(
    strDataFilePath,
    SE_FILE_OBJECT,
    OWNER_SECURITY_INFORMATION,  // change only the object's owner
    pMyServiceUserSid,           // User SID for my service
    NULL,
    NULL,
    NULL);
Run Code Online (Sandbox Code Playgroud)

但是完成所有这些后,我仍然可以通过Windows资源管理器作为管理员获取此文件的所有权:

在此输入图像描述

c++ windows winapi windows-security dacl

1
推荐指数
1
解决办法
230
查看次数