سؤال

الوقوع في مشكلة في خوادم معينة نحصل على خطأ أن اسم الدليل غير صحيح عند استخدام الطريق.GetTempFileName.مزيد من التحقيق تبين أنه يحاول كتابة الملف إلى c:\Documents ووضع\computername\aspnet\local settings emp (وجدت باستخدام المسار.GetTempPath).هذا المجلد موجود لذا أفترض أن هذا يجب أن يكون مشكلة أذونات فيما يتعلق asp.net الاعتبار.

لقد قيل لي من قبل بعض هذا الطريق.GetTempFileName ينبغي الإشارة إلى C:\Windows\Microsoft.NET\Framework\v2.0.50727 emporaryasp.net ملفات.

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

يمكن لأي شخص أن يلقي بعض الضوء على هذا ؟

**تحديث:**تبين أن توفير 'iusr_ computername الوصول إلى المجلد لا حيلة.هو الاجراء الصحيحأنا لا أذكر فعل ذلك في الماضي ، و من الواضح تريد أن تتبع أفضل الممارسات للحفاظ على الأمن.هذا هو جزء من ملف عملية التحميل.

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

المحلول

وربما هذا هو مزيج من التمثيل و عدم تطابق مختلف أساليب المصادقة التي تحدث.

هناك العديد من القطع.سأحاول أن يذهب أكثر من كل واحد منهم.

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

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

الانتحال لا يحدث من تلقاء نفسه.فإنه يحتاج إلى أن تشغيل عمدا الويب الخاص بك.config.

<identity impersonate="true" />

إذا كان الإعداد مفقود أو تعيين إلى false التعليمات البرمجية الخاصة بك سيتم تنفيذ نقية و ببساطة تحت حساب ASPNET المذكورة أعلاه.تعطى رسالة الخطأ الخاصة بك, أنا متأكد من أن لديك الانتحال=true.لا يوجد شيء خاطئ مع هذا!الانتحال مزاياه وعيوبه التي تذهب إلى أبعد من هذا النقاش.

هناك سؤال واحد على اليسار:عند استخدام الانتحال ، الحساب الذي يحصل الممثل?

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

Iusr_ computername حساب حقوق منخفضة حساب تم إنشاؤه بواسطة IIS.بشكل افتراضي, هذا الحساب هو الحساب الذي شبكة الاتصال يعمل إذا كان المستخدم لا يمكن مصادقة.أي أن المستخدم يأتي في ك "مجهول".

باختصار ، هذا هو ما يحدث لك:

المستخدم الخاص بك هو محاولة الوصول إلى موقع ويب IIS لا يمكن مصادقة الشخص لسبب ما.لأن الوصول المجهول على (أو لا تراها IUSRComputerName الوصول إلى المجلد temp) ، IIS يسمح للمستخدم في أي حال ، ولكن عام المستخدم.الخاص بك ASP.NET تشغيل التعليمات البرمجية و ينتحل هذا عام IUSR___ComputerName "ضيف" الحساب ؛ الآن فقط رمز لا يكون الوصول إلى الأشياء التي ASPNET حساب الوصول إلى ، بما في ذلك مجلد مؤقت.

منح iusr_ computername وصول الكتابة إلى المجلد يجعل الأعراض.

ولكن هذا فقط الأعراض.تحتاج إلى مراجعة لماذا هو شخص قادم باسم "مجهول/ضيف"?

هناك اثنين من السيناريوهات المحتملة:

أ) تعتزم استخدام IIS من أجل المصادقة ، ولكن إعدادات المصادقة في IIS على بعض الخوادم خاطئة.

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

لقد عملت مع هذا السيناريو عدة مرات وبصراحة يعطيك أقل الصداع التخلي عن مجلد Temp;إنشاء مجلد مخصص في الملقم تعيين الأذونات المناسبة ، وتحديد موقعها في شبكة الإنترنت.config.

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

هذه الحالة هو قليلا أكثر تعقيدا.

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

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

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

حظا سعيدا!

نصائح أخرى

يمكن أن يكون بسبب IIS_WPG لم يكن الوصول إلى مجلد مؤقت.إذا كنت تعتقد أنه هو إذن المسألة تشغيل Procmon على asp.net عامل عملية التحقق من AccessDenied الأخطاء.

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

يمكنك استخدام مسار.GetTempPath() لمعرفة أي الدليل الذي يحاول الكتابة.

كنت أعاني من نفس المشكلة مع واحد من بلدي ASP.Net التطبيقات.لقد كان الحصول على مسار.GetTempPath() ولكن كان رمي استثناء من:

"لا يمكن الكتابة إلى ملف "C:\Windows emp\somefilename" استثناء:الوصول إلى المسار "C:\Windows emp\somefilename" مرفوض"

حاولت بعض الاقتراحات في هذه الصفحة, ولكن لا شيء ساعد.

في النهاية ذهبت إلى ملقم ويب (ملقم IIS) و تغيير الأذونات على الملقم "C:\Windows emp" الدليل إلى إعطاء "الجميع" المستخدم كامل قراءة-كتابة الأذونات.

ثم أخيرا استثناء ذهب بعيدا و يمكن للمستخدمين تحميل الملفات من التطبيق.تفو!

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