すべてのユーザーアカウントの権限(SeShutDownPrivilege
など)を一覧表示するスクリプトを記述しようとしています。スクリプトを標準ユーザーとして実行できるのであればそれが望ましいですが、必要に応じて管理者アカウントとして実行することもできます。これまでに試したアプローチは次のとおりです。
tokenszを使用して(から https://blogs.technet.Microsoft.com/askds/2007/11/02/whats-in-a-token/ ):機能します(tokensz /compute_tokensize /dump_groups
)for現在ログインしているユーザー。しかし、ドメイン管理者としてもログインしているときに別のユーザー(tokensz /compute_tokensize /dump_groups /user:[another.user]
)を試すと、エラーSEC_E_LOGON_DENIED
が発生します
whoami /all
は機能しますが、現在ログインしているユーザーのみが対象です
ntrights.exe
は、権限を一覧表示できず、追加と削除のみができるようです。
secedit /export /areas USER_RIGHTS /cfg out.txt
:すべての権限とその権限を持つSIDを一覧表示しますが、その一覧は不完全に見えます。 tokensz
からの出力は、SeShutdownPrivilege
を持つユーザーJohn.Smith
を示していますが、secedit
に対するSeShutdownPrivilege
からの出力は、John.Smith
がメンバーではないグループをリストしています。
ポータブル実行可能ファイル(tokensz.exe
、ntrights.exe
など)とビルトインユーティリティを使用できますが、アプリケーションや拡張機能をインストールできません
このタスクを実行するには、 AccessChk を使用できます。
Accesschk “domain\user” -a *
は、特定のドメインユーザーのすべての権限を一覧表示します。
PowerShellスクリプト内でこのプログラムを呼び出し、結果をテキストファイルに連結してから、知りたいアクセス許可のみを除外できます。
PowerShellスクリプトを探している人にとって、これはそれを行うべきです:
gwmi Win32_UserProfile | foreach-object {
$sid = New-Object System.Security.Principal.SecurityIdentifier($_.SID)
$user = $sid.Translate([System.Security.Principal.NTAccount])
$username = $user.Value
$username
$chkCmd = "accesschk """ + $username + """ -a * -q"
iex $chkCmd
""
}
プロファイルを持っているユーザーのリストローカルマシン上を取得し、SIDからユーザー名を特定し、Ramhoundの推奨に従ってaccesschk
を呼び出します。各ユーザーのレコードは、DOMAIN\user
形式のユーザー名で始まり、行に各権利が含まれ、空白行で終わります。 (SID変換は この記事 の厚意によるものです。)リダイレクト演算子>
を使用して、その内容をファイルにダンプできます。
AccessChkの注意点は、ローカル管理者権限を持たないドメインユーザーに対して空のリストを生成するように見えることです。したがって、ドメイン内およびマシン上のすべての既知のユーザーについて上記の情報を生成するこのバージョンは少し不完全ですが、ツールの将来のバージョンで役立つ可能性があります。
gwmi Win32_UserAccount | foreach-object {
$username = $_.Caption
$username
$chkCmd = "accesschk """ + $username + """ -a * -q"
iex $chkCmd
""
}
secedit
が何について話しているのか疑問に思っている場合は、ユーザー権利の割り当てで権限が割り当てられているプリンシパルのリスト(SID形式)を取得しているだけです(secpol.msc
を参照)。したがって、通常、特定のユーザーではなく、ユーザーや管理者などのグループのSIDが表示されます。
この script が役立つ場合があります。純粋なPowerShellを使用して、次の機能を提供します。