セキュリティまたは妄想:コマンド実行時の一時的な権利


前回の記事「 管理者全員を減らす 」では、管理者権限なしで作業する方法、具体的にはJust Enough Administration(JEA)テクノロジーについて説明しました。 このメカニズムは柔軟性がありますが、構成するのが難しく、状況によってはそれなしで実行できます。


たとえば、会計ソフトウェアが定期的に更新されるソフトウェアを使用する場合、管理者権限を発行したり、AdminLinkなどのサードパーティソリューションを使用したりする必要はまったくありません。 他のオプションがあります。


一時的なグループメンバーシップ


Windows 2016では、PAM-特権アクセス管理や特権アクセス制御システムなどのメカニズムが導入されました。 PAMの詳細については、 Active Directoryドメインサービス向けの Microsoft 特権アクセス管理のドキュメントを参照してください。 そのツールの1つは、特定の期間、ユーザーをグループに含める機能です。


PAMを有効にするには、次のコマンドを実行する必要があります。


Enable-ADOptionalFeature "Privileged Access Management Feature" -Scope ForestOrConfigurationSet -Target corp.domain.com 

そして、ドメインにオプションが含まれていることを確認します。



PAMをオンにします。


オプションが有効になっていることを確認するには、次のコマンドを使用します。


 Get-ADOptionalFeature -filter {name -like "Privileged*"} 


PAMが有効になっていることを確認します。


これで、グループのユーザーメンバーシップの時間を設定できます。 たとえば、ユーザーVasya.Pupkinに Account Operators グループに含めることで、ドメイン内のアカウントを管理する権利を付与します。


 $Time = New-TimeSpan -Minutes 15 Add-ADGroupMember -Identity " " -Members Vasya.Pupkin -MemberTimeToLive $Time 

グループ内の残りのユーザーライフタイムを確認するには、次のコマンドを使用します。


 Get-ADGroup " " -Property member –ShowMemberTimeToLive 


グループ内のユーザーを確認します。


TTL属性に秒単位のライフタイムが表示されます。 私の場合、値<TTL = 849>は、ユーザーVasya.Pupkinが849秒のグループで「生きている」ことを意味します。


必要に応じて、ユーザーをグループに追加するためのスクリプトをスケジューラにインストールできます。 そして、テクニカルサポートスタッフは、特定の時間に新しいユーザーを作成できます。たとえば、朝だけです。 もちろん、新しいユーザーの作成はまだ自動化されていません。


残念ながら、すべての人がWindows 2016の新機能を完全に楽しんでいるわけではありません。しかし、あなたはそれらがなくてもできます。


私の名前はジョージで、私は妄想です


確かに、グループにアカウントを追加してからグループからアカウントを削除できる場合に、いくつかの新しい機能を含めるのはなぜですか。 この方法は、従業員に一時的に権限を付与するには不便ですが、すべてのIS規定を順守して、管理者権限を持つユーザーの下で機能しない場合は、自分の作業に非常に適しています。


1C:Enterpriseサーバーを再起動する必要があるとします。 権限がある場合、次のコマンドを使用してこれを行うのは非常に簡単です。


 Invoke-Command -ComputerName servername -ScriptBlock { Restart-Service "1C:Enterprise 8.3 Server Agent" } 

しかし、私は管理者権限で作業していないので、別のユーザーadmin-zhoraを作成しました。これはserver-adminsグループの一部です。 次に、 制限されたグループメカニズムを使用して、このグループがローカルサーバー管理者に追加されました。 したがって、私のスクリプトは次のようになります。


 $Credential = Get-Credential Invoke-Command-ComputerName servername -Credential $Credential -ScriptBlock { Restart-Service "1C:Enterprise 8.3 Server Agent" } 


スクリプトの実行時に資格情報を要求します。


そして、私はセキュリティに関心があります-突然誰かがユーザー資格情報を盗みます。 そのため、スクリプトを完成させます。グループにユーザーを追加し、グループからユーザーを削除します。


 Add-ADGroupMember -Identity server-admins -Members admin-zhora ... Remove-ADGroupMember -Identity server-admins -Members admin-zhora –Confirm:$False 

今では安全です。 しかし、これは正確ではありません。


スクリプトにセキュリティを追加します。admin-zhoraユーザーのパスワードをランダムなパスワードに変更するたびに、侵害を心配しないようにします。 これを行うには、 スクリプトセンターポータルで公開されているNew-SWRandomPassword.ps1モジュールを使用して、次の関数を作成します。


 #requires -Modules New-SWRandomPassword function Reset-InvokePassword { param ( [Parameter(Mandatory=$true)] [string]$UserName ) $NewSecurePassword = ConvertTo-SecureString -String (New-SWRandomPassword -MinPasswordLength 14 -MaxPasswordLength 14) -AsPlainText -Force try { Set-ADAccountPassword -Identity $UserName -NewPassword $NewSecurePassword -Reset -Confirm:$False -ErrorAction Stop } catch { Write-Output "Could not change password" $ErrorMessage = $_.Exception.Message $ErrorMessage break } New-Object System.Management.Automation.PsCredential($UserName,$NewSecurePassword) } 

この関数の出力で、新しい資格情報を資格情報形式で取得し、他のコマンドレットに渡すことができます。 メインコマンドの実行前と実行後に、パスワード変更を初期スクリプトに追加します。 最終的なスクリプトは次のようになります。


 #requires -Modules Reset-InvokePassword Add-ADGroupMember -Identity server-admins -Members admin-zhora -Verbose $Credential = Reset-InvokePassword -Username admin-zhora Invoke-Command -ComputerName servername -Credential $Credential -ScriptBlock { Restart-Service "1C:Enterprise 8.3 Server Agent" -Verbose } Reset-InvokePassword -Username admin-zhora | Out-Null Remove-ADGroupMember -Identity server-admins -Members admin-zhora -Confirm:$False -Verbose 


これで十分に安全になり、パスワードも要求されなくなりました。


注意深い読者は、グループのパスワードとメンバーシップを変更するには、私のアカウントにグループとユーザーを管理する権限を与える必要があることに気付くでしょう。 さて、この例では、リスクを取る準備ができていますが、実際には、そのようなチームにはJEAを好みます。


JEAとsudoを比較する場合、予備設定と権限の付与が必要です。グループを追加および削除するメカニズムはsuに似ており、通常のタスクではなく1回限りのタスクに適しています。



Source: https://habr.com/ru/post/J358614/


All Articles