報告

2016-01-08 32 views
0

下面的代碼將返回通用的OU權限報告

Import-Module ActiveDirectory 
set-location AD: 
$OUAcl = (Get-Acl 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com').Access 
$OUAcl 

但是我想審計是先進的安全權限。我可以在GUI中看到這一點,我只是不知道如何編寫腳本來爲我的組織中的每個OU生成報告(或根據我們的需要生成特定的OU)。

要查看在GUI中做到這一點:

  1. 打開MMC並加載ADUC管理單元
  2. 啓用查看→高級功能
  3. 右鍵單擊任意OU,選擇屬性
  4. 在屬性窗口中選擇安全選項卡
  5. 單擊高級按鈕。
  6. 查看所有有權訪問該OU的用戶/組。

我想要的是一個報告,可以轉儲出有權訪問OU的所有用戶和組及其所有高級權限(例如:步驟6中的任何內容都會檢查是否允許或拒絕)。

我發現this site,但它沒有得到我需要的細節。

這可能通過PowerShell?

回答

0

我做了一個模塊而回,我認爲做你要找什麼,可以發現here(先試試第4版下載)。然後,你可以做這樣的事情:

Get-ADOrganizationalUnit -Filter * | 
    Get-PacAccessControlEntry | 
    Export-Csv c:\ou_permissions.csv -NoTypeInformation 

如果使用第3版,該命令是「GET-的AccessControlEntry」。版本3是一個腳本模塊,因此您可以打開這些文件以準確查看正在發生的事情以及將ACE(比普通文件系統/註冊表/服務/ etc ACE更復雜)轉換爲更具可讀性的格式所需的內容。版本4已編譯,但您可以找到源代碼here

dsacls.exe可以得到這樣的信息,太多,但你可能會不得不做一些文本分析,以得到它在一個更友好的格式...

+0

這看起來正是我在找的東西。謝謝!!! – user3246693

0

這當然是可能的,但我不知道你想要什麼現成的解決方案。您需要爲每個ACE自己解決個人access rights。像這樣的東西應該工作:

$dn = 'OU=ParentOU,OU=ChildOU,DC=test,DC=test,DC=com' 

$ADS_RIGHTS_ENUM = @{ 
    'ADS_RIGHT_DELETE'     = 0x10000 
    'ADS_RIGHT_READ_CONTROL'   = 0x20000 
    'ADS_RIGHT_WRITE_DAC'    = 0x40000 
    'ADS_RIGHT_WRITE_OWNER'   = 0x80000 
    'ADS_RIGHT_SYNCHRONIZE'   = 0x100000 
    'ADS_RIGHT_ACCESS_SYSTEM_SECURITY' = 0x1000000 
    'ADS_RIGHT_GENERIC_READ'   = 0x80000000 
    'ADS_RIGHT_GENERIC_WRITE'   = 0x40000000 
    'ADS_RIGHT_GENERIC_EXECUTE'  = 0x20000000 
    'ADS_RIGHT_GENERIC_ALL'   = 0x10000000 
    'ADS_RIGHT_DS_CREATE_CHILD'  = 0x1 
    'ADS_RIGHT_DS_DELETE_CHILD'  = 0x2 
    'ADS_RIGHT_ACTRL_DS_LIST'   = 0x4 
    'ADS_RIGHT_DS_SELF'    = 0x8 
    'ADS_RIGHT_DS_READ_PROP'   = 0x10 
    'ADS_RIGHT_DS_WRITE_PROP'   = 0x20 
    'ADS_RIGHT_DS_DELETE_TREE'   = 0x40 
    'ADS_RIGHT_DS_LIST_OBJECT'   = 0x80 
    'ADS_RIGHT_DS_CONTROL_ACCESS'  = 0x100 
} 

Import-Module ActiveDirectory 

$acl = Get-Acl "AD:$dn" 
foreach ($ace in $acl.Access) { 
    $ADS_RIGHTS_ENUM.Keys | Where-Object { 
    $ace.ActiveDirectoryRights.value__ -band $ADS_RIGHTS_ENUM[$_] 
    } | ForEach-Object { 
    "{0}`t{1}`t{2}" -f $ace.IdentityReference, $_, $ace.AccessControlType 
    } 
} 
+0

謝謝你,我一直在努力的所有解析ACE代碼,這被證明是一個真正的痛苦。這就是說,羅恩愛德華茲的劇本似乎爲我做了這一切。 – user3246693