Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sécurité et composants COM avec VBS / WSH /WMI: besoin d'aide

2 réponses
Avatar
Yael Cheenne
Bonjour à toutes et à tous,

1) - Je rencontre un petit problème en VBS et je ne trouve pas de
solutions. Contexte : sous Windows XP (non connecté à un réseau
quelconque), je crée un utilisateur:

strComputer = "PCindus"
Set ListAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = ListAccounts.Create("user", "OperChim2")
objUser.SetPassword "09iu%4et"
objUser.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le compte est
correctement créé. Je crée ensuite le groupe dans lequel le compte
utilisateur doit être intégré:

strComputer = "PCindus"
Set ListGroups = GetObject("WinNT://" & strComputer & "")
Set objGroup = ListGroups.Create("group", "Chimie")
objGroup.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le groupe est
correctement créé

2) - Mais après je n'ai pas trouvé de soultion pour intégrer le compte
utilisateur au groupe. On trouve plein d'exemple pour Active
Directory, mais rien de simple quand on n'est pas connecté au réseau
ou en local

3) - Comment, lors de la création du compte ou du groupe, indiquer la
description, la désactivation du compte, l'expiration ou non du mot de
passe, en résumé les caractéristiques du compte ou du groupe ?


Brasse coulée façon "fer à repasser":

Pour mieux comprendre le contexte, je vais le décrire ci-dessous:

Une application industrielle "SCW", développée en langages Java et C++
est mise à disposition du client, sur un PC Windows XP SP2, via un
émulateur Unix propriétaire (MKS-SCO). Cet émulateur est installé sous
Windows XP SP2.

L'émulateur "NUCR" nécessite de démarrer avec un compte
d'authentification de service "Local System". Cet émulateur, une fois
lancé, lance une autre application "GhostD" (qui n'est rien d'autre
qu'un processus), donc il y a dépendance. Ce "GhostD" démarre lui
aussi avec un compte d'authentification de service "Local System".

Une fois ce "GhostD" lancé, il autorise un autre processus chargé
d'initialiser une application Java RMI (Remote Method Invocation),
contrôleé par l'émulateur.

La demande du client: remplacer les comptes "Local System" par des
comptes de services créés spécialement avec les droits strictement
nécessaires pour démarrer les applications et les processus.

4) - J'ai besoin de créer un compte de service pour démarrer une
application. Ce compte s'appelle "NUCR", mot de passe "xxxxxx" et doit
être intégré à un groupe local appelé "PCSERVICES". Ce compte ou son
groupe doit recevoir le droit "d'ouvrir une session en tant que
service". Comment fait-ton en VBS ?

5) - Comme ce compte se trouve dans la base SAM locale de
l'ordinateur, existe-t-il un moyen d'empêcher une ouverture de session
locale avec ce compte, sans enrayer le fonctionnnement de l'ouverture
de session en tant que service ?

--------------------------------------------------------------------------------------------------------------
En phase manuelle, cette application, à priori, nécessite d'utiliser
un compte de service authentifié avec le compte "Local System". Or
pour des raisons de sécurité imposées, il faut que l'application
démarre avec un compte de service non "Local System".

Si je le configure avec un compte enrichi de droits "Ouvrir une
session en tant que service", cela ne fonctionne pas. Si je rajoute ce
compte de service dans le groupe "Administrateurs" local de
l'ordinateur, alors l'application démarre. Conclusion: les droits
"Ouvrir une session en tant que service" ne sont pas suffisants et
l'ajout des droits "Administrateurs" provoquent le démarrage.

Constatations:

Tous les processus de ces applications démarrant avec le compte de
service "Local System" fonctionnent correctement et ils sont tous
visibles dans l'onglet "Processus" du "Gestionnaire de Tâches",
marqués comme "Démarré /Automatique" dans les services et accessible
via une console "Xterm" de l'émulateur par un "ps -aex | grep nomdu
processus"

Si l'on modifie le démarrage de l'application "NUCR" avec un compte de
service (qui a reçu les droits "Ouvrir une session en tant que
service"), l'application démarre, mais l'application dépendante
"GhostD" ne démarre pas (bien qu'il soit avec le compte "Local
System". Les autres applications, basculées avec ce même compte, sont
démarrées, apparaissent comme "Démarré / Automatique" au niveau des
services, mais invisibles dans le "Gestionnaire des tâches" et pas
plus dans la "XTerm".

Si je change le compte de service "Local System" de "GhostD" par le
nouveau compte de service. Ce dernier ne démarre pas, n'apparait pas
dans le "Gestionnaire de Tâches", ni dans le "Xterm". Le RMI ne
démarre pas non plus. Ce qui signifie que le nouveau compte de
service créé avec les droits "Ouvrir une session en tant que service"
n'a pas suffisamment de "droits".

6) - Question: quel est le détail de "Ouvrir une session en tant que
service" et est-il possible de connaitre de quoi sont constitués les
droits "Administrateurs" et ceux de "Local System" afin de, par
tatonnement, de ne mettre que ce qui est nécessaire pour faire
démarrer ce service ?

Comment peut-on avoir ce genre d'informations, via script VBS / WMI ou
fait-il passer par un langage plus évolué type C++ ?


7) - Comment par script, accéder à n'importe quel composant COM
Windows, pour déterminer les propriétés, les méthodes possibles ?

Où trouver une documentation COMPLETE de tous ces composants COM ?

Merci pour votre aide.
Cordialement,
Houdini

2 réponses

Avatar
Michel Pierron
Bonjour Yael;
Peut être ainsi:

' Création utilisateur
strComputer = "PCindus"
Set ListAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = ListAccounts.Create("user", "OperChim2")
objUser.Put "Description", "Ici, la description de l'utilisateur"
objUser.SetPassword "09iu%4et"
' Force changement MDP à la première connexion
objUser.Put "pwdLastSet", 0
' Active le compte
objUser.AccountDisabled = False
objUser.SetInfo


' Ajout de l'utilisateur au groupe:
strComputer = "PCindus"
strGroup = "Chimie"
strUser = "OperChim2"
Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup &
",group")
Set objUser = GetObject("WinNT://" & strComputer & "/" & strUser & ",user")
objGroup.Add (objUser.ADsPath)

MP


"Yael Cheenne" a écrit dans le message de news:

Bonjour à toutes et à tous,

1) - Je rencontre un petit problème en VBS et je ne trouve pas de
solutions. Contexte : sous Windows XP (non connecté à un réseau
quelconque), je crée un utilisateur:

strComputer = "PCindus"
Set ListAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = ListAccounts.Create("user", "OperChim2")
objUser.SetPassword "09iu%4et"
objUser.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le compte est
correctement créé. Je crée ensuite le groupe dans lequel le compte
utilisateur doit être intégré:

strComputer = "PCindus"
Set ListGroups = GetObject("WinNT://" & strComputer & "")
Set objGroup = ListGroups.Create("group", "Chimie")
objGroup.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le groupe est
correctement créé

2) - Mais après je n'ai pas trouvé de soultion pour intégrer le compte
utilisateur au groupe. On trouve plein d'exemple pour Active
Directory, mais rien de simple quand on n'est pas connecté au réseau
ou en local

3) - Comment, lors de la création du compte ou du groupe, indiquer la
description, la désactivation du compte, l'expiration ou non du mot de
passe, en résumé les caractéristiques du compte ou du groupe ?


Brasse coulée façon "fer à repasser":

Pour mieux comprendre le contexte, je vais le décrire ci-dessous:

Une application industrielle "SCW", développée en langages Java et C++
est mise à disposition du client, sur un PC Windows XP SP2, via un
émulateur Unix propriétaire (MKS-SCO). Cet émulateur est installé sous
Windows XP SP2.

L'émulateur "NUCR" nécessite de démarrer avec un compte
d'authentification de service "Local System". Cet émulateur, une fois
lancé, lance une autre application "GhostD" (qui n'est rien d'autre
qu'un processus), donc il y a dépendance. Ce "GhostD" démarre lui
aussi avec un compte d'authentification de service "Local System".

Une fois ce "GhostD" lancé, il autorise un autre processus chargé
d'initialiser une application Java RMI (Remote Method Invocation),
contrôleé par l'émulateur.

La demande du client: remplacer les comptes "Local System" par des
comptes de services créés spécialement avec les droits strictement
nécessaires pour démarrer les applications et les processus.

4) - J'ai besoin de créer un compte de service pour démarrer une
application. Ce compte s'appelle "NUCR", mot de passe "xxxxxx" et doit
être intégré à un groupe local appelé "PCSERVICES". Ce compte ou son
groupe doit recevoir le droit "d'ouvrir une session en tant que
service". Comment fait-ton en VBS ?

5) - Comme ce compte se trouve dans la base SAM locale de
l'ordinateur, existe-t-il un moyen d'empêcher une ouverture de session
locale avec ce compte, sans enrayer le fonctionnnement de l'ouverture
de session en tant que service ?

--------------------------------------------------------------------------------------------------------------
En phase manuelle, cette application, à priori, nécessite d'utiliser
un compte de service authentifié avec le compte "Local System". Or
pour des raisons de sécurité imposées, il faut que l'application
démarre avec un compte de service non "Local System".

Si je le configure avec un compte enrichi de droits "Ouvrir une
session en tant que service", cela ne fonctionne pas. Si je rajoute ce
compte de service dans le groupe "Administrateurs" local de
l'ordinateur, alors l'application démarre. Conclusion: les droits
"Ouvrir une session en tant que service" ne sont pas suffisants et
l'ajout des droits "Administrateurs" provoquent le démarrage.

Constatations:

Tous les processus de ces applications démarrant avec le compte de
service "Local System" fonctionnent correctement et ils sont tous
visibles dans l'onglet "Processus" du "Gestionnaire de Tâches",
marqués comme "Démarré /Automatique" dans les services et accessible
via une console "Xterm" de l'émulateur par un "ps -aex | grep nomdu
processus"

Si l'on modifie le démarrage de l'application "NUCR" avec un compte de
service (qui a reçu les droits "Ouvrir une session en tant que
service"), l'application démarre, mais l'application dépendante
"GhostD" ne démarre pas (bien qu'il soit avec le compte "Local
System". Les autres applications, basculées avec ce même compte, sont
démarrées, apparaissent comme "Démarré / Automatique" au niveau des
services, mais invisibles dans le "Gestionnaire des tâches" et pas
plus dans la "XTerm".

Si je change le compte de service "Local System" de "GhostD" par le
nouveau compte de service. Ce dernier ne démarre pas, n'apparait pas
dans le "Gestionnaire de Tâches", ni dans le "Xterm". Le RMI ne
démarre pas non plus. Ce qui signifie que le nouveau compte de
service créé avec les droits "Ouvrir une session en tant que service"
n'a pas suffisamment de "droits".

6) - Question: quel est le détail de "Ouvrir une session en tant que
service" et est-il possible de connaitre de quoi sont constitués les
droits "Administrateurs" et ceux de "Local System" afin de, par
tatonnement, de ne mettre que ce qui est nécessaire pour faire
démarrer ce service ?

Comment peut-on avoir ce genre d'informations, via script VBS / WMI ou
fait-il passer par un langage plus évolué type C++ ?


7) - Comment par script, accéder à n'importe quel composant COM
Windows, pour déterminer les propriétés, les méthodes possibles ?

Où trouver une documentation COMPLETE de tous ces composants COM ?

Merci pour votre aide.
Cordialement,
Houdini













Avatar
GOWAP
Très bien !
GOWAP

"Michel Pierron" a écrit dans le message de news:

Bonjour Yael;
Peut être ainsi:

' Création utilisateur
strComputer = "PCindus"
Set ListAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = ListAccounts.Create("user", "OperChim2")
objUser.Put "Description", "Ici, la description de l'utilisateur"
objUser.SetPassword "09iu%4et"
' Force changement MDP à la première connexion
objUser.Put "pwdLastSet", 0
' Active le compte
objUser.AccountDisabled = False
objUser.SetInfo


' Ajout de l'utilisateur au groupe:
strComputer = "PCindus"
strGroup = "Chimie"
strUser = "OperChim2"
Set objGroup = GetObject("WinNT://" & strComputer & "/" & strGroup &
",group")
Set objUser = GetObject("WinNT://" & strComputer & "/" & strUser &
",user")
objGroup.Add (objUser.ADsPath)

MP


"Yael Cheenne" a écrit dans le message de news:

Bonjour à toutes et à tous,

1) - Je rencontre un petit problème en VBS et je ne trouve pas de
solutions. Contexte : sous Windows XP (non connecté à un réseau
quelconque), je crée un utilisateur:

strComputer = "PCindus"
Set ListAccounts = GetObject("WinNT://" & strComputer & "")
Set objUser = ListAccounts.Create("user", "OperChim2")
objUser.SetPassword "09iu%4et"
objUser.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le compte est
correctement créé. Je crée ensuite le groupe dans lequel le compte
utilisateur doit être intégré:

strComputer = "PCindus"
Set ListGroups = GetObject("WinNT://" & strComputer & "")
Set objGroup = ListGroups.Create("group", "Chimie")
objGroup.SetInfo

Execution OK et vérification dans "Lusrmrg.msc" - le groupe est
correctement créé

2) - Mais après je n'ai pas trouvé de soultion pour intégrer le compte
utilisateur au groupe. On trouve plein d'exemple pour Active
Directory, mais rien de simple quand on n'est pas connecté au réseau
ou en local

3) - Comment, lors de la création du compte ou du groupe, indiquer la
description, la désactivation du compte, l'expiration ou non du mot de
passe, en résumé les caractéristiques du compte ou du groupe ?


Brasse coulée façon "fer à repasser":

Pour mieux comprendre le contexte, je vais le décrire ci-dessous:

Une application industrielle "SCW", développée en langages Java et C++
est mise à disposition du client, sur un PC Windows XP SP2, via un
émulateur Unix propriétaire (MKS-SCO). Cet émulateur est installé sous
Windows XP SP2.

L'émulateur "NUCR" nécessite de démarrer avec un compte
d'authentification de service "Local System". Cet émulateur, une fois
lancé, lance une autre application "GhostD" (qui n'est rien d'autre
qu'un processus), donc il y a dépendance. Ce "GhostD" démarre lui
aussi avec un compte d'authentification de service "Local System".

Une fois ce "GhostD" lancé, il autorise un autre processus chargé
d'initialiser une application Java RMI (Remote Method Invocation),
contrôleé par l'émulateur.

La demande du client: remplacer les comptes "Local System" par des
comptes de services créés spécialement avec les droits strictement
nécessaires pour démarrer les applications et les processus.

4) - J'ai besoin de créer un compte de service pour démarrer une
application. Ce compte s'appelle "NUCR", mot de passe "xxxxxx" et doit
être intégré à un groupe local appelé "PCSERVICES". Ce compte ou son
groupe doit recevoir le droit "d'ouvrir une session en tant que
service". Comment fait-ton en VBS ?

5) - Comme ce compte se trouve dans la base SAM locale de
l'ordinateur, existe-t-il un moyen d'empêcher une ouverture de session
locale avec ce compte, sans enrayer le fonctionnnement de l'ouverture
de session en tant que service ?

--------------------------------------------------------------------------------------------------------------
En phase manuelle, cette application, à priori, nécessite d'utiliser
un compte de service authentifié avec le compte "Local System". Or
pour des raisons de sécurité imposées, il faut que l'application
démarre avec un compte de service non "Local System".

Si je le configure avec un compte enrichi de droits "Ouvrir une
session en tant que service", cela ne fonctionne pas. Si je rajoute ce
compte de service dans le groupe "Administrateurs" local de
l'ordinateur, alors l'application démarre. Conclusion: les droits
"Ouvrir une session en tant que service" ne sont pas suffisants et
l'ajout des droits "Administrateurs" provoquent le démarrage.

Constatations:

Tous les processus de ces applications démarrant avec le compte de
service "Local System" fonctionnent correctement et ils sont tous
visibles dans l'onglet "Processus" du "Gestionnaire de Tâches",
marqués comme "Démarré /Automatique" dans les services et accessible
via une console "Xterm" de l'émulateur par un "ps -aex | grep nomdu
processus"

Si l'on modifie le démarrage de l'application "NUCR" avec un compte de
service (qui a reçu les droits "Ouvrir une session en tant que
service"), l'application démarre, mais l'application dépendante
"GhostD" ne démarre pas (bien qu'il soit avec le compte "Local
System". Les autres applications, basculées avec ce même compte, sont
démarrées, apparaissent comme "Démarré / Automatique" au niveau des
services, mais invisibles dans le "Gestionnaire des tâches" et pas
plus dans la "XTerm".

Si je change le compte de service "Local System" de "GhostD" par le
nouveau compte de service. Ce dernier ne démarre pas, n'apparait pas
dans le "Gestionnaire de Tâches", ni dans le "Xterm". Le RMI ne
démarre pas non plus. Ce qui signifie que le nouveau compte de
service créé avec les droits "Ouvrir une session en tant que service"
n'a pas suffisamment de "droits".

6) - Question: quel est le détail de "Ouvrir une session en tant que
service" et est-il possible de connaitre de quoi sont constitués les
droits "Administrateurs" et ceux de "Local System" afin de, par
tatonnement, de ne mettre que ce qui est nécessaire pour faire
démarrer ce service ?

Comment peut-on avoir ce genre d'informations, via script VBS / WMI ou
fait-il passer par un langage plus évolué type C++ ?


7) - Comment par script, accéder à n'importe quel composant COM
Windows, pour déterminer les propriétés, les méthodes possibles ?

Où trouver une documentation COMPLETE de tous ces composants COM ?

Merci pour votre aide.
Cordialement,
Houdini