在调试涉及SQLite和IIS的特别麻烦的错误时,我们在访问App_Data属性时遇到了权限问题
App_Data上的权限排序不正确,这可能导致某些条目无效.
这是一个截图:
我的问题不是错误排序,我认为你如何以编程方式修复非规范ACL?已经给出了一个很好的介绍问题.
我想知道的是什么类型的订购不正确?例如,如果我们把Full Control对Everyone,应该是之前或之后的一些其他的许可?是否存在触发错误的错误排序示例?我们点击了,Reorder所以我们不再能在我们的机器上重现错误.
我有遗留的C++代码,它改变了进程DACL,并尝试使用.NET 3.5中的托管代码类.我在网上找到了有人创建了一个SetAclOnServices类的代码,该类扩展了服务的NativeObjectSecurity类.我认为我可以实现这一点,只需将ResourceType.Service更改为ResourceType.KernelObject,但是当我调用GetAccessControl时,它会失败并显示File Not Found错误.
我正在尝试将自定义权限应用于文件夹作为 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)
问题:
我在子目录中执行此操作 - 我是否正确地假设 Permission 和 PermissionEx 之间的选择没有实际意义?
资源管理器中文件夹权限对话框中的“修改”在权利方面映射到什么 - 我看到很多示例,人们将其转换为一个神奇的数字或一大组标志 - 其他人使用了什么(目的是允许创建、读取、写入、追加和删除,这在 UI 中最好用简单权限表示为“修改”)。我查看了底层权限,icacls告诉我它被称为“M”,但我无法将它们映射到“特定权限”(按照使用的术语icacls /?)。Windows 帮助中还有另一个映射表。有没有人得到有效的权威答案?
在关于 PermissionEx (WIX) 的问题上有一个非常类似的未回答的问题,将其作为重复引用是残酷但公平的。
lpSecurityAttributes passed to CreateNamedPipe()?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 …
我需要为每个人创建一个我正在创建的命名管道的访问权限.我知道这样做的方法是创建一个NULL /空DACL并将其传递给CreateNamedPipe.
如何创建NULL DACL?我被告知这与传递NULL指针不同LPSECURITY_ATTRIBUTES.
我的 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)
感谢您的帮助,
奥利维尔
我正在创建一个用于创建互斥锁的安全描述符CreateMutex()。事实证明,当创建进程在服务中并且访问进程来自用户时,您不能使用默认自由访问控制列表 (DACL) 附带的默认描述符。
我不想使用NULLDACL,因为它没有安全性并且从不推荐。我希望能够以仅允许指定进程访问的方式创建或使用 DACL。那可能吗?
DACL 是否可能有一个允许特定进程的访问控制条目?也许使用某种进程 ID 或常量?
AccessCheck 函数获取一个 GenericMapping 参数。这个参数是干什么用的?它不用于 DesiredAccess 参数,因为之前必须将 MapGenericMask 应用于 DesiredAccess。
它也不适用于包含在 SecurityDescriptor 中的 DACL,因为我发现使用 C 程序执行此操作:
但是,这会因访问被拒绝错误而失败。当我将安全描述符更改为“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没有给出关于如何设置安全描述符的任何提示。
我正在使用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) 我的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()的一个很好的代码示例,它会告诉我这样做的细微差别.如果这种方法不起作用,那么您可能会有任何想法或提示.
我很好奇是否有办法阻止用户(包括属于管理员组的用户)获取文件的所有权?
我最初是从我在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资源管理器作为管理员获取此文件的所有权:
dacl ×11
winapi ×6
c++ ×4
windows ×4
security ×3
acl ×2
permissions ×2
c# ×1
mutex ×1
named-pipes ×1
process ×1
service ×1
sid ×1
visual-c++ ×1
wix ×1