Memahami Delegasi Konfigurasi IIS 7.0

oleh Saad Ladki

Pengantar

IIS memperkenalkan sistem konfigurasi berbasis file baru untuk rilis produk ketujuhnya. Sistem baru ini menekankan sistem berbasis data yang cocok untuk seluruh platform web di mana teknologi seperti ASP.NET, Indigo dan bahkan komponen pihak ketiga dapat menggunakan dan memperluas penyimpanan konfigurasi ini untuk menampung situs atau properti aplikasi apa pun.

Sistem didasarkan pada file XML yang ditentukan dalam format sederhana dan jelas dengan sintaks yang mirip dengan file ASP.NET web.config. File konfigurasi ini menyimpan pengaturan dalam pengelompokan logis dan setiap perubahan pada file segera tercermin di situs atau aplikasi yang propertinya sedang dimodifikasi.

Sistem baru ini juga memberikan pengalaman administrasi yang didelegasikan di mana: administrator dapat mengizinkan pemilik situs dan aplikasi untuk memodifikasi pengaturan tertentu; dan, dampak perubahan ini terbatas pada situs atau aplikasi tertentu yang dimaksud. Model ini memperkenalkan konsep aplikasi mandiri di mana pengaturan konten dan konfigurasi ditempatkan di direktori situs atau aplikasi dan dapat disebarkan dari satu komputer ke komputer lain.

File Konfigurasi dan Skema Konfigurasi

IIS 7.0 ke atas memiliki file konfigurasi pusat bernama applicationHost.config yang terletak di %WINDIR%\System32\InetSrv\Config\. File ini menggantikan file metabase.xml yang digunakan IIS 6.0 untuk penyimpanan konfigurasinya. Sistem konfigurasi baru ini sangat sederhana, berbasis file, dan namun sangat kuat. Tidak ada layanan konfigurasi, karena IISADMIN tidak diperlukan. Setiap proses pekerja memiliki instans komponen pembaca konfigurasi dan mengambil konfigurasi dari file secara langsung.

Selain itu, tidak ada representasi konfigurasi dalam memori. Setelah perubahan dikeluarkan pada file, perubahan segera diambil oleh proses pekerja dan tercermin pada situs, aplikasi, atau direktori virtual yang diberikan.

File applicationHost.config menampung pengaturan global untuk berbagai fitur dan komponen IIS dan teknologi web lainnya. Properti apa pun yang diatur dalam file ini akan berlaku untuk semua situs, aplikasi, dan direktori virtual di komputer.

Pembaca konfigurasi yang digunakan IIS memahami format, sintaksis, dan penamaan yang benar dari setiap bagian konfigurasi, elemen, dan atribut karena didefinisikan dalam file skema. Skema untuk konfigurasi ditentukan dalam file yang terletak di %WINDIR%\System32\InetSrv\Config\Schema\ direktori. Setelah membuat instans sistem konfigurasi, proses pekerja membaca skema ke memori dan ini membantu sistem memahami properti yang tersedia untuk diatur dan formatnya. Minimal, fileIIS_schema.xml, ASPNET_schema.xml, dan FX_schema.xml terletak di direktori ini dan menentukan struktur konfigurasi untuk bagian yang masing-masing berlaku untuk fitur IIS, ASP.NET, dan .NET Framework.

Skema mendefinisikan beberapa aspek konfigurasi dan bagiannya, seperti penamaan bagian dan properti, jenis yang diharapkan untuk nilai, rentang nilai-nilai ini atau jika salah satunya unik atau diperlukan. Selain itu, ini mendefinisikan nilai default yang akan diambil atribut tertentu. Dalam kasus tertentu di mana properti tidak ditentukan dalam applicationHost.config, nilainya diambil dari pengaturan default yang dinyatakan dalam file skema.

Selain file pusat ini, applicationHost.config, beberapa file web.config dapat muncul di tingkat hierarki URL apa pun. File-file ini dapat muncul di situs, aplikasi, direktori virtual atau bahkan tingkat jalur fisik. File-file ini menentukan properti yang nilainya menggantikan pengaturan global yang ditentukan dalam applicationHost.config. Namun, perubahan ini hanya berlaku pada cakupan tempat file muncul, yaitu untuk situs, aplikasi, direktori virtual, atau jalur fisik yang diberikan ke tempat file web.config berada.

Hierarki Konfigurasi dan Konfigurasi Efektif

Selain applicationHost.config, IIS menggunakan ASP.NET, yang bergantung pada filemachine.config dan web.configroot . File machine.config menentukan properti yang diperlukan untuk semua fitur Framework. File web.config root menentukan pengaturan global untuk properti yang ditentukan untuk semua aplikasi web ASP.NET. Kedua file ini dianalogikan dengan applicationHost.config IIS. Tiga file ada karena versi .NET Framework dan IIS secara terpisah. Mungkin ada beberapa versi Kerangka Kerja yang diinstal dalam sistem Windows Server tertentu yang memiliki satu versi IIS.

Oleh karena itu, hierarki konfigurasi ditentukan dan dihitung untuk pengaturan konfigurasi sistem. Hierarki dimulai pada machine.config, lalu maju ke file web.config akar, diikuti oleh applicationHost.config. Sejak saat itu, file web.config opsional apa pun yang terletak di situs, tingkat direktori aplikasi atau virtual ditambahkan dan diterapkan ke hierarki. Pada akhirnya, properti mewarisi dari file induk ke anak dari machine.config ke file web.config terakhir (jika ada) dan konfigurasi efektif dihitung untuk jalur tertentu.

Perilaku pewarisan dilakukan secara default. Pengaturan apa pun pada tingkat yang lebih rendah dalam hierarki akan menggantikan pengaturan induk yang ditentukan dalam file di atas tingkat saat ini. Namun, melangkah lebih jauh ke hierarki, cakupan konfigurasi lebih terbatas. Jika pengaturan file machine.config, web.config root, dan applicationHost.config berlaku untuk semua yang ada di sistem, pengaturan file web.config opsional hanya berlaku untuk lokasi saat ini dan di bawahnya (baik itu situs, aplikasi, atau direktori virtual).

Bagian Konfigurasi

Dalam file konfigurasi, ada kemungkinan pengaturan yang dapat dibaca dan diatur. Pengaturan dikelompokkan secara terstruktur. Beberapa pengaturan yang serupa atau berlaku untuk fitur tertentu (yaitu ASP, autentikasi, ISAPI, dll.) dikelompokkan bersama dalam blok unit logis yang disebut bagian konfigurasi. Setiap bagian konfigurasi dapat mencakup bagian konfigurasi lain di dalamnya, tetapi paling umum menentukan elemen, koleksi, atau atribut.

Elemen konfigurasi adalah elemen XML yang menentukan beberapa atribut konfigurasi. Koleksi konfigurasi adalah kasus khusus dari elemen konfigurasi yang berisi daftar elemen yang ditentukan dengan arahan konfigurasi add/remove/clear. Terakhir, atribut konfigurasi adalah pengaturan konfigurasi daun yang mewakili atribut XML.

Cuplikan berikut menunjukkan pengaturan untuk bagian <defaultDocument> . Kata yang diaktifkan adalah atribut di mana kata file adalah elemen yang menyertakan daftar elemen lain yang ditentukan oleh direktif penambahan dan serangkaian atribut.

<defaultDocument enabled="true"> 
    <files> 
        <add value="Default.htm" /> 
        <add value="Default.asp" /> 
        <add value="index.htm" /> 
        <add value="index.html" /> 
        <add value="iisstart.htm" /> 
        <add value="default.aspx" /> 
    </files> 
</defaultDocument>

Bagian konfigurasi ini memiliki skema terkait. Cuplikan berikut menunjukkan skema untuk bagian <defaultDocument> dalam file IIS_schema.xml. Skema menentukan nama bagian dan namespace layanan yang muncul di (dalam hal ini, system.webServer). Selain itu, skema menjelaskan atribut dan elemen dan untuk setiap nama, jenis, nilai default, dan data menarik lainnya.

<sectionSchema name="system.webServer/defaultDocument"> 
    <attribute name="enabled" type="bool" defaultValue="true" /> 
    <element name="files"> 
      <collection addElement="add" clearElement="clear" removeElement="remove" mergeAppend="false"> 
        <attribute name="value" type="string" isUniqueKey="true"/> 
      </collection> 
    </element> 
</sectionSchema>

Bagian Khusus: <configSections>

Bagian <configSections> konfigurasi adalah bagian khusus yang ditentukan dalam applicationHost.config. Ini digunakan sebagai titik registri untuk bagian konfigurasi server IIS. Bagian ini adalah tempat bagian konfigurasi saat ini yang tersedia dalam sistem terdaftar. Dalam kasus tertentu bahwa sistem konfigurasi diperluas dan bagian kustom ditambahkan ke server, itu harus didaftarkan dengan menambahkan entri elemen ke bagian ini.

Cuplikan berikut menunjukkan <configSections> entri untuk bagian <defaultDocument> . Entri lain telah dihilangkan demi kejelasan. Bagian menarik dari <configSections> adalah entri grup bagian yang menentukan namespace setiap bagian--dalam hal ini system.webServer dan nilai atribut overrideModeDefault, yang untuk bagian ini adalah "Izinkan". Karena allowDefinition tidak dideklarasikan, itu diambil dari skema dan nilai defaultnya adalah "Di mana-mana".

<configSections> 
    <sectionGroup name="system.webServer"> 
        <section name="defaultDocument" overrideModeDefault="Allow" />
    </sectionGroup>
</configSections>

Selain menentukan bagian dan grup bagiannya, ada dua atribut utama yang ditentukan: overrideModeDefault dan allowDefinition.

Atribut overrideModeDefault adalah atribut opsional yang menentukan status terkunci dari bagian. Nilai yang tersedia adalah Izinkan atau Tolak. Nilai defaultnya adalah "Izinkan". Semua bagian IIS yang terkait dengan performa, keamanan, atau aspek penting server dikunci dengan atribut ini diatur ke "Tolak". Jika atribut overrideModeDefault diatur ke "Tolak", maka file konfigurasi apa pun pada tingkat yang lebih rendah (yaitu web.config file) yang menetapkan nilai untuk properti untuk bagian konfigurasi tertentu tidak dapat berlaku dan mengambil alih nilai global. Ini menimbulkan pelanggaran kunci dan terjadi kesalahan.

Atribut allowDefinition adalah atribut opsional lain yang menentukan tingkat hierarki tempat bagian dapat ditentukan dan properti dapat diatur. Jika nilainya adalah MachineOnly, maka bagian hanya dapat diatur dalam applicationHost.config atau machine.config. Jika nilainya adalah MachineToRootWeb, maka bagian dapat diatur baik dalam file MachineOnly atau juga di web.config root. Jika nilainya adalah MachineToApplication, maka bagian dapat diatur di semua tiga file sebelumnya atau juga dalam file web.config di folder akar aplikasi. Dan terakhir, jika nilainya adalah Everywhere (yang merupakan default) itu dapat diatur dalam file konfigurasi apa pun, baik yang memengaruhi konfigurasi secara global atau dalam file web.config yang berlaku untuk situs, aplikasi, atau direktori virtual tertentu.

Konsep Lokasi

Pengaturan apa pun yang ditentukan dalam file hierarki konfigurasi tertentu berlaku untuk tingkat tersebut dan di bawah ini dengan kemungkinan ditimpa oleh file anak. Namun, ada opsi untuk menentukan dan menerapkan pengaturan konfigurasi ke jalur tertentu di bawah file konfigurasi saat ini dengan menggunakan tag lokasi dengan atribut jalur. Jika file konfigurasi applicationHost.config, tag lokasi dapat menyertakan jalur mulai dari semua situs, aplikasi, dan direktori virtual dalam sistem ke situs, aplikasi, direktori virtual, atau file tertentu. Tag lokasi juga dapat ditentukan dalam file web.config dan dapat menyertakan jalur relatif untuk jalur di bawah situs, aplikasi, atau direktori virtual saat ini.

Cuplikan berikut menunjukkan cara menentukan properti konfigurasi yang hanya berlaku untuk Situs Pengembang. Ini juga dapat dicapai melalui file web.config dalam konten situs. Konfigurasi efektif untuk Situs Pengembang akan menjadi daftar entri untuk kumpulan file di applicationHost.config ditambah jalur lokasi dan file web.config untuk situs.

<location path="Developer Site" overrideMode="Allow"> 
    <defaultDocument enabled="true"> 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Jika tidak ada jalur yang dideklarasikan, yang setara dengan menentukan titik (.), maka jalur dipahami dari tingkat ini dan di bawah ini ke semua jalur anak. Melakukan ini di applicationHost.config juga menentukan konfigurasi untuk tingkat global.

Atribut yang dapat ditentukan dalam tag lokasi adalah overrideMode. Seperti overrideModeDefault, ini menentukan apakah bagian konfigurasi yang diberikan direferensikan dan properti yang diatur dalam tag lokasi saat ini dapat diedit dan ditimpa pada tingkat hierarki yang lebih rendah.

Mengunci dan Membuka Kunci Bagian

Konsep awal mengunci bagian melalui tag overrideModeDefault di <configSections> bagian dapat diambil dan diperluas agar lebih halus. Dengan mengizinkan bagian ditimpa pada <configSections> tingkat, bagian dibuka dan nilainya dapat ditimpa oleh siapa pun dalam sistem melalui file web.config di tingkat namespace URL apa pun. Namun, ini dapat menimbulkan risiko keamanan yang serius dan dapat menyebabkan efek negatif pada ketersediaan atau performa sistem. Melalui tag lokasi, seseorang dapat menggunakan atribut overrideMode dan menentukan status penguncian bagian dan membatasinya untuk jalur tertentu.

Cuplikan berikut menunjukkan cara membuka kunci bagian <windowsAuthentication> untuk semua situs, aplikasi, dan direktori virtual dalam sistem. Ini dilakukan dengan mengatur "Izinkan" di atribut overrideModeDefault. Kerugian dari pendekatan ini adalah bahwa pendekatan ini membuka bagian untuk semua orang dan siapa pun dapat mengambil alih pengaturan di tingkat situs atau aplikasi mereka melalui file web.config.

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

Cuplikan berikut menunjukkan cara mencapai hal yang sama, membuka kunci <windowsAuthentication> bagian, tetapi hanya untuk AdministratorSitus sehingga properti untuk bagian tersebut dapat dimodifikasi melalui file web.config di tingkat Situs Administrator situs. Situs lain dalam sistem memiliki perilaku default dari bagian terkunci <windowsAuthentication> . Ini dicapai melalui atribut overrideMode.

<location path="AdministratorSite" overrideMode="Allow"> 
   <security> 
        <authentication> 
            <windowsAuthentication enabled="false"> 
                <providers> 
                    <add value="Negotiate" /> 
                    <add value="NTLM" /> 
                </providers> 
            </windowsAuthentication> 
        </authentication> 
   </security> 
</location> 
 
The location tag path can be specified here a site, application or even a virtual directory to which the administrator wants to unlock configuration and/or apply configuration at that level.

Perilaku yang berlawanan dapat dicapai, yaitu mengunci bagian untuk situs tertentu sedangkan sisa sistem dapat mengeditnya. Misalnya, <defaultDocument> adalah bagian yang memiliki atribut overrideModeDefault yang diatur ke "Izinkan" di bagian , <configSections> tetapi melalui tag lokasi, kita dapat mengunci bagian ini untuk Situs Dasar. Cuplikan berikut menunjukkan cara menyelesaikan ini sambil juga mengatur sehingga satu-satunya nilai yang diterima oleh sistem sebagai halaman default untuk ditampilkan server saat halaman beranda berjudul basic.htm. Direktif yang jelas nulls setiap nilai yang diwariskan dari tingkat di atas dalam hierarki konfigurasi, yang dalam hal ini adalah daftar global file dari applicationHost.config.

<location path="Basic Site" overrideMode="Deny"> 
    <defaultDocument enabled="true"> 
        <files> 
       </clear> 
            <add value="basic.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Penguncian Granular

Membuka bagian melalui tag lokasi adalah cara efektif untuk membuka kunci bagian dan semua propertinya untuk pemilik situs atau aplikasi jalur yang ditentukan. Ini berlaku pendekatan semua atau tidak sama sekali pada membiarkan pemilik situs dan aplikasi memiliki akses tak terbatas ke bagian. Namun, terkadang administrator menginginkan kontrol khusus atas properti tertentu di bagian dan menginginkan kontrol atas nilai tertentu. Yang lain dapat didelegasikan. Di sinilah penguncian granular masuk.

Penguncian terperinci adalah pengelompokan atribut tertentu yang dapat diatur pada elemen atau atribut lainnya. Penguncian terperinci dapat mendeklarasikan apakah jalur di bawah jalur saat ini dapat memodifikasi nilai konfigurasi. Nilai dapat dibaca, tetapi jika kunci diatur, nilai tidak dapat diedit atau bahkan dinyatakan. Jangan mengedit nilai yang kuncinya diatur, karena ini akan mengakibatkan kesalahan pelanggaran penguncian konfigurasi.

Atribut pertama dalam pengelompokan penguncian terperinci adalah lockAttributes. LockAttributes mendefinisikan daftar atribut yang dipisahkan koma yang dikunci untuk jalur di bawah tingkat konfigurasi saat ini. Ini juga menerima tanda bintang (*) sebagai nilainya, yang berarti bahwa semua atribut dikunci. Pada titik ini, bagian konfigurasi dapat dibaca di jalur tingkat anak dan bahkan atribut terkunci, tetapi mengedit yang dilindungi menghasilkan kesalahan.

Cuplikan berikut menunjukkan cara mengunci status yang diaktifkan dari <bagian defaultDocument> untuk Situs Pengembang. Jika pemilik Situs Pengembang menonaktifkan fitur dokumen default atau bahkan menyatakan properti dengan nilai yang sama dengan apa yang dinyatakan dalam tag lokasi, pelanggaran kunci terjadi.

<location path="Developer Site" > 
    <defaultDocument enabled="true" lockAttributes="enabled" /> 
</location>

Atribut kedua dalam pengelompokan penguncian terperinci adalah lockElements. LockElements mendefinisikan daftar elemen yang dipisahkan koma yang dikunci untuk jalur di bawah tingkat konfigurasi saat ini. Seperti lockAttributes, Ini juga menerima tanda bintang (*) sebagai nilainya, yang berarti bahwa semua elemen dikunci. Ini sangat berguna untuk bagian konfigurasi yang memiliki beberapa elemen atau koleksi dan perlu dilindungi untuk jalur tingkat anak. Sekali lagi, mengedit salah satu nilai terkunci menghasilkan kesalahan.

Cuplikan berikut menunjukkan cara mengunci kumpulan file untuk Situs Pengembang. Ini menyerahkannya kepada pemilik situs untuk memutuskan apakah fitur dokumen default diaktifkan atau tidak; tetapi, jika diaktifkan, ia tidak dapat mengubah nilai global dan mewarisi apa yang dinyatakan administrator komputer dalam applicationHost.config.

<location path="Developer Site"> 
    <defaultDocument enabled="true" lockElements="files" > 
        <files> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location>

Contoh lockElement juga berguna dalam koleksi untuk mengunci arahan koleksi tersebut. Direktif adalah kata-kata kunci seperti menambahkan, menghapus, menghapus koleksi. Dengan mengunci arahan, administrator dapat menyempurnakan apakah daftar koleksi tersedia untuk menambahkan atau menghapus elemen tertentu atau semua.

Cuplikan berikut menunjukkan cara mengunci penghapusan dan penghapusan entri saat ini dalam kumpulan file. Pemilik situs dapat menambahkan entri baru ke kumpulan file jika diperlukan. Jika pemilik situs menentukan tag yang jelas atau mencoba menghapus entri, pelanggaran kunci terjadi.

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files lockElements="clear,remove"> 
            <add value="Developer.htm" /> 
        </files> 
    </defaultDocument> 
</location> 
 
Besides lockAttribute and lockElement, there are negative counterparts: lockAllAttributesExcept, and lockAllElementsExcept. These attributes achieve  the inverse action of the previous ones in which the comma-separated list declares the attributes and elements to be unlocked while the rest are not  available to be edited in child paths.

Ada juga atribut lockItem . Ini mengunci atribut dan bekerja di tingkat atribut XML. Cuplikan berikut menunjukkan bagaimana administrator situs dapat melakukan apa pun yang ingin dilakukannya, seperti menambahkan, atau menghapus entri dalam koleksi, kecuali mengubah entri basic.htm dalam kumpulan file.

<location path="Developer Site"> 
    <defaultDocument enabled="true" > 
        <files> 
            <add value="basic.htm" lockItem="true"/> 
        </files> 
    </defaultDocument> 
</location>

Ringkasan

Dokumen ini menguraikan gambaran umum dasar tentang sistem konfigurasi, file, skema, dan kemampuan delegasinya. Ini juga membahas hierarki konfigurasi dan konfigurasi yang efektif. Artikel ini juga menyajikan pengenalan bagian konfigurasi dan struktur elemen dan atributnya. Ini mencontohkan konsep lokasi, penguncian, dan penguncian terperinci.

Secara keseluruhan, IIS memperkenalkan dan sistem konfigurasi berbasis file baru dengan kemampuan untuk memiliki semua konfigurasi dalam file konfigurasi pusat atau didistribusikan melalui file web.config di mana administrator situs dan aplikasi dapat memodifikasi properti yang berlaku untuk aplikasi dan konten mereka. Dengan model konfigurasi terdistribusi konsep aplikasi mandiri di mana pengaturan konten dan konfigurasi ditempatkan di direktori situs atau aplikasi dan dapat disebarkanx-copy dari satu komputer ke komputer lainnya diaktifkan.