בעיות גישה (אוטנטיקציה) לאתרים אנונימים ב IIS

חיים ליזרוביץ מסביר על שגיאה 401 Unauthorized באתרים מבוססי IIS בעזרת הכלי המובנה WFetch לאחרונה חקרתי בעיה בגישה לאתרי IIS אנונימים וקבלת הודעת השגיאה: HTTP/1.1 401 Unauthorized.
ניתן לבצע בדיקה פשוטה באמצעות הכלי WFetch שנמצא ב IIS Diagnostic, את הודעת השגיאה ניתן לראות בבירור ע"י הכלי:
 
 

שם המשתמש שמוקצה לחשבון אנונימי, הינו בד"כ: IUSR_,
כאשר ComputerNmae = שם של אותו שרת שמחזיק את ה IIS.

סיסמת המשתמש האנונימי ממוקמת בשני מקומות: ב MetaBase של ה IIS ובסיסמת המשתמש במערכת הפעלה (SAM):

 

הבעיה יכולה להתרחש באחד מהמצבים הבאים:
1. המשתמש IUSR נכנס למצב DISABLE, ננעל, נמחק, תוקף סיסמא שפגה.
2. הסיסמא של אותו משתמש שונה בהגדרות ה IIS ובהגדרות המשתמש תחת ה Computer Management.

לרוב, כדי לפתור את הבעיה בצורה עקיפה, מנהל הרשת מגדיר את אותו SITE תחת CREDENTIALS מסויימים שהוא בונה לצורך כך, פתרון בהחלט לא מומלץ ולא כדאי.
 
כיצד לדעת את סיסמת המשתמש האנונימי ?

על מנת לזהות את שם המשתמש, אנו נקליד את הפקודה הבאה, תחת תקיית ה AdminScripts:
c:
cd InetpubAdminScripts

במידה וה default web site מופעל כאנונימי, אנו נפעיל את הפקודה הבאה לזיהוי השם משתמש:

cscript.exe adsutil.vbs get w3svc/anonymoususername
למציאת כל האתרים שמופעים אנונימים:
cscript.exe adsutil.vbs find anonymoususername

לזיהוי הסיסמא אנו נקליד (שימו לב שהסיסמא מסומנת בכוכביות):
cscript.exe adsutil.vbs get w3svc/anonymoususerpass

לצורך כך יש לערוך את הקובץ שנקרא Adsutil.vbs שנמצא מתחת לתקיית C:InetpubAdminScripts ולשנות את ה IsSecureProperty
בשורה המופיעה באדום ל False.
 
On Error Resume Next
    Dim PropObj,Attribute
    Set PropObj = GetObject("IIS://" & MachineName & "/schema/" & ObjectParameter)
    If (Err.Number <> 0) Then
        ReportError ()
        WScript.Echo "Error trying to get the property: " & err.number
        WScript.Quit (Err.Number)
    End If
    Attribute = PropObj.Secure
    If (Attribute = True) Then
       IsSecureProperty = False
    Else
        IsSecureProperty = False
    End If
End Function
 
 
 
 
כעת נקליד את הפקודה הבאה על מנת לבדוק מה סיסמת המשתמש האנונימי:
cscript.exe adsutil.vbs get w3svc/anonymoususerpass

לאחר מציאת הסיסמא יש צורך לאפס את הסיסמא ב IIS עבור אתרים אנונימיים לסיסמא המוצגת. (אפשר לחלחל מה Default Web Site).
ניתן ע"י שינוי סיסמא ב GUI או ע"י הפקודה הבאה:
cscript.exe adsutil.vbs set w3svc///anonymoususerpass
 
חשוב מאוד !!! לצרכי אבטחה יש להחזיר את הערך שבקוד ל True !!

לאחר השינויים, אנו נעבוד עם WFetch על מנת לבדוק את הכניסה לאתר האנונימי, כאן ניתן לראות את ההודעה HTTP/1.1 OK.
 

 
ניתן להיעזר גם במאמר הבא:
http://support.microsoft.com/kb/297989

תודה לחיים על שיתוף המאמר

חיים ליזרוביץ
Microsoft Most Valuable Professional
Microsoft Certified IT professional / Enterprise & Server Administrator
Microsoft Certified Technology Specialist
Microsoft Certified System engineer& Administrator
Vmware Certified Professional
הבלוג של חיים ליזרוביץ

דילוג לתוכן