2010-02-25 14 views
9

Belirli bir kullanıcı olarak Windows altında çalışan bir işlem var. Bu işlemin mevcut belirtecini (OpenThreadToken ve DuplicateTokenEx gibi bir şeyle) alması, aynı makinedeki başka bir işleme (belki de bir ağ soketi veya başka bir IPC üzerinden) geçirmesi ve ardından bu işlemin gerçekleştirilmesini bekler. CreateProcessAsUser aramak için kullanmak için?İzin verilen işlemler arasında Windows güvenlik belirteci geçiyor

(http://msdn.microsoft.com/en-us/library/ms682429%28VS.85%29.aspx) belgesini okuduğum belgelerden, bunu yasaklayan hiçbir şey görmedim ama belki de belirteci yalnızca onu oluşturan iş parçacığı veya işlem tarafından kullanılabilir.

(Neden IIS'e gelmek, kimliği doğrulanmış olmak, IIS'nin uzak kullanıcının kimliğine bürünmesini düzenlemek ve kimliğe bürünme belirtecini başka bir sunucu işlemine (aynı makinede) iletmek için bir web isteğine sahip olmak istiyorum. Sunucu işlemi, uzak kullanıcı bağlamında bazı güvenlik denetimleri gerçekleştirebilir.)

cevap

8

Evet, bu mümkün. Hedef işlem için geçerli bir tanıtıcı elde etmek için DuplicateHandle'ı kullanabilirsiniz (yeni tanıtıcı değerini hedef işleme gönderir, böylece bunu bilir.). Ancak, hedef sürecin buna uygun olarak belirteci kullanması için ayrıcalıklara sahip olması gerekir. Örneğin. SE_IMPERSONATE kullanıcısını ve CPAU tarafından kullanılacak SE_ASSIGN_PRIMARY kimliğine bürünmek. Elbette MSDN'de ImpersonateLoggedOnUser ve CPAU için okuyabileceğiniz bazı istisnalar vardır.

5

Denemedim, ancak bu aynı soru asked here. Açıklama anlamlı görünüyor. İşlem kimliğini seçtiğiniz herhangi bir mekanizma yoluyla (ör. IPC) geçirin, sonra OpenProcess, OpenProcessToken ve son olarak ImpersonateLoggedOnUser'u arayın. Elde edilen tanıtıcı, CreateProcessAsUser öğesine geçirilebilir. Şey ... Bu işleve geçilebileceğini biliyorum ama bilmiyorum istediğim sonuca sahip olup olmayacağını biliyorum. Yine de ilginç bir soru.

+0

Bağlantı için teşekkürler - çok yararlı –

4

Neden adlandırılmış yöneltmeler kullanılmıyor ve ImpersonateNamedPipeUser() - çağrısı yapılıyor, güvenli ve güvenli! kimliğine bürünme işlemini yapan işlemin Kimliğe bürünme ayrıcalığına sahip olduğunu unutmayın.

+0

oops- bu ImpersonateNamedPipeClient() yapmak :) –

+0

İlginç bir fikir, ama benim durumumda nasıl düzenleyeceğimi gerçekten emin değilim (sunucu Java'da ve ben de bazı güvenlik denetimleri gerçekleştirmesi gereken bir alt işlemi iptal ederken JNI aracılığıyla CreateProcessAsUser çağrısı yapın). Biraz daha fazla bakacağım, teşekkürler. –