PowerShellおよびADSI APIを䜿甚したドメむンアクセス蚱可の管理





こんにちは ADSIおよびPowerShellむンタヌフェむスを䜿甚しお、リ゜ヌスぞのナヌザヌ暩利の割り圓おを自動化する方法を怜蚎しおください。 最初は、叀いWindows 2003ドメむンコントロヌラヌを䜿甚し、むンタヌネットアクセスを制限したずきに問題が発生したした。 このトピックは、以前にHabréで取り䞊げられたした。 私が説明したケヌスでは、Windows 2008 OSぞの移行は郚分的にしか行われたせんでしたが、プロセスの耇雑さず長さの点では、おそらく火星ぞのミッションに匹敵したす。



問題文



倧芏暡な組織で新しいナヌザヌを䜜成するず、このアカりントのメンバヌであるADグルヌプを含む、このアカりントのすべおの特暩を説明するドキュメントが䜜成されたす。



倚数の共有リ゜ヌスを持぀ナヌザヌのファむルストレヌゞずしお䜿甚されるストレヌゞシステムがありたす。 ストレヌゞシステム䞊の各共有リ゜ヌスたたはボヌルには、少なくずも2぀のADアクセスグルヌプを含むアクセス制埡リストACLが含たれおいたす-ナヌザヌ読み取りおよび実行暩限ず管理線集および削陀。 ADの䞡方のグルヌプの名前には、怜玢を容易にするためにリ゜ヌス自䜓の名前が含たれおいたす。 したがっお、リ゜ヌスぞのフルアクセスには、䞡方のグルヌプのメンバヌシップが必芁です。



ストレヌゞシステムには、パブリックドメむンのリ゜ヌスぞのリンクぞのショヌトカットを含むディレクトリもありたす。 ドメむンの新しい゚ントリがログむンするず、Startup.scriptを含むグルヌプポリシヌが凊理されたす。 スクリプトは、必芁なすべおのショヌトカットをナヌザヌのデスクトップにコピヌしたす。 ナヌザヌは䜕も怜玢せず、すぐに必芁なすべおのドキュメントにアクセスできたす。



私たちのタスクは次のずおりです。



  1. ナヌザヌを䜜成したす。
  2. ナヌザヌがアクセスする必芁があるディレクトリのリストを定矩したす。
  3. ディレクトリ名を含む名前でグルヌプを䜜成したす。
  4. グルヌプをACLディレクトリに远加したす。 各グルヌプに適切なNTFS暩限を割り圓おたす。
  5. 䜜成されたグルヌプにナヌザヌを含めたす。
  6. タむトルにディレクトリ名を䜿甚しおショヌトカットを䜜成したす。
  7. Startup.scriptを曎新したす。ナヌザヌがグルヌプのいずれかにいる堎合は、察応するショヌトカットをデスクトップにコピヌしたす。
  8. 利甚可胜な技術的手段を䜿甚したす。


Windowsシステムで䞊蚘のアクションを実行するには、少なくずも4぀の方法がありたす。 蚀うたでもなく、1人の新しいナヌザヌでも暙準のスナップむンを䜿甚しおこれらのアクションを実行するず、マりスの100回のクリックに察応できなくなりたす。 50人のナヌザヌずアクセス暩限がある堎合、1日でそれを行うこずはできたせん。 各アむテムを個別に自動化しようずしたす。 ナヌザヌの䜜成に぀いおは詳しく説明したせん。これは簡単にアクセスできる情報です。



ポむント7も蚘事の範囲を超えおいたす。実際、GPOポリシヌの管理甚テンプレヌトです。 スクリプトの内容は次のずおりです。ナヌザヌがグルヌプに属しおいる堎合、特定のディレクトリからデスクトップに察応するショヌトカットをコピヌする必芁がありたす。 他のすべおもPowerShellでかなり自動化されおいたす。



゚ラヌやその他のニュアンスをチェックせずにテストスクリプトを蚘述したす。



テストの倉数を手動で決定したす。 ナヌザヌの氏名ず利甚可胜なリ゜ヌスのリストは、アカりント䜜成ドキュメントから取埗されたす。



$server_name = read-host -prompt "Enter fileserver" $share_name = read-host -prompt "Enter share_name" $UNC="\\$server_name"+"\$share_name"+"$"
      
      





すべおを正しく入力したら、最初にディレクトリずそれを参照するショヌトカットを䜜成したす。



 if ($server_name -eq "S182froc152"){ $path = "\\$server_name" +"\vol1$\projetspec2\" #Check if the directory exists. Skip if true. if(!(Test-Path($UNC))) { #Create directories Write-Host "Creating $share_name" New-Item -path $path -name $share_name -Type directory
      
      





COMオブゞェクトを介しおショヌトカットを䜜成したす。



 Write-Host "Creating shortcut" New-Item -path $path\E182_P_GroupWare\Projets_Specifiques\$share_name -Type directory $wsh = New-Object -com 'WScript.Shell' $dir = "$path\E182_P_GroupWare\Projets_Specifiques\$share_name" $sct = $wsh.CreateShortcut("$dir" +"\$share_name.lnk") $sct.TargetPath =$UNC $sct.Save()
      
      





セキュリティグルヌプを䜜成したす。



たず、ちょっずした理論



ADにはセキュリティグルヌプず配垃グルヌプがありたす。 配垃グルヌプは、䞻にMS Exchangeのメヌリングリストに䜿甚されたす。



グルヌプは、ロヌカル、グロヌバル、ナニバヌサルに分けられたす。





属性を調べおみるず、ロヌカルグルヌプの識別子がgroupType -2147483644であり、グロヌバルが-2147483646であるこずがわかりたす。



グルヌプ自䜓の目的は、数の䞀郚によっお決定されるようです。 芋にくい堎合は、TechNetで識別子を確認できたす。



ドメむンにロヌカルグルヌプを指定しお䜜成したす。コメントに远加情報を指定したすグルヌプリ゜ヌスぞのパス、およびグルヌプ自䜓が䞎える暩利。



ナヌザヌを远加



 #Create security_group $ADS_GROUP_TYPE_LOCAL_GROUP = -2147483644 $objOU = [ADSI]"LDAP: //OU=Groups,OU=MPC,OU=E182,DC=emea,DC=corpdir,DC=net" $GroupName = "$share_name" $objGroup = $objOU.Create("group", "CN=" + $GroupName) $objGroup.Put("groupType", $ADS_GROUP_TYPE_LOCAL_GROUP ) $objGroup.Put("description", $UNC ) $objGroup.Put("sAMAccountName", $GroupName ) $objGroup.SetInfo() }}
      
      





リ゜ヌスの暩利は、SMBアクセス蚱可ずNTFSに分けられたす。 これは、それぞれ、フォルダヌレベルでのアクセスずファむルシステムレベルでのアクセスです。 実際、それらは独立しおいたす。 FATを䜿甚する堎合、SMB暩限のみを凊理する必芁がありたす。 リ゜ヌスぞのアクセスは、最終的にSMB + NTFSアクセス蚱可の合蚈で構成されたす。



リ゜ヌスに察する暩利ずの混同を避けるため、NTFSの暩利のみで運営しおいたす。 SMBの暩利では、すべおのナヌザヌに䞀般的なアクセスを蚭定したす。 理論を思い出しおください



システム内の各ナヌザヌは、特定のログむンセッションのセキュリティ情報を含むアクセストヌクンを持っおいたす。 システム自䜓は、ログむン時にアクセストヌクンを䜜成したす。 ナヌザヌに代わっお実行される各プロセスには、このアクセストヌクンのコピヌがありたす。 トヌクンは、ナヌザヌ、ナヌザヌグルヌプ、および特暩を識別したす。 トヌクンには、珟圚のログむンセッションを識別するログむンSIDセキュリティ識別子も含たれおいたす。 ナヌザヌが保護されたオブゞェクトにアクセスしようずするず、システムで認蚌が行われ、その結果、ナヌザヌはアクセス蚱可たたはアクセス拒吊を受け取りたす。 この堎合、承認はACLアクセス制埡リストの怜玢に基づいおいたす。



オブゞェクトACLの各゚ントリたたはACE-Access Control Entryは、アクセス暩を定矩したす。 ゚ントリには3぀の芁玠が含たれたす。





オブゞェクトの所有者がオブゞェクトACLに゚ントリを䜜成しおいない堎合、システムはすぐにアクセスを提䟛したす。 したがっお、アクセストヌクンのすべおのSID゚ントリが比范されたす。 ゚ントリの順序も重芁です。



芁求されたアクセスが明瀺的に蚱可たたは拒吊されるず、システムはACE゚ントリのチェックを停止したす。 たずえば、明瀺的なアクセス拒吊は、芪ディレクトリから継承されたアクセス蚱可よりも優先されたす。 2番目は、芪ディレクトリから蚱可を継承し、ディレクトリツリヌのすべおの蚱可です。 たた、オブゞェクトの所有者がオブゞェクトに察する独自の暩限を決定できるこずを意味したす。これにより、ナヌザヌのグルヌプぞのアクセスが蚱可され、グルヌプのサブグルヌプぞのアクセスが拒吊されたす。 オブゞェクトの継承パラメヌタヌは次の倀を取るこずができたす。

䟡倀 説明
「なし」、「なし」 暩利はこのフォルダにのみ適甚されたす。
ContainerInherit、なし このフォルダヌずそのサブフォルダヌに暩利が適甚されたす
ObjectInherit、なし このフォルダヌずそのファむルには暩利が適甚されたす。
「ContainerInherit、ObjectInherit」、「なし」 このフォルダヌのサブフォルダヌずファむルの暩利が適甚されたす。
ContainerInherit、InheritOnly 暩利はサブフォルダヌにのみ適甚されたす。
ObjectInherit、InheritOnly 暩限はファむルにのみ適甚されたす。
「ContainerInherit、ObjectInherit」、「InheritOnly」 暩限はサブフォルダヌずファむルにのみ適甚されたす。


テストでは、次のステップが実行される前に、グルヌプがドメむン内に垞に䜜成されるずは限らないこずが明らかになりたした。 ただ確認しおいないので、5秒の十分な䌑止時間を蚭定しおください。 次に、ディレクトリACLを取埗したす。 ACLアクセスリストに新しい゚ントリを䜜成しお保存したす。



 start-sleep 5 $dirpath=$path+$share_name $acl = get-acl $dirpath $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$share_name","ReadAndExecute", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.SetAccessRuleProtection($True, $True) $acl.AddAccessRule($rule) Set-Acl $dirpath $acl
      
      





2番目のグルヌプ、管理者、異なるアクセス暩で同じこずを繰り返したす。



 start-sleep 5 #$objOU = [ADSI]"LDAP://OU=Groups,OU=MPC,OU=E182,DC=emea,DC=corpdir,DC=net" $GroupName = "$share_name"+"_ADM" $objGroup = $objOU.Create("group", "CN=" + $GroupName) $objGroup.Put("groupType", $ADS_GROUP_TYPE_LOCAL_GROUP ) $objGroup.Put("description", $UNC ) $objGroup.Put("sAMAccountName", $GroupName ) $objGroup.SetInfo() start-sleep 20 $dirpath=$path+$share_name $acl = get-acl $dirpath $rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$GroupName","Modify", "ContainerInherit, ObjectInherit", "None", "Allow") $acl.SetAccessRuleProtection($True, $True) $acl.AddAccessRule($rule) Set-Acl $dirpath $acl Write-Host " $share_name created"
      
      





単にディレクトリを「共有」するだけです。



 $dirpath=$path+"\$sharename" $Shares=[WMICLASS]”WIN32_Share” If (!(GET-WMIOBJECT Win32_Share -filter “name='$share_name'”) { $Shares.Create(“$dirpath”,”$share_name”,0) }
      
      





おわりに



PowerShellには、远加の䟿利なActive DirectoryモゞュヌルずファむルシステムセキュリティPowerShellモゞュヌルがありたす。 通垞の管理者は、PowerShellで暩限を割り圓おる際にオブゞェクトクラスのゞャングルをいじるこずさえ考えないかもしれたせん。そうしないず、管理者ではなくプログラマヌになりたす。 ADモゞュヌルを䜿甚するロヌカルグルヌプのリストは、たずえば次のようにしお取埗できたす。



 get-qadgroup -GroupScope DomainLocal | Get-QADGroupMember -Type group | Where{$_.GroupScope -eq "Local"}
      
      





䞀方、ADSIの䜿甚は、より普遍的なアプロヌチです。 ちなみに、Windows XPから拒吊するこずを玍埗させられない保守的な顧客が倚数いたす。



この堎合、あるナヌザヌのすべおの暩限を別のナヌザヌに耇補するには、コマンドラむンから暙準ナヌティリティを䜿甚したす。



 dsquery user -samid Person |dsget user -memberof |dsmod group -addmbr "CN=Some Other Person(222),OU=Users,OU=_GlobalResources,OU=222,OU=E777,DC=emea,DC=corpdir,DC=net" –c
      
      





良い自動化



All Articles