Imaginez que j'ai un processus existant fonctionnant sous Windows en tant qu'utilisateur particulier. Serait-il autorisé pour ce processus de prendre son jeton actuel (avec quelque chose comme OpthreadToken et DuplicateTelokelex), transmettez-le à un autre processus sur la même machine (peut-être via une prise réseau ou une autre IPC), puis vous attendez à ce que le processus puisse pouvoir Pour l'utiliser pour appeler CreateProcessasUser? P>
de la documentation que j'ai lu ( http: / /msdn.microsoft.com/en-us/library/ms682429%28vs.85%29.aspx ), je n'ai vu rien qui l'interdit, mais peut-être que le jeton ne peut être utilisé que par le fil ou le processus qui le créé. p>
(Pourquoi voudriez-vous? Je souhaite qu'une demande Web est-ce que l'IIS est authentifiée, avez-vous l'IIS organise l'impersonnation de l'utilisateur distant, puis transmettez le jeton d'impersonation à un autre processus de serveur (sur la même machine) afin que le Le processus de serveur peut effectuer des contrôles de sécurité dans le contexte de l'utilisateur distant) p>
3 Réponses :
Je n'ai pas essayé, mais il semble que c'est la même question Demandé ici . La description semble avoir un sens. Passez l'ID de processus via tout mécanisme que vous choisissez (par exemple, IPC), puis appelez OpenProcess < / a>, OpenProcessToken , et enfin
Merci pour le lien - très utile
Passer le processus-ID est en réalité un problème de sécurité. Avec cet utilisateur, un utilisateur pourrait démarrer un processus dans son comportement d'un autre utilisateur (ou même système).
Pourquoi n'utilisez pas simplement des tuyaux nommés, puis appelez IMPERSONATENAMAMEDPipeUser () - c'est sûr et sécurisé et facile! Notez que le processus effectuant l'impersonnation doit em> avoir le privilège d'impersonnation. P>
Oups - faites que l'impersonnate namedpipececlient () :)
Idée intéressante, mais je ne suis pas vraiment sûr de l'organiser dans mon cas (le serveur est en Java, et je prévoyais d'appeler le CreateProcessasuser via JNI lors de la modification d'un sous-processus nécessaire pour effectuer des contrôles de sécurité). Je vais regarder un peu plus, merci.
Oui, c'est possible. Vous pouvez utiliser duplicatedhandle pour obtenir une poignée valide pour le processus cible (envoie la nouvelle valeur de la poignée au processus cible, de sorte qu'elle le sait.). Cependant, le processus cible doit encore avoir les privilèges d'utiliser le jeton en conséquence. Par exemple. SE_IMPERSONATE Pour imiter l'utilisateur et SE_Assign_Primary à utiliser par CPAU. Bien sûr, il y a quelques exceptions que vous pouvez lire dans MSDN pour IMPERSONATELOGGEGNUUSER et CPAU. P>