非表示のものも含め、Windows 7システム上のユーザーアカウントの包括的なリストを取得する方法を探しています。 User Accountsダイアログ(>control userpasswords2
)は通常のユーザーアカウントのみを表示し、ローカルユーザーとグループエディターも通常のユーザーアカウントと管理者や管理者などの標準の非表示/無効なアカウントのみを表示しますゲスト。 Select Users or Groupsダイアログには、Find Nowボタンがあり、ユーザーとグループですが、残念ながら、LUGと同じ内容です。
TrustedInstallerなどの「非常に隠された」/仮想ユーザーアカウントを含むより包括的なリストを探しています(正確にはNT Service\TrustedInstaller —異なる「ドメイン」に注意してください)。
私はチェックした HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
、しかしSpecialAccounts
キーは存在しません。
私もチェックしましたHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
、およびSystemProfile、LocalService、NetworkServiceアカウントはリストされていますが、他のアカウントはありません(TrustedInstallerとそのilkなど)。
TrustedInstallerは、ユーザー、サービス、および実行可能ファイルであるため、具体的には少し混乱しています。例として使用しているのは、どのユーザーリストにもリストされていないように見える「スーパー非表示」であるためです。 (実験として、「trustedinstaller」をレジストリ全体で検索して、ユーザーとしてリストされている場所を見つけることができるかどうかを確認しましたが、見つかりませんでした。)
明確にするために、私が探しているのは、権限ダイアログなどのユーザー入力フィールドやrunas
引数として使用できるすべてのアカウントのリストです。
すべての可能なアカウントの最終的なリストがあるとは思いません。
権限ダイアログなど、ユーザー入力フィールドで使用できる名前にはさまざまなタイプがあります。
まず、標準のWin32_Accountsです。完全なリストを取得するには、PowerShellセッションを開いて実行します。
get-wmiobject -class "win32_account" -namespace "root\cimv2" | sort caption | format-table caption, __CLASS, FullName
これらは通常のユーザー、グループ、およびビルトインアカウントです。
Vista以降、通常の管理ツールには表示されないため、仮想アカウントと呼ばれる新しいクラスのアカウントがあります。サービスアカウントと呼ばれることもあり、これらには少なくとも3つの異なるタイプがあります。
VistaのすべてのWindowsサービスには仮想アカウントが関連付けられているため、たとえ別のユーザーアカウントで実行されていても、まったく実行されていなくてもです。 NT Service\MSSQLSERVER
のように見えます
それらの使用のリストを取得するには:
get-service | foreach {Write-Host NT Service\$($_.Name)}
ApplicationPoolIdentityの下で実行される各IISアプリケーションプールは、IIS APPPOOL\NameOfThePool
という特別なアカウントの下で実行されます
IIS管理スクリプトツールがインストールされていると仮定すると、次のコマンドを実行できます。
Get-WebConfiguration system.applicationHost/applicationPools/* /* | where {$_.ProcessModel.identitytype -eq 'ApplicationPoolIdentity'} | foreach {Write-Host IIS APPPOOL\$($_.Name)}
Server 2008+およびWindows 8+では、Hyper-Vを使用しており、各仮想マシンは、次のような独自の仮想アカウントを作成します:NT VIRTUAL MACHINE\1043F032-2199-4DEA-8E69-72031FAA50C5
リストを取得するには:
get-vm | foreach {Write-Host NT VIRTUAL MACHINE\$($_.Id) - $($_.VMName)}
これらのアカウントは権限ダイアログでは受け入れられませんが、icacls.exeでそれらを使用して権限を設定できます。
他には表示されない特別なグループNT Virtual Machine\Virtual Machines
もあります。すべての仮想マシンアカウントはこのグループのメンバーであるため、これを使用してすべてのVMファイルにアクセス許可を設定できます。
これらの名前は言語固有です。ドイツ語ではNT Virtual Machine\Virtuelle Computer
という名前です
Dvm.exeプロセス(デスクトップウィンドウマネージャー)はユーザーWindows Manager\DWM-1
の下で実行されます
この場合も、権限ダイアログでこのタイプのユーザーを使用することはできません。 「デスクトップセッション」ごとに1つずつ存在するため、これらを列挙することは実際には不可能です。したがって、2つのRDPセッションを使用する場合、DWM-2
に加えてDWM-3
およびDVM-1
も使用できます。したがって、利用可能なデスクトップの数だけあります。
場合によっては、通常はActive Directoryドメインの一部であるときに、アクセス許可ダイアログでコンピューター名を使用することもできます。
PowerShellと「JEA(ジャストアドミニストレーション)」を使用して、PSリモートセッションでサーバーに接続すると、一時的な仮想ユーザーが作成される場合があります。
これらの形式は次のとおりです。
winrm virtual users\winrm va_x_computername_username
およびS-1-5-94-
で始まるSID
「x」は整数です。
これらのアカウントはNTFSアクセス許可を割り当てるときに使用できますが、これらの可能な仮想ユーザーをすべて一覧表示する方法がわかりません。
JEAセッションでは、whoami
を使用して現在のアカウント名を確認できます。
これらのリストでさえ、すべての可能なアカウントを与えるわけではありません。
たとえば、アプリケーションプールFooBarPool
を作成してからもう一度削除しても、権限ダイアログでIIS APPPOOL\FooBarPool
を使用できるため、どこかに内部リストが必要です。
これは、TrustedInstallerがサービスであり、「ユーザー」オブジェクトではないためです。 Vistaでは、サービスがセキュリティプリンシパルになり、アクセス許可を割り当てることができます。
http://technet.Microsoft.com/en-us/magazine/2007.06.acl.aspx
[セキュリティ]タブに移動し、Edit
をクリックします
Add...
をクリックしますAdvanced...
をクリックします
Object Types...
をクリックしてGroups
のチェックを外し、次にOK
をクリックします。
Find Now
をクリックします。これにより、すべての通常のユーザーと組み込みのシステムユーザーが一覧表示されます(Windowsがそれらを呼び出すときに「セキュリティ原則に組み込まれています」)。
このページに表示されるallアカウントはRun-Asコマンドでは使用できませんが、すべてアクセス許可ダイアログで使用できることに注意してください。
Windows Vista以降、サービスはユーザーとして扱われます。つまり、セキュリティ識別子(SID)がすべてのサービスに割り当てられます。これはTrustedInstallerサービスに固有のものではありません。 sc showsid
コマンドを使用して、任意のサービスに割り当てられたSIDを表示できます。
使用方法:sc showsid [name]
[〜#〜] description [〜#〜]:任意の名前に対応するサービスSID文字列を表示します。この名前は、既存のサービスまたは存在しないサービスの名前にすることができます。
サービスがシステム上に存在する必要はないことに注意してください。例:
C:\> sc showsid TrustedInstaller
NAME: TrustedInstaller
SERVICE SID: S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464
または、サービスの場合Windows Management Instrumentation(Winmgmt
):
C:\> sc showsid Winmgmt
NAME: Winmgmt
SERVICE SID: S-1-5-80-3750560858-172214265-3889451188-1914796615-4100997547
そして最後に、偽のサービスのために:
C:\> sc showsid FakeService
NAME: FakeService
SERVICE SID: S-1-5-80-3664595232-2741676599-416037805-3299632516-2952235698
すべてのSIDはS-1-5-80
で始まることに注意してください。ここで、80
はSECURITY_SERVICE_ID_BASE_RID
サブオーソリティに割り当てられています。さらに、この割り当ては確定的です。RIDは使用されず、SIDはすべてのシステムで同じになります(詳細については、この投稿の最後にあるリファレンスを参照してください)。
例として、NT Service\Winmgmt
サービスを割り当て、いくつかのファイルへの書き込み権限を与えます。
Windowsは名前Winmgmt
に下線を引き、それが有効なIDであることを確認します。
次に、[OK]をクリックして、書き込み権限を割り当てます。
これにより、任意のサービス名をユーザーIDとして使用できることが確認されます。したがって、私はそれらを「超隠し」アカウントとは呼びません:D
詳細については、次の記事をご覧ください。
NetQueryDisplayInformation APIを使用して、ユーザー情報フラグのビット単位のチェックと組み合わせることができます。まったく同じ要件があるので、サンプルコードをクックします(MSDN GROUPクエリから変更)。
私が使用したユーザーフラグはUF_NORMAL_ACCOUNT UF_ACCOUNTDISABLE UF_PASSWD_NOTREQD --->これにより、ヒューマンアカウントが取得されます。ヒューマンアカウントには常にパスワードが必要です。
作業コード: http://www.cceye.com/list-system-normal-user-account-only/