簡體   English   中英

如何創建 NULL/空 DACL?

[英]How do I create a NULL/empty DACL?

我需要為我正在創建的名為 pipe 的所有人授予訪問權限。 我知道這樣做的方法是創建一個 NULL/空 DACL 並將其傳遞給CreateNamedPipe

如何創建 NULL DACL? 有人告訴我,這與為LPSECURITY_ATTRIBUTES傳遞 NULL 指針不同。

像這樣:

SECURITY_DESCRIPTOR SD;
InitializeSecurityDescriptor(&SD, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&SD, TRUE, NULL, FALSE);

為簡潔起見,我省略了錯誤檢查。 你不會這樣做。

然后,當您調用CreateNamedPipe您可以設置安全屬性記錄,如下所示:

SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &SD;
SA.bInheritHandle = TRUE;

SetSecurityDescriptorDacl的文檔指出:

當pDacl參數未指向DACL且bDaclPresent標志為TRUE時,指定NULL DACL。 允許所有訪問。 您不應將NULL DACL與對象一起使用,因為任何用戶都可以更改安全描述符的DACL和所有者。 這將干擾對象的使用。

所以,上面是如何做到的,但文檔確實強調你不應該這樣做。

這是我們在其中一個項目中使用的代碼:

SECURITY_DESCRIPTOR  pSD;
SECURITY_ATTRIBUTES  SA;

if(!InitializeSecurityDescriptor(&pSD, SECURITY_DESCRIPTOR_REVISION))
    throw error;
if(!SetSecurityDescriptorDacl(&pSD, true, NULL, false))
    throw error;
SA.nLength = sizeof(SA);
SA.lpSecurityDescriptor = &pSD;
SA.bInheritHandle = true;
pSA = &SA;
...
FMapping = CreateFileMapping(INVALID_HANDLE_VALUE, pSA, PAGE_READWRITE, 0, 4096, p);

此代碼創建一個可供所有人訪問的映射

我的情況與 Docker 容器開發有些不同。 我已經安裝了一個現有的 COM 應用程序,並希望通過 PowerShell 創建一個 null DACL。首先在組件服務中查找您的 AppID: 在此處輸入圖像描述

然后運行以下命令:

$appid = "{00020906-0000-0000-C000-000000000046}"  
$app = get-wmiobject -query ('SELECT * FROM Win32_DCOMApplicationSetting WHERE AppId = "' + $appid + '"') -enableallprivileges  
$sdRes = $app.GetLaunchSecurityDescriptor()  
$sd = $sdRes.Descriptor  
[System.Management.ManagementBaseObject[]] $newDACL = $null  
$sd.DACL = $newDACL  
$app.SetLaunchSecurityDescriptor($sd)  

現在每個人都可以訪問該應用程序(本例中為 MS Word 97-2003),具有其他答案和 MS 文檔中提到的所有安全風險。

旁注 - 在您的案例中使用 null DACL 而不是空的。 空 DACL 會阻止所有用戶的權限: https://techcommunity.microsoft.com/t5/ask-the-directory-services-team/null-and-empty-dacls/ba-p/396323

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM