سؤال

ولدي مشكلة مع بدء العمليات في سياق انتحاله في ASP.NET 2.0.

وانا بدأت عملية جديدة في قانون بلدي خدمة ويب. IIS 5.1 NET 2.0

[WebMethod]
public string HelloWorld()
{
    string path = @"C:\KB\GetWindowUser.exe";
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.WorkingDirectory = Path.GetDirectoryName(path);
    startInfo.FileName = path;
    startInfo.UseShellExecute = false;
    startInfo.CreateNoWindow = true;
    startInfo.ErrorDialog = false;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;
    Process docCreateProcess = Process.Start(startInfo);

    string errors = docCreateProcess.StandardError.ReadToEnd();
    string output = docCreateProcess.StandardOutput.ReadToEnd();
}

وو"C: \ KB \ GetWindowUser.exe" هو تطبيق وحدة تحتوي على التعليمات البرمجية التالية:

static void Main(string[] args)
{
    Console.WriteLine("Windows: " + WindowsIdentity.GetCurrent().Name);
}

وعندما تحتج خدمة الإنترنت دون الانتحال، كل شيء يعمل بشكل جيد.

عند أنتقل على التمثيل، وكتابة الخطأ التالية في "أخطاء" متغير في التعليمات البرمجية خدمة الإنترنت:

واستثناء غير معالج: System.Security.SecurityException: تم رفض الوصول \ ص \ ن \ ص \ ن في System.Security.Principal.WindowsIdentity.GetCurrentInternal (TokenAccessLevels desiredAccess، منطقية threadOnly) \ ص \ ن في System.Security. Principal.WindowsIdentity.GetCurrent () \ ص \ ن في ObfuscatedMdc.Program.Main (سلسلة [] وسائط) \ ص \ n المنطقة من التجميع الذي فشل هو: \ ص \ nMyComputer

والمستخدم الممثل هو المسؤول المحلي والوصول إلى C: \ KB \ GetWindowUser.exe للتنفيذ

عند يمكنني تحديد المستخدم نافذة صراحة في ProcesStartInfo خصائص المجال، المستخدم وكلمة المرور، وحصلت على الرسالة التالية: http://img201.imageshack.us/img201/5870/pstartah8.jpg

هل من الممكن أن تبدأ العملية مع اعتماد مختلفة من ASPNET من asp.net (IIS 5.1)؟

هل كانت مفيدة؟

المحلول

وعليك ان تضع كود متميز في GAC (أو تشغيل في ثقة كاملة).

والتعليمات البرمجية في GAC يجب أن يؤكد على XXXPermission، حيث XXX هو ما من أي وقت مضى إذن كنت تطلب، سواء كان ذلك التمثيل، والوصول إلى طوة أو ما إلى ذلك.

ويجب أن تعود للASSERT فورا afterwords.

ويجب عليك التأكد من أن API على DLL الخاص التي وضعت في GAC لا يوجد لديه فرص لسوء المعاملة. على سبيل المثال، إذا كنت تكتب موقع على شبكة الانترنت لالسماح للمستخدمين النسخ الاحتياطي الخادم عن طريق تطبيق سطر الأوامر، API الخاصة بك ينبغي أن العمر تعرض طريقة مثل "الاحتياطيه ()" وليس "LaunchAribitraryProcess (مسار سلسلة)"

ويجب أن يكون ملف web.config التمثيل اقامة كذلك، أو سوف واجهت مشاكل إذن NTFS وكذلك CAS.

وهنا هو كاملة تفسير .

نصائح أخرى

ويمكنك أيضا محاولة التفاف التعليمات البرمجية داخل

using (Impersonator person = new Impersonator("domainName", "userName",
"password")
{
    // do something requiring special permissions
}

وكما هو مذكور في http://www.devnewsgroups.net/group/ microsoft.public.dotnet.framework.windowsforms / topic62740.aspx

ما هي بالضبط كنت تحاول أن تفعل؟ لا استطيع ان ارى تماما ما هي نقطة من التعليمات البرمجية في خلق تنفيذ مختلف. يبدو غريبا نوعا ما. ربما سيكون أكثر فائدة لتحديد المشكلة الاعمال تحاول حل أولا.

ويبدو أنك كنت تحاول الحصول على خدمة IIS انتحال صفة مستخدم مع امتيازات أعلى من الخدمة نفسها (في هذه الحالة، مسؤول). كتل النوافذ هذا بمثابة ثغرة أمنية، لأن في تلك المرحلة كنت التسول في الأساس شخص لتولي النظام الخاص بك. قد تكون هناك وسيلة للتغلب على هذا القيد، ولكن لا تفعل ذلك - انها لمصلحتك

وبدلا من ذلك، يكون IIS انتحال صفة مستخدم مع أذونات محدودة، لديه الحقوق التي كنت في حاجة إليها لديك بالضبط. مثلا إنشاء حساب المستخدم الذي يملك سوى المجلدات التي تريد خدمة الويب الخاص بك لإرسال ل، أو أيا كان الجمع بين البعض من الحقوق هو المناسب. إذا انتحال صفة مستخدم محدود، فلن ترى رمز الخطأ هذا، ولكن يجب أن يكون لا يزال قادرا على استدعاء للتنفيذ حميدة لديك هنا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top