Bagikan melalui


Cara Menggunakan Penguncian di Konfigurasi IIS 7.0

oleh Saad Ladki

Abstrak

Dokumen ini menjelaskan cara mengunci dan membuka kunci konfigurasi di server. Anda akan mempelajari pengaturan apa yang dapat diambil alih file konfigurasi tingkat aplikasi dan cara menggunakan <location> elemen untuk mengunci seluruh bagian.

Anda akan bereksperimen dengan penguncian pengaturan konfigurasi yang lebih terperinci, dalam bagian, seperti:

  • Mengunci elemen dan atribut tertentu
  • Mengunci semuanya kecuali elemen atau atribut tertentu
  • Mengunci arahan koleksi tertentu seperti <add>, , <remove>dan <clear> direktif
  • Mengunci elemen tertentu dalam koleksi

Setelah membaca dokumen ini, Anda akan tahu cara mengelola berbagai fitur penguncian konfigurasi dengan langsung mengedit elemen XML dalam file konfigurasi (antarmuka terprogram untuk melakukan tugas-tugas ini mengikuti struktur XML dengan sangat dekat).

Dokumen ini berfokus sengaja hanya pada pengeditan elemen XML dalam file konfigurasi, alih-alih menunjukkan cara untuk menyelesaikan tugas yang sama menggunakan API administrasi, skrip, atau antarmuka pengguna (UI).

Pengantar

IIS 7.0 ke atas memungkinkan penguncian dan pembukaan kunci pengaturan konfigurasi di berbagai tingkat dan cakupan. Mengunci konfigurasi berarti tidak dapat ditimpa (atau diatur sama sekali) pada tingkat yang lebih rendah dalam hierarki. Membuka kunci konfigurasi hanya dapat dilakukan pada tingkat di mana ia dikunci. Ini berguna, misalnya, saat membuat konfigurasi yang berbeda untuk situs atau jalur yang berbeda, dan hanya beberapa situs dan jalur yang diizinkan untuk mengambil alihnya. Penguncian dapat dilakukan pada tingkat bagian atau untuk elemen, atribut, elemen koleksi, dan arahan pengumpulan tertentu dalam bagian.

Tugas 1: Mengunci Bagian Menggunakan <location> Tag

Dalam tugas ini, Anda mempelajari cara menggunakan <location> tag untuk mengunci (atau membuka kunci) seluruh bagian konfigurasi di tingkat global sehingga tidak dapat ditimpa pada tingkat aplikasi hierarki konfigurasi.

Catatan

Secara default, sebagian besar bagian IIS di applicationHost.config dikunci, dan tidak ada kerangka kerja .NET yang dikunci (termasuk bagian ASP.NET di <grup bagian system.web> di machine.config dan web.config root).

Menggunakan editor teks seperti Notepad, buka file applicationHost.config di lokasi berikut:

%windir%\system32\inetsrv\config\applicationHost.config

Tinjau bagian <configSections> di bagian paling atas file: ini memiliki metadata tentang bagian konfigurasi dalam file ini, seperti nama untuk bagian, berisi grup bagian, dan apakah mereka terkunci atau tidak.

Bagian terkunci ditentukan oleh atribut "overrideModeDefault", yaitu "Izinkan" atau "Tolak". Sangat sedikit bagian yang tidak dikunci secara default, seperti yang ditentukan oleh baris ini misalnya:

<section name="defaultDocument" overrideModeDefault="Allow" />

Di sini, kita berurusan dengan bagian .<windowsAuthentication> Ini dikunci secara default.

Untuk membuka kunci seluruh bagian untuk semua aplikasi di server, pindahkan kontennya dari lokasinya saat ini dalam file ke bagian bawah file dan masukkan ke dalam <location overrideMode="Allow"> elemen . Ingat juga untuk memiliki grup bagian yang mengelilinginya: <system.webServer, lalu><securitydan kemudian><authentication .> Hasil akhirnya akan terlihat seperti ini:

<location overrideMode="Allow">
  <system.webServer>
     <security>
        <authentication>
          <!-- the content of windowsAuthentication section is here -->
        </authentication>
     </security>
  </system.webServer>
</location>

Bagian ini sekarang tidak terkunci untuk semua aplikasi. Anda dapat menentukan jalur pada tag lokasi, sehingga bagian hanya akan dibuka kuncinya untuk jalur ini. Jalur default, jika tidak ditentukan (seperti pada langkah sebelumnya), adalah path="." (atau path="", hal yang sama), yang berarti "level saat ini". Dalam hal ini, karena ini applicationHost.config, tingkat saat ini berarti tingkat global. Anda juga dapat menggunakan tag lokasi di mana saja dalam hierarki namespace, misalnya dalam web.config di tingkat vdir, untuk mengunci konfigurasi dari titik ini ke bawah.

Berikut adalah contoh cara membuka kunci bagian ini hanya untuk situs "AdminSuperTrusted". Itu berarti bahwa web.config file di situs tersebut dapat mengambil alih pengaturan di bagian ini; tetapi, untuk semua situs lain di kotak, situs tersebut terkunci di tingkat global dan tidak dapat ditimpa.

Dalam contoh ini, Anda harus meninggalkan konten bagian di tempat aslinya di applicationHost.config, lalu menentukan bagian di tag lokasi dengan jalur tertentu:

<location path="AdminSuperTrustedSite" overrideMode="Allow">
  <system.webServer>
    <security>
      <authentication>
        <!-- note: this is different than previous example, in that  -->
        <!-- the content of the section is in the original place and -->
        <!-- was not moved here; in addition, the section is also    -->
        <!-- specified here, just by its name, so that it gets       -->
        <!-- unlocked only for the site specified in the location.   -->
        <windowsAuthentication/>
      </authentication>
    </security>
  </system.webServer>
</location>

Kembali ke contoh ketiga di atas, bagian tidak terkunci untuk semua aplikasi di semua situs (jalur lokasi="."). Periksa apakah grup bagian autentikasi utama <(yang di luar <location> elemen, di atas dalam file) tidak berisi <bagian windowsAuthenitcation>.> Bagian tidak dapat muncul dalam file yang sama baik di luar tag lokasi maupun di dalam <jalur lokasi="."> tag; ini dianggap sebagai konfigurasi yang tidak valid.

Untuk menguji apakah bagian terkunci atau tidak, buka http://localhost/app di browser.

Jika bagian dikunci, browser menampilkan kesalahan karena file web.config di tingkat aplikasi memiliki bagian <windowsAuthentication> di dalamnya. Ini berarti web.config mencoba mengambil alih <windowsAuthentication> tingkatnya. Namun, karena bagian tersebut sekarang dikunci di tingkat global, konfigurasi dalam file web.config tidak valid.

Ubah tag lokasi agar overrideMode="Deny". Ini mengunci bagian lagi. Bereksperimenlah dengan bagian lain, seperti bagian ASP.NET di machine.config atau web.config root. Cobalah untuk menguncinya di tingkat global, dan menggantinya di tingkat web.config.

Tugas 2: Mengunci Elemen dan Atribut Tertentu

Membangun tugas sebelumnya, temukan bagian di <windowsAuthentication> dalam <location> tag. Atur tag lokasi untuk membuka kunci bagian: overrideMode="Allow". Kami hanya tidak akan mengunci bagian tertentu dari bagian tersebut.

Atur atribut yang diaktifkan ke true, lalu kunci dengan mengatur lockAttributes="enabled".

Ini mencegah file konfigurasi tingkat aplikasi mengubah nilai atribut yang diaktifkan bagian<windowsAuthentication>.

Jika Anda ingin mengunci atribut lain, tambahkan atribut tersebut ke nilai lockAttributes yang dipisahkan oleh koma, seperti dalam contoh berikut:

lockAttributes="enabled,attribute1,attribute2"

Anda juga dapat mengunci semua atribut menggunakan "*", seperti dalam contoh ini:

lockAttributes="*"

Bagian sekarang akan terlihat seperti berikut ini:

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockAttributes="enabled">          
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

Dalam file web.config untuk aplikasi Anda, coba ambil alih pengaturan di bagian .<windowsAuthentication>

Di browser, minta halaman untuk memverifikasi bahwa Anda dapat mengambil alih semua pengaturan kecuali yang Anda kunci, dalam hal ini — atribut yang diaktifkan .

Catatan

Cukup tentukan atribut dalam file web.config menyebabkan kegagalan konfigurasi, bahkan jika atribut yang Anda tetapkan dalam file Web.config memiliki nilai yang sama seperti dalam file ApplicationHost.config. Mengatur atribut terkunci ke nilai apa pun dianggap sebagai upaya untuk mengambil alih atribut dan karenanya gagal. (Perhatikan juga bahwa atribut berbeda dari elemen — dalam tugas berikutnya Anda akan mengunci elemen.)

Hapus atribut lockAttributes .

Atur lockElements="providers" untuk mengunci <providers> elemen di dalam bagian .

Jika Anda memiliki elemen lain untuk dikunci, Anda dapat menambahkannya dipisahkan dengan koma, seperti ini:

lockElements="providers,element1,element2"

Bagian sekarang akan terlihat seperti berikut ini:

<location path="." overrideMode="Allow">   <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication enabled="true" lockElements="providers">
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</location>

Dalam file Web.config aplikasi, ambil <providers> alih elemen dengan mengaturnya atau dengan mencoba menambahkan, menghapus dari, atau menghapus koleksi.

Di browser, minta halaman dan perhatikan bahwa kesalahan ditampilkan. Dalam file web.config, ganti elemen atau atribut lain seperti atribut yang diaktifkan . Telusuri ke halaman dan perhatikan bahwa tidak ada kesalahan yang ditampilkan.

Hapus atribut lockElements .

Tugas 3: Mengunci Semuanya Kecuali Atribut Tertentu

Dalam tugas ini, Anda mempelajari cara mengunci semua elemen atau atribut di bagian kecuali elemen tertentu yang Anda tentukan. Ini berguna dalam kasus di mana Anda tidak yakin properti apa yang dimiliki atau akan dimiliki bagian di masa depan, dan Anda ingin mengunci semuanya kecuali properti yang Secara eksplisit Anda atur untuk dibuka kuncinya.

Membangun tugas sebelumnya, temukan bagian <windowsAuthentication> di tag lokasi.

Atur atribut lockAllElementsExcept atau lockAllAttributesExcept ke daftar elemen atau atribut yang dibatasi koma untuk dikunci. Misalnya, bagian mungkin terlihat seperti berikut ini:

<windowsAuthentication enabled="true" lockAllElementsExcept="providers">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

Atau seperti ini:

<windowsAuthentication enabled="true" lockAllAttributesExcept="enabled">
     <providers>
          <add value="Negotiate" />
          <add value="NTLM" />
     </providers>
</windowsAuthentication>

Di bagian khusus ini, saat ini tidak ada atribut atau elemen lain. Jika Anda ingin menguji efek pengaturan atribut lockAllElementsExcept atau lockAllAttributesExcept , tambahkan atribut yang sama ke bagian lain yang memiliki sekumpulan atribut yang lebih kaya.

Tugas 4: Mengunci Beberapa Arahan Koleksi

Dalam tugas ini, Anda mempelajari cara mengunci arahan <add> dan <remove> pada koleksi, sehingga pada tingkat aplikasi, elemen file konfigurasi dapat ditambahkan tetapi tidak dihapus.

Membangun tugas sebelumnya, temukan bagian <windowsAuthentication> di tag lokasi.

Atur atribut lockElements dalam <providers> koleksi untuk dihapus,hapus.

Setelah selesai, bagian terlihat seperti berikut ini:

<windowsAuthentication enabled="true" >
  <providers lockElements="remove,clear">
    <add value="Negotiate" />
    <add value="NTLM" />
  </providers>
</windowsAuthentication>

Dalam file web.config aplikasi, buat <remove> elemen yang menghapus elemen NTLM dari koleksi.

Setelah selesai, file web.config terlihat seperti berikut ini:

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

Di browser, minta http://localhost/app.

Tugas 5: Mengunci Elemen Tertentu dalam Koleksi

Dalam tugas ini, Anda mempelajari cara mengunci elemen koleksi tertentu. Pengembang masih dapat menambahkan elemen ke koleksi pada tingkat hierarki yang lebih rendah (aplikasi), dan mereka masih dapat menghapus elemen yang tidak terkunci dari koleksi. Namun, mereka tidak dapat menghapus elemen yang Anda kunci secara khusus. Koleksi tidak dapat dibersihkan, karena pembersihan berarti menghapus semua elemen dari koleksi.

Membangun tugas sebelumnya, temukan bagian <windowsAuthentication> di tag lokasi.

<providers> Dalam koleksi, dalam <add> elemen untuk penyedia NTLM, atur lockItem ke "true."

Setelah selesai, bagian terlihat seperti berikut ini:

<windowsAuthentication enabled="true" >
  <providers>
    <add value="Negotiate" />
    <add value="NTLM" lockItem="true" />
  </providers>
</windowsAuthentication>

Dalam file web.config aplikasi, buat <remove> elemen yang menghapus elemen NTLM dari koleksi.

Setelah selesai, file Web.config terlihat seperti berikut ini:

<configuration>
  <system.webServer>
    <security>
      <authentication>
        <windowsAuthentication>
          <providers>
            <remove value="NTLM" />
          </providers>
       </windowsAuthentication>
      </authentication>
    </security>
  </system.webServer>
</configuration>

Di browser, permintaan http://localhost/app -- permintaan gagal.

Ringkasan

Dalam dokumen ini, Anda mempelajari cara mengunci pengaturan konfigurasi. Anda dapat mengunci seluruh bagian, baik dengan menggunakan <location> elemen atau dengan mengatur atribut lockItem tag ke true. Penguncian dapat lebih fleksibel dan terperinci jika Anda menggunakan pengaturan lockAttributes, lockElements, lockAllAttributesExcept, lockAllElementsExcept, atau lockItem pada elemen koleksi, dan jika Anda menggunakan pengaturan lockElements pada koleksi untuk menentukan arahan koleksi tertentu (<add>, , <remove>atau <clear>). Penguncian dapat terjadi pada tingkat hierarki apa pun, tidak hanya di ApplicationHost.config. Penguncian berlaku dari tingkat ke bawah.