J'essaie de trouver un moyen d'obtenir une liste complète des comptes d'utilisateurs sur un système Windows 7, y compris les comptes cachés. La boîte de dialogue Comptes d'utilisateurs (>control userpasswords2
) affiche uniquement les comptes d'utilisateur normaux, et même l'éditeur Utilisateurs et groupes locaux affiche uniquement les utilisateurs normaux. comptes et ceux standard cachés/désactivés comme administrateur et invité. Le dialogue Sélectionner des utilisateurs ou des groupes comporte un bouton Rechercher maintenant qui regroupe des utilisateurs et des groupes mais, hélas, il a le même contenu. comme le GUL.
Je recherche une liste plus complète incluant des comptes d’utilisateur “super cachés”/virtuels comme TrustedInstaller (ou pour être plus précis, NT Service\TrustedInstaller - notez les différents “domaines”).
J'ai vérifié HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList
, mais la clé SpecialAccounts
n'existe pas.
J'ai également vérifié HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
et, même s'il possède les comptes SystemProfile, LocalService et NetworkService, il n'en a pas d'autres (comme TrustedInstaller et ses semblables).
TrustedInstaller est particulièrement déroutant car il s’agit d’un utilisateur, d’un service et d’un fichier exécutable. Je l'utilise comme exemple car il est "super caché" en ce sens qu'il ne semble pas figurer dans une liste d'utilisateurs. (A titre expérimental, j'ai essayé de chercher dans le registre entier "trustedinstaller" pour voir si je pouvais trouver un endroit où il est répertorié comme utilisateur, mais je n'en ai trouvé aucun.)
Pour être clair, ce que je recherche, c’est une liste de tous les comptes pouvant être utilisés dans un champ de saisie utilisateur, comme dans les boîtes de dialogue des autorisations ou comme argument runas
.
Je ne pense pas qu'il existe une liste ultime de tous les comptes possibles.
Vous pouvez utiliser différents types de noms dans le champ de saisie utilisateur, tels que dans les boîtes de dialogue des autorisations.
En premier lieu, les comptes Win32_Accounts standard. Pour obtenir la liste complète, ouvrez une session PowerShell et exécutez:
get-wmiobject -class "win32_account" -namespace "root\cimv2" | sort caption | format-table caption, __CLASS, FullName
Ce sont les utilisateurs habituels, les groupes et les comptes intégrés.
Depuis Vista, il existe une nouvelle classe de comptes, appelés comptes virtuels, car ils n'apparaissent pas dans les outils de gestion habituels. On appelle parfois aussi des comptes de service, et il en existe au moins trois types différents:
Depuis Vista, chaque service Windows est associé à un compte virtuel, même s’il est exécuté sous un compte utilisateur différent et même s’il ne fonctionne pas du tout. Cela ressemble à NT Service\MSSQLSERVER
Pour obtenir une liste de ces utilisations:
get-service | foreach {Write-Host NT Service\$($_.Name)}
Chaque pool d'applications IIS exécuté sous ApplicationPoolIdentity s'exécute sous un compte spécial appelé IIS APPPOOL\NameOfThePool
En supposant que vous avez installé les IIS outils de script de gestion, vous pouvez exécuter:
Get-WebConfiguration system.applicationHost/applicationPools/* /* | where {$_.ProcessModel.identitytype -eq 'ApplicationPoolIdentity'} | foreach {Write-Host IIS APPPOOL\$($_.Name)}
Sur le serveur 2008+ et Windows 8+, vous avez Hyper-V, chaque ordinateur virtuel crée son propre compte virtuel, qui ressemble à ceci: NT VIRTUAL MACHINE\1043F032-2199-4DEA-8E69-72031FAA50C5
pour obtenir une liste, utilisez:
get-vm | foreach {Write-Host NT VIRTUAL MACHINE\$($_.Id) - $($_.VMName)}
Même si ces comptes ne sont pas acceptés dans la boîte de dialogue des autorisations, vous pouvez les utiliser avec icacls.exe pour définir des autorisations.
Il existe également un groupe spécial NT Virtual Machine\Virtual Machines
, qui ne s'affiche pas ailleurs. Tous les comptes de machine virtuelle sont membres de ce groupe. Vous pouvez donc l'utiliser pour définir des autorisations pour tous les fichiers VM.
Ces noms sont spécifiques à une langue, par exemple. en allemand, il s'appelle NT Virtual Machine\Virtuelle Computer
Le processus dvm.exe (Desktop Window Manager) s’exécute sous un utilisateur Windows Manager\DWM-1
Encore une fois, vous ne pouvez pas utiliser ce type d'utilisateurs dans les boîtes de dialogue d'autorisations. Il n'est pas vraiment possible de les énumérer non plus, car il en existe une pour chaque "session de bureau". Par conséquent, lorsque vous utilisez deux sessions RDP, vous avez également DWM-2
et DWM-3
en plus de DVM-1
. Donc, il y en a autant qu'il y a de bureaux disponibles.
Dans certains cas, vous pouvez également utiliser des noms d'ordinateur dans la boîte de dialogue des autorisations, généralement lorsque vous faites partie d'un domaine Active Directory.
Lors de l'utilisation de PowerShell et de 'JEA (administration juste suffisante)' et de la connexion à un serveur avec une session à distance PS, un utilisateur virtuel temporaire peut être créé.
ceux-ci ont le format suivant:
winrm virtual users\winrm va_x_computername_username
et un SID commençant par S-1-5-94-
le 'x' est un nombre entier.
Ces comptes peuvent être utilisés lors de l'attribution d'autorisations NTFS, mais je ne sais pas comment répertorier tous ces utilisateurs virtuels possibles.
Pendant une session JEA, vous pouvez utiliser whoami
pour connaître le nom du compte actuel.
Même ces listes ne vous donnent pas tous les comptes possibles.
Par exemple, vous pouvez créer un pool d'applications FooBarPool
puis le supprimer à nouveau. Vous pouvez toujours utiliser IIS APPPOOL\FooBarPool
dans la boîte de dialogue des autorisations. Il doit donc exister une liste interne quelque part.
En effet, TrustedInstaller est un service et non un objet "utilisateur". Avec Vista, les services sont désormais des entités de sécurité et des autorisations peuvent être attribuées.
http://technet.Microsoft.com/en-us/magazine/2007.06.acl.aspx
Accédez à l'onglet Sécurité et cliquez sur Edit
Add...
Cliquez sur Advanced...
Cliquez sur Object Types...
et décochez Groups
, puis cliquez sur OK
Cliquez sur Find Now
. Ceci listera tous les utilisateurs réguliers et les utilisateurs du système intégré ("principes de sécurité intégrés", comme les appelle Windows).
Notez que pas tous les comptes apparaissant sur cette page ne peuvent être utilisés dans une commande d'identification, bien qu'ils puissent tous l'être dans une boîte de dialogue d'autorisations.
À partir de Windows Vista, les services sont traités comme des utilisateurs. C'est-à-dire qu'un identifiant de sécurité (SID) est attribué à chaque service. Ceci n'est pas spécifique au service de TrustedInstaller . Vous pouvez afficher le SID attribué à n’importe quel service à l’aide de la commande sc showsid
:
USAGE: sc showid [nom]
DESCRIPTION: Affiche la chaîne SID du service correspondant à un nom arbitraire. Le nom peut être celui d'un service existant ou non existant.
Notez qu'il n'est pas nécessaire que le service existe sur le système. Exemples:
C:\> sc showsid TrustedInstaller
NAME: TrustedInstaller
SERVICE SID: S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464
ou, pour le service Windows Management Instrumentation (Winmgmt
):
C:\> sc showsid Winmgmt
NAME: Winmgmt
SERVICE SID: S-1-5-80-3750560858-172214265-3889451188-1914796615-4100997547
et, enfin, pour un faux service:
C:\> sc showsid FakeService
NAME: FakeService
SERVICE SID: S-1-5-80-3664595232-2741676599-416037805-3299632516-2952235698
Notez que tous les SID commencent par S-1-5-80
, où 80
est attribué à la sous-autorité SECURITY_SERVICE_ID_BASE_RID
. De plus, cette affectation est déterministe: aucun RID n’est utilisé et le SID sera le même sur tous les systèmes (voir les références à la fin de ce post pour plus d’informations).
Par exemple, je vais assigner le service NT Service\Winmgmt
, une permission d’écriture à un fichier:
Windows souligne le nom Winmgmt
, confirmant qu'il s'agit d'une identité valide:
Maintenant, cliquez sur OK, puis attribuez l'autorisation d'écriture:
Cela confirme que tout nom de service peut être utilisé comme identité d'utilisateur. Par conséquent, je ne les appellerais pas des comptes "cachés au souper": D
Pour plus d'informations, veuillez lire les articles suivants:
Vous pouvez utiliser l'API NetQueryDisplayInformation, combiner avec la vérification au niveau du bit sur l'indicateur d'informations utilisateur. J'ai exactement les mêmes exigences, je prépare donc un exemple de code (modifié à partir d'une requête MSDN GROUP).
Les indicateurs utilisateur que j'ai utilisés sont UF_NORMAL_ACCOUNT UF_ACCOUNTDISABLE UF_PASSWD_NOTREQD ---> nous garantissons que nous obtenons un compte humain. Ce compte humain requiert toujours un mot de passe.
code de travail à: http://www.cceye.com/list-system-normal-user-account-only/