Pertanyaan Menyalin izin OU dari grup keamanan yang ada ke grup keamanan baru


Saat ini kami memiliki grup keamanan bernama: Limited_IT_Admins yang memiliki izin khusus (terbatas hanya untuk tugas tertentu yang dapat mereka lakukan) di ~ 7 OU Kota dalam Negara OU.

[Country] <- top level OU
  [City01]
  [City02]
  [City03]
  [City04]
  [City05]
  [City06]
  [City07]

Namun, sekarang saya harus membagi Grup Keamanan tunggal ini menjadi tiga grup individual. Pengguna dari grup Limited_IT_Admin akan dibagi menjadi tiga grup baru yang terpisah. Pengguna akan membutuhkan akses yang sama seperti yang dilakukan oleh Limited_IT_Admins, tetapi hanya pada OU masing-masing.

Limited_IT_Admin_01 - User01
  City01, City02, City03

Limited_IT_Admin_02 - User02
  City04, City05

Limited_IT_Admin_03 - User03
   City06, City07

Daripada harus mencoba membuat ulang semua izin khusus yang ditetapkan pada grup keamanan, apakah ada cara yang lebih mudah untuk menyalin izin yang dimiliki oleh Limited_IT_Admins ke tiga grup baru?


5
2018-02-20 18:59






Jawaban:


Saya telah membuat fungsi Powershell Copy-DsAcl yang seharusnya membantu melakukan semacam salinan izin Direktori Aktif ini. Dengan menggunakan fungsi ini, jawaban asli (di bawah garis) dapat ditulis ulang lebih bersih seperti:

 Import-Module ActiveDirectory

 # Dot source the Copy-DsAcl function: https://github.com/jasonkeithscott/Copy-DsAcl
 . .\Copy-DsAcl.ps1

 # Reference objects
 $sourceGroup    = Get-ADGroup Limited_IT_Admins
 $sourceObject   = Get-ADOrganizationalUnit -Filter { Name -eq "City01" }

 # Hash for the new groups and their assigned OUs
 $targetGroups   = @{}
 $targetGroups.Add("Limited_IT_Admin_01", @("City01", "City02", "City03"))
 $targetGroups.Add("Limited_IT_Admin_02", @("City04", "City05"))
 $targetGroups.Add("Limited_IT_Admin_03", @("City06", "City07"))

 # Walk each targetGroup in the hash
 foreach ( $g in $targetGroups.GetEnumerator() ) {

     $targetGroup = Get-ADGroup $g.Name

     # Walk each $city OU and add the $targetGroup to the ACL
     foreach ( $city in $g.Value ) {

         Write-Host "Adding $($g.Name) to $city"
         $targetObject = Get-ADOrganizationalUnit -Filter { Name -eq $city }
         Copy-DsAcl $sourceGroup $sourceObject $targetGroup $targetObject

     }

 }

Powershell di bawah ini harus melakukan apa yang Anda minta. Ada beberapa persyaratan:

  1. Anda memerlukan modul Microsoft ActiveDirectory Powershell. Ini sudah termasuk dengan RSAT7.
  2. Anda perlu memperbarui hal-hal berikut untuk lingkungan Anda:
    1. $root - PSDrive ke "root" OU Anda. "Negara" dalam pertanyaan Anda.
    2. $sourceOU - sumber OU (nama, bukan DN) dari mana Anda akan menyalin ACE.
    3. $sourceGroup - grup (nama, bukan DN atau domain) yang tercantum dalam ACL yang akan Anda salin.
    4. $targetGroups - Hash of groups (nama, bukan DN atau domain) dan OU (nama, bukan DN) untuk menerapkan ACE.
  3. Ini hanya akan menyalin ACE eksplisit, tidak diwarisi. Mungkin saya harus melihat berjalan ke atas pohon untuk mengambil yang diwarisi?
  4. Saya harus menjalankan ini sebagai Admin Domain karena saya mendapatkan kesalahan "Akses Ditolak". Delegasi awal OU saya mungkin dicurigai.

Membaca semua ini, saya pikir saya mungkin harus menulis fungsi yang lebih umum, CopyOuAcl, dan perbarui ini ketika selesai. Seperti yang tertulis sekarang, itu benar-benar spesifik untuk pertanyaan dan lingkungan Anda.

Import-Module ActiveDirectory

$root          = "AD:\OU=Country,DC=example,DC=com"
$sourceOU       = "City01"
$sourceACL      = Get-Acl $root.Replace("AD:\", "AD:\OU=$sourceOU,")
$sourceGroup    = "Limited_IT_Admins"

# Hash for the new groups and their OUs
$targetGroups = @{}
$targetGroups.Add("Limited_IT_Admin_01", @("City01", "City02", "City03"))
$targetGroups.Add("Limited_IT_Admin_02", @("City04", "City05"))
$targetGroups.Add("Limited_IT_Admin_03", @("City06", "City07"))

# Get the uniherited ACEs for the $sourceGroup from $sourceOU
$sourceACEs = $sourceACL |
    Select-Object -ExpandProperty Access |
        Where-Object { $_.IdentityReference -match "$($sourceGroup)$" -and $_.IsInherited -eq $False }

# Walk each targetGroup in the hash
foreach ( $g in $targetGroups.GetEnumerator() ) {

    # Get the AD object for the targetGroup
    Write-Output $g.Name
    $group      = Get-ADGroup $g.Name
    $identity   = New-Object System.Security.Principal.SecurityIdentifier $group.SID

    # Could be multiple ACEs for the sourceGroup
    foreach ( $a in $sourceACEs ) {

        # From from the sourceACE for the ActiveDirectoryAccessRule constructor  
        $adRights               = $a.ActiveDirectoryRights
        $type                   = $a.AccessControlType
        $objectType             = New-Object Guid $a.ObjectType
        $inheritanceType        = $a.InheritanceType
        $inheritedObjectType    = New-Object Guid $a.InheritedObjectType

        # Create the new "copy" of the ACE using the target group. http://msdn.microsoft.com/en-us/library/w72e8e69.aspx
        $ace = New-Object System.DirectoryServices.ActiveDirectoryAccessRule $identity, $adRights, $type, $objectType, $inheritanceType, $inheritedObjectType    

        # Walk each city OU of the target group
        foreach ( $city in $g.Value ) {

            Write-Output "`t$city"
            # Set the $cityOU
            $cityOU = $root.Replace("AD:\", "AD:\OU=$city,")
            # Get the ACL for $cityOU
            $cityACL = Get-ACL $cityOU
            # Add it to the ACL
            $cityACL.AddAccessRule($ace)
            # Set the ACL back to the OU
            Set-ACL -AclObject $cityACL $cityOU

        }

    }

}

3
2018-02-26 13:35





http://gallery.technet.microsoft.com/scriptcenter/Copying-permissions-for-d3c3b839

Atau cukup salin NtSecurityDescriptor. http://blogs.msdn.com/spatdsg/archive/2007/05/24/copying-delegation-permissions-from-an-ou-to-another.aspx


0
2018-02-20 20:06



Itu menarik, tetapi itu benar-benar hanya menyalin ACL untuk satu OU ke OU lain. OP ingin mengambil ACE untuk satu grup, menyalinnya, dan menerapkannya ke OU lain sebagai kelompok yang berbeda. Apakah Anda tahu cara menulis ulang Descriptor Keamanan untuk mengubah grup tetapi mempertahankan izin? - jscott
Utas ini mungkin membantu: social.technet.microsoft.com/Forums/en/ITCG/thread/…  Keempat hingga posting terakhir memiliki skrip yang cukup kuat. - Copy Run Start
Skrip itu hanya menyalin ACE pengguna yang ada dari sumber OU ke target OU - sebagai pengguna yang sama. Ia juga menghapus ACE mereka dari sumber OU, tetapi itu tidak relevan di sini. Bagian yang rumit dalam pertanyaan OP adalah menyalin ACE yang ada untuk satu pengguna dan menulis ulang mereka sebagai pengguna yang berbeda. Namun, silakan edit pertanyaan Anda untuk menyertakan informasi baru apa pun. - jscott
Mungkin saya salah paham tapi saya pikir dia hanya memindahkan pengguna ke sub-OU yang berbeda, bukan menciptakan pengguna baru. Pengguna dari grup Limited_IT_Admin akan dibagi menjadi tiga grup baru yang terpisah - Copy Run Start
Ya, itu benar, pengguna akan ditambahkan ke grup baru. Tujuannya adalah untuk mendapatkan ACE untuk grup Limited_IT_Admin, dan menyalin ACE tersebut ke OU tertentu, sebagai kelompok baru, masing-masing. Akibatnya, pemberian kelompok baru izin yang sama dengan grup lama, diterapkan secara selektif. - jscott