Bagikan melalui


Memulai Konfigurasi di IIS 7 ke Atas

oleh Tobin Titus

Abstrak

Sistem konfigurasi di IIS 7 ke atas didasarkan pada file XML yang didistribusikan, teks jelas, yang menyimpan pengaturan konfigurasi untuk seluruh platform server web, termasuk IIS, ASP.NET dan komponen lainnya, dan dapat secara opsional diatur di direktori konten bersama dengan konten web. Tingkat hierarki konfigurasi yang berbeda dapat didelegasikan oleh administrator komputer ke pengguna lain, seperti administrator situs atau pengembang aplikasi. Default aman dan penguncian di luar kotak membatasi akses tulis ke pengaturan konfigurasi hanya untuk administrator komputer; namun, fitur penguncian yang canggih dan terperinci memungkinkan pembukaan kunci dan delegasi pengelolaan pengaturan konfigurasi tertentu yang aman kepada lebih banyak pengguna, untuk cakupan namespace web mereka. Sistem ini kompatibel dengan versi sebelumnya, di tingkat API, dengan versi IIS sebelumnya, dan di tingkat XML, dengan versi .NET framework sebelumnya. Dokumen ini memberikan gambaran umum tentang sistem konfigurasi baru.

Pengantar

Sistem konfigurasi di IIS didasarkan pada file XML terdistribusi, teks jelas, yang menyimpan pengaturan konfigurasi untuk seluruh platform server web, termasuk IIS, ASP.NET dan komponen lainnya, dan dapat secara opsional diatur di direktori konten bersama dengan konten web. Tingkat hierarki konfigurasi yang berbeda dapat didelegasikan oleh administrator komputer ke pengguna lain, seperti administrator situs atau pengembang aplikasi. Default aman dan penguncian di luar kotak membatasi akses tulis ke pengaturan konfigurasi hanya untuk administrator komputer; namun, fitur penguncian yang canggih dan terperinci memungkinkan pembukaan kunci dan delegasi pengelolaan pengaturan konfigurasi tertentu yang aman kepada lebih banyak pengguna, untuk cakupan namespace web mereka. Sistem ini kompatibel dengan versi sebelumnya, di tingkat API, dengan versi IIS sebelumnya, dan di tingkat XML, dengan versi .NET framework sebelumnya.

Sistem konfigurasi baru dirancang untuk menjadi:

  • Sederhana: Semua status ada dalam file; Tidak ada penyimpanan kepemilikan yang digunakan; Tidak ada database konfigurasi dalam memori yang merupakan master nyata dari status konfigurasi (tidak seperti layanan IISADMIN di IIS 6.0); Skema ini digerakkan oleh data dan 100% deklaratif dan dapat ditemukan.

  • Low-TCO: Konfigurasi dapat di-xcopied bersama dengan konten web; Administrasi yang didelegasikan opsional menghilangkan keterlibatan administrator komputer dalam setiap perubahan konfigurasi; Penyatuan pengaturan konfigurasi dan model di seluruh IIS, ASP.NET dan platform server web lainnya menyediakan one-stop-shop untuk mengelola server menggunakan set alat dan API yang sama (misalnya, file web.config mungkin berisi pengaturan IIS dan ASP.NET, dan ada satu tempat di kedua untuk mengontrol fitur seperti autentikasi, otorisasi, kesalahan kustom); pencadangan, pemulihan, manajemen keamanan (ACL) didasarkan pada alat dan proses sistem file standar.

  • Aman: Ketika IIS diinstal, status konfigurasi berada dalam satu file yang dilindungi hanya untuk akses administrator mesin; Tidak ada delegasi yang diaktifkan secara default; Tidak ada informasi sensitif (seperti kata sandi) yang disimpan secara default; Ketika informasi sensitif perlu ditulis ke file konfigurasi, informasi tersebut secara otomatis dienkripsi di disk; Konfigurasi per aplikasi dapat dikotak pasir dan diisolasi dalam file khusus (dilindungi oleh ACL sistem file) sehingga aplikasi lain tidak dapat berbagi atau membaca pengaturan.

  • Dapat diperluas: Menambahkan ke skema hanyalah masalah menghilangkan file XML ke folder skema; Tidak perlu memanggil API atau menjalankan alat untuk memperluas skema; Pengaturan diatur dalam blok terkait logis yang disebut 'bagian' (persis seperti dalam konfigurasi kerangka kerja .NET), dan menambahkan bagian baru itu mudah (tidak perlu menulis kode apa pun - tidak seperti dalam konfigurasi kerangka kerja .NET); Membaca pengaturan bagian kustom dari modul server atau aplikasi sederhana dan lurus ke depan.

  • Kompatibel: Aplikasi IIS yang ada dapat terus memanggil antarmuka seperti Admin Base Objects (ABO), penyedia IIS ADSI, dan penyedia IIS 6.0 WMI; Aplikasi .NET framework yang ada dapat terus memanggil antarmuka seperti System.Configuration dan System.Web.Configuration; Pengguna yang terbiasa dengan format XML machine.config dan web.config akan terus mengalami format dan sintaks yang sama dalam file-file ini, ditambah mereka akan dapat mengedit pengaturan IIS secara manual yang mengikuti format dan model yang sama; Pengguna yang terbiasa dengan nama properti IIS Metabase akan menemukan nama yang sama untuk properti di file konfigurasi IIS 7.0 ke atas yang baru.

Skema Bersih

Berikut adalah contoh yang menunjukkan skema untuk konfigurasi.

Ini menunjukkan bagaimana pengaturan autentikasi diatur di IIS 6, dan di IIS 7.0 ke atas.

Catatan

Pembaca yang tidak terbiasa dengan konsep IIS 6.0 cukup mengabaikan perbandingan dengan IIS 6.0 dan hanya membaca konsep dan manfaat IIS 7.0 ke atas.

Pertama-tama kita akan membandingkan cara konfigurasi bertahan dalam file, dan kemudian kita akan melihat definisi skema.

Dalam file konfigurasi itu sendiri:

//
// Snippet from IIS 6.0 Metabase.xml
//
<IIsWebService    Location ="/LM/W3SVC"
      ... many lines here ...
    AuthFlags="AuthAnonymous"
      ... many lines here ...
    >
</IIsWebService>
<IIsWebDirectory    Location ="/LM/W3SVC/1/ROOT/aspnet_webadmin/2_0_41016"
    AuthFlags="AuthAnonymous | AuthNTLM"
    >
</IIsWebDirectory>
<IIsWebVirtualDir    Location ="/LM/W3SVC/Info/Templates/Public Web Site/Root"
        AuthFlags="AuthAnonymous"
    >
</IIsWebVirtualDir>

//
// Snippet from IIS 7.0 applicationHost.config
//
<anonymousAuthentication enabled="true"  userName="…"  password="…" />
<basicAuthentication enabled="false" />
<clientCertificateMappingAuthentication enabled="false" />
<windowsAuthentication enabled="true" >
    <providers>
        <add value="Negotiate" />
        <add value="NTLM" />
    </providers>
</windowsAuthentication>

Kunci takeaways:

  • IIS 6.0 menggunakan daftar properti yang sangat panjang, "datar". Tidak ada hierarki atau pengelompokan properti. Sulit untuk mencari pengaturan konfigurasi di antara ratusan pengaturan dalam daftar yang sama. IIS 7.0 ke atas menggunakan hierarki bagian dan grup bagian, dan sub-elemen dalam bagian. Sangat mudah untuk mencari pengaturan autentikasi, dengan mencarinya di grup bagian autentikasi, atau di bagian autentikasi tertentu.
  • IIS 6.0 menggunakan bendera untuk mengatur skema autentikasi. IIS 7.0 ke atas menggunakan bagian per skema autentikasi, dengan enabled="true|false" pada masing-masing. Pengaturan tambahan yang relevan hanya untuk beberapa skema autentikasi, hanya dapat diatur di bagian yang relevan (misalnya, nama pengguna dan kata sandi hanya dapat diatur untuk autentikasi anonim).
  • IIS 6.0 menggunakan jalur di dalam file Metabase untuk menentukan tingkat konfigurasi (layanan, direktori virtual, direktori fisik). Konfigurasi untuk seluruh server berada dalam satu file. IIS 7.0 ke atas menggunakan satu file secara default, tetapi pengguna dapat memanfaatkan file web.config terdistribusi di direktori konten, yang menentukan pengaturan konfigurasi untuk cakupannya.
  • IIS 6.0 menggunakan nama properti panjang dalam upaya untuk memiliki pengaturan konfigurasi yang menjelaskan sendiri. Ini mencoba meningkatkan keterbacaan file dan membantu pengguna memahami apa yang dilakukan properti. IIS 7.0 ke atas menggunakan nama pendek tetapi selalu dalam konteks bagian tertentu, atau bahkan sub-elemen dengan di bagian .
  • IIS 6.0 menggunakan multi-sz (elemen yang dibatasi koma dalam satu properti string), dan bendera, untuk menangani beberapa nilai elemen, seperti NTAuthenticationProviders. IIS 7.0 ke atas menggunakan koleksi, dengan sintaks add/remove/clear sederhana, persis seperti konfigurasi .NET framework. Ini memungkinkan tingkat hierarki yang lebih rendah untuk menambahkan (atau menghapus) hanya elemen yang mereka butuhkan, alih-alih menduplikasi seluruh data dengan (atau tanpa) elemen tersebut. Ini juga memberikan keterbacaan file yang lebih besar (yang diterjemahkan ke lebih sedikit kesalahan manusia ketika langsung mengeditnya).

Dalam file skema:

//
// Snippet from IIS 6.0 MBSchema.xml
//
<Property InternalName="AuthFlags" ID="6000" Type="DWORD" UserType="IIS_MD_UT_FILE" Attributes="INHERIT" >
    <Flag   InternalName="AuthAnonymous"   Value="1"   ID="6218"   />
    <Flag   InternalName="AuthBasic"             Value="2"   ID="6219"  />
    <Flag   InternalName="AuthNTLM"            Value="4"   ID="6220"  />
    <Flag   InternalName="AuthMD5"              Value="16"  ID="6221"  />
    <Flag   InternalName="AuthPassport"        Value="64"  ID="6299"  />
</Property>

//
// Snippet from IIS 7.0 IIS_Schema.xml
//
<sectionSchema name="system.webServer/security/authentication/basicAuthentication">
  <attribute name="enabled" type="bool" defaultValue="false" />
  <attribute name="realm" type="string" />
  <attribute name="defaultLogonDomain" type="string" />
  <attribute name="logonMethod" type="enum" defaultValue="ClearText">
    <enum name="Interactive" value="0" />
    <enum name="Batch" value="1" />
    <enum name="Network" value="2" />
    <enum name="ClearText" value="3" />
  </attribute>
</sectionSchema>

Kunci takeaways:

  • IIS 6.0 menggunakan ID (angka) untuk mengidentifikasi pengaturan. IIS 7.0 ke atas menggunakan string ramah untuk pengaturan nama.
  • IIS 6.0 menggunakan konsep non-intuitif seperti UserType dan terminologi seperti InternalName. IIS 7.0 ke atas menggunakan nama ramah yang masuk akal bagi pembaca manusia, dan tidak hanya aplikasi.

Hierarki File Konfigurasi

Status "master" untuk konfigurasi selalu merupakan file konfigurasi (tidak seperti di IIS 6.0, di mana itu adalah database konfigurasi dalam memori, yang dibersihkan ke disk secara berkala).

Pada tingkat root (atau global), ada dua file terpisah:

  • system32\inetsrv\config\applicationHost.config: Menyimpan default global untuk pengaturan server web (IIS).
  • \windows\microsoft.net\framework\v2.0.50727\config\machine.config: Menyimpan default global untuk pengaturan kerangka kerja .NET, termasuk beberapa yang ASP.NET (sisanya berada di web.config pada folder yang sama, yang kadang-kadang disebut root web.config)

Alasan ada dua file terpisah masih karena dua versi teknologi berbeda (jadwal-bijaksana dan produk-bijaksana). IIS adalah bagian dari Windows dan .NET framework dapat membuat versi secara independen, sebagai bagian dari rilis Visual Studio.

Di direktori konten web, mungkin ada file web.config opsional yang mengontrol perilaku untuk tingkat hierarki dan ke bawahnya. Mereka bisa lokal atau jarak jauh (jika direktori konten berada di berbagi UNC, misalnya). Mereka mungkin berisi IIS, ASP.NET atau pengaturan konfigurasi .NET framework lainnya yang dapat ditentukan pada tingkatnya. Secara default tidak ada file web.config.

Dalam hal hierarki pewarisan, file akar machine.config, lalu web.config pada direktori yang sama (disebut sebagai web.config root), lalu applicationHost.config, lalu file web.config opsional di sepanjang namespace layanan.

Konfigurasi mencakup file

Dalam beberapa kasus, berguna untuk memiliki file web.config menyertakan beberapa file .config lainnya. Ini dapat dilakukan dengan menggunakan atribut configSource. Saat ini terbatas untuk menunjuk ke jalur fisik relatif di subdirektori, karena alasan keamanan (yaitu file A hanya dapat menyertakan file B jika B berada dalam subdirektori fisik A). Berikut adalah contoh dasar yang menunjukkan cara menggunakan configSource:

<!-- in inetsrv\applicationHost.config -->
<configuration>
  <system.webServer>
  
    <!-- mimemaps moved by the customer to a different file -->
    <!-- so that this file is shorter and more readable -->
    <staticContent configSource="staticContent.config"/>
  
    <!-- the rest of system.webServer sections are here… -->
  </system.webServer>
</configuration>
  
<!-- in inetsrv\staticContent.config -->
<configuration>
  <system.webServer>
    <staticContent>
      <!-- all the mimemap definitions are here -->
      <mimeMap ….. />
      <mimeMap ….. />
      <mimeMap ….. />
    </staticContent>
  </system.webServer>
</configuration>

Dalam contoh ini, pelanggan ingin memindahkan konten bagian staticContent ke file terpisah, agar lebih pendek, lebih mudah dibaca, applicationHost.config.

Perhatikan bahwa ketika pengaturan konfigurasi berubah dalam file .config, server akan secara otomatis mengambil perubahan dan bertindak atasnya. Pelanggan tidak perlu khawatir tentang mendaur ulang aplikasi atau kumpulan aplikasi atau seluruh server (server itu sendiri dapat mendaur ulang kumpulan aplikasi, misalnya, tergantung pada pengaturan konfigurasi apa yang berubah).

Organisasi Pengaturan

Dalam file konfigurasi (yaitu untuk tingkat hierarki tertentu), pengaturan diatur secara terstruktur, dan bukan sebagai daftar datar. Unit dasar penyebaran, pendaftaran, dan ekstensibilitas adalah bagian konfigurasi. Bagian terkandung dalam grup bagian, yang pada gilirannya mungkin terkandung dalam grup bagian induk. Bagian itu sendiri tidak berlapis. Grup bagian adalah.

Berikut adalah contoh dari applicationHost.config:

<!-- section group for web server configuration -->
<system.webServer>
  
  <!-- section group for web server security configuration -->
  <security>
    <!-- section group for web server authentication configuration -->
    <authentication>
  
      <!-- three sections for authentication -->
  
      <basicAuthentcation ... />
      <windowsAutnentication ... />
      <anonymousAuthentication ... />
    </authentication>
  </security>
</system.webServer>

Pengaturan konfigurasi selalu termasuk dalam bagian tertentu.

Grup bagian hanya ada untuk penataan yang lebih baik; mereka tidak memiliki pengaturan langsung di dalamnya, hanya bagian.

Dalam bagian , strukturnya adalah sebagai berikut:

  • Elemen Konfigurasi: Berisi pengaturan konfigurasi dan kemungkinan elemen konfigurasi lainnya. Direpresentasikan sebagai elemen XML. Bagian juga merupakan elemen.
  • Pengumpulan konfigurasi: Kasus privat elemen konfigurasi, yang berisi daftar elemen konfigurasi, dalam bentuk add/remove/clear (yang disebut direktif koleksi). Direpresentasikan sebagai elemen XML dengan <tambahkan>, <hapus>, <hapus> sub-elemen.
  • Properti konfigurasi: ini adalah pengaturan konfigurasi [daun]. Direpresentasikan sebagai atribut XML.

Berikut adalah contoh dari applicationHost.config:

<!-- "windowsAuthentcation" is a section which is an element -->
<!-- "enabled" is a property -->
<windowsAuthentication enabled="true">
  
  <!-- "providers" is a collection which is an element -->
  <providers>
  
    <!-- the collection contains two elements -->
    <!-- "add" is the collection directive; "value" is the property -->
    <add value="Negotiate"/>
    <add value=""NTLM/>
  </providers>
</windowsAuthentication>

Secara default, applicationHost.config berisi dua grup bagian utama: system.applicationHost dan system.webServer. Ini juga berisi bagian yang disebut <configSections>, yang agak istimewa karena digunakan secara internal oleh sistem konfigurasi untuk mendaftarkan semua bagian lainnya.

Secara default, machine.config berisi beberapa grup bagian. Pengaturan ASP.NET berada di grup bagian system.web.

Tag Lokasi Vs. File Konfigurasi

Dalam banyak kasus, diinginkan untuk menghindari web.config file di direktori konten, tetapi masih memiliki konfigurasi per URL yang mengambil alih default global. Misalnya: administrator ingin menentukan bahwa situs tertentu harus menggunakan beberapa skema autentikasi, dan administrator situs (dan pengembang aplikasi di situs tersebut) tidak boleh menonaktifkannya.

Cara termampu untuk mencapainya adalah dengan menggunakan tag lokasi. Ini adalah mekanisme untuk menentukan konfigurasi untuk jalur tertentu, tanpa memiliki web.config di folder yang dipetakan ke jalur virtual.

Contoh ini memperlihatkan bagaimana tag lokasi digunakan dalam applicationHost.config:

<!-- the following will take effect on MyAdminSite -->
<location path="MyAdminSite">
  <system.webServer>
    <security>
      <authentication>
        <basicAuthentication enabled="false"/>
        <windowsAuthentication enabled="true"/>
        <anonymousAuthentication enabled="false"/>
      </authentication>
    </security>
  </system.webServer>
</location>

Tag lokasi dapat digunakan untuk menentukan konfigurasi untuk tingkat global (path="."), untuk situs, atau untuk jalur tertentu di dalam situs. Mungkin ada beberapa tag lokasi dalam file. Tag lokasi dapat berada di file .config apa pun, tidak hanya applicationHost.config atau machine.config.

Tag lokasi juga dapat digunakan untuk mengunci dan membuka kunci bagian. Detail selengkapnya tentang ini di lab penguncian konfigurasi.

Dalam beberapa kasus, tidak ada alternatif untuk menggunakan tag lokasi:

  • Dua atau beberapa jalur virtual dipetakan ke folder fisik yang sama. Jelas, jika dua jalur virtual memiliki konfigurasi yang berbeda, itu tidak dapat ditentukan dalam file web.config karena dibagikan.
  • Konfigurasi khusus file. Tidak ada file web.config untuk file; hanya untuk seluruh folder.

Ringkasan

Dokumen ini memberikan gambaran umum awal, tingkat tinggi dari sistem konfigurasi di IIS 7.0 ke atas. Ini menyoroti format skema pembersih; sifat terdistribusi dari sistem konfigurasi dan bagaimana hal itu memungkinkan delegasi pengaturan konfigurasi kepada pemilik situs atau pengembang aplikasi; organisasi pengaturan terstruktur dalam file konfigurasi; dan integrasi antara IIS dan sistem konfigurasi ASP.NET.

Untuk informasi selengkapnya, disarankan untuk meninjau dokumen konfigurasi lainnya, dan khususnya, dokumen Intrinsik Konfigurasi, yang masuk ke detail tingkat yang lebih rendah tentang sistem, termasuk desain dan arsitekturnya.