Apa peran yang dimainkan "App Pool Identity" untuk Application Pool?

16

Ketika berbicara tentang keamanan IIS 7.5, AFAIK:

App Pool Identity memutuskan siapa aplikasi web saya berjalan.

Metode Otentikasi memutuskan siapa klien diautentikasi.

Saya memiliki folder virtual yang dikonfigurasi seperti ini:

  • Saya menggunakan Otentikasi Anonim dengan harapan bahwa semua klien harus disahkan sebagai IUSR .
  • Saya memberi IUSR kendali penuh atas folder tersebut.
  • App Pool Identity saya ditetapkan sebagai akun XXX, yang tidak memiliki izin apa pun untuk folder tersebut. (Saya sengaja mengatur ini)

Tetapi ternyata saya tidak dapat menelusuri file di folder itu. Setelah saya memberi izin akun XXX untuk mengakses folder itu, segalanya berjalan dengan baik.

Jadi apa peran yang dimainkan App Pool Identity dalam otentikasi anonim? Benar-benar tidak terduga bahwa saya harus memberikan izin akun App Pool Identity untuk mengakses folder. Saya pikir Anonim Authentication akan cukup?

Terima kasih.

smwikipedia
sumber

Jawaban:

18

Banyak istilah kelebihan beban di sini, dan perubahan antara IIS 7 dan 7.5.

App Pool Identity vs App Pool Account

Mari kita mulai dengan identitas Application Pool (huruf kecil I, alias App Pool Account ):

Cara saya mengatakannya, Application Pool Account adalah akun yang digunakan untuk mem - boot App Pool, dan identitas yang diasumsikan oleh App Pool ketika tidak meniru orang lain.

Jadi, apa pun identitas yang Anda berikan pada App Pool, Anda harus dapat membaca file di folder konten : terutama {tetapi tidak terbatas pada} file web.config apa pun (yang merupakan bagian dari konfigurasi IIS, dan mengontrol apa yang App Pool akan melakukan).

Jika tidak dapat mengakses folder, itu akan menganggap mungkin ada file web.config yang penting (mengubah permainan) di sana, dan menampilkan kesalahan. Jadi Akun App Pool perlu membaca akses ke semua folder konten.

ApplicationPoolIdentity

Mengapa membedakan App Pool Account (identitas kumpulan aplikasi) dari App Pool Identity? Karena ApplicationPoolIdentity yang digunakan dengan huruf besar khusus adalah jenis akun baru - akun layanan terkelola - diperkenalkan dan dibuat default di IIS 7.5 / Windows 2008 R2, dan juga tersedia dari Windows 2008 SP2 (tetapi bukan default).

Lihat Application Pool Identities di IIS.Net

Saat Anda membuat situs web di bawah R2 menggunakan GUI:

  • App Pool akan dibuat untuk meng-host situs web itu, dan
  • tipe akun adalah ApplicationPoolIdentity, bukan Layanan Jaringan (default 2008), Layanan Lokal atau Sistem Lokal.

Dengan RTM 2008, akun App Pool default adalah Layanan Jaringan plus identitas / pemersatu pool aplikasi yang unik; tipe akun AppPoolIdentity R2 / SP2 yang baru adalah akun yang menyerupai Layanan-Jaringan (yaitu komputer saat menghubungkan off-box), tetapi mencegah peniruan App Pool lain dalam kotak yang sama.

Kembali ke pertanyaan awal:

  • Akun pool aplikasi mendefinisikan siapa aplikasi Anda berjalan seperti ketika itu tidak meniru orang lain

  • Metode otentikasi menjelaskan bagaimana Anda akan mengautentikasi klien (untuk menyamar sebagai mereka)

  • The Anonymous akun pengguna mendefinisikan siapa Anda akan menjalankan seperti ketika meniru pengguna untuk permintaan yang tidak dikonfirmasi - IUSR adalah pengguna tersebut.

Secara kebetulan, dengan IIS 7.5, Anda dapat mengatur akun pengguna Anonim menjadi Application Pool Identity (properti dari metode otentikasi Anonymous), yang mungkin membuatnya lebih mudah untuk mengisolasi dan mengamankan konten untuk situs web tertentu.

Tetapkan izin menggunakan IIS AppPool \ YourSiteName untuk format nama. (lihat juga posting ini )

TristanK
sumber
4

Anda melihat dua hal, yang biasanya membingungkan di ASP.NET:

  1. "identitas pengguna" - Otentikasi akun pengguna tidak ada hubungannya dengan akun atau identitas yang sebenarnya berjalan di bawah IIs dan ASP.NET. Otentikasi anonim memungkinkan setiap pengguna untuk mengakses konten publik apa pun tanpa memberikan nama pengguna dan tantangan kata sandi ke browser klien. Akun IUSR anonim yang mendapat otentikasi secara default di IIS hanya berlaku akses ke konten situs web publik. Itu tidak mempengaruhi proses atau sumber daya yang digunakan oleh layanan IIs atau ASP.NET yang mendasarinya.
  2. "identitas aplikasi" - Ini adalah akun "WindowsIdentity" yang sebenarnya di server yang benar-benar berjalan di belakang IIS dan ASP.NET, yang merupakan akun Application Pool Identity yang ditugaskan ke kumpulan oleh IIs dan diberikan kepada ASP.NET. Proses ASP.NET Anda berjalan di bawah akun Pool Application Identity ini (disebut akun virtual dalam IIs versi 7.5+) secara default.

Penjelasan: Pertama, "otentikasi" di ASP.NET hanyalah sebuah peristiwa yang biasanya diatur di web.config yang masuk dalam akun pengguna tertentu yang diteruskan sebagai token pengguna oleh IIs ke ASP.NET sebagai objek HttpContext biasa ... yaitu sesi atau konteks saat ini dari pengguna saat ini. Itu tidak benar-benar mengubah WindowsIdentity yang menjalankan proses ASP.NET, hanya melewati token id pengguna untuk itu. Menggunakan HttpContext, kode Anda dapat menggunakan id atau nama itu untuk menyimpan hak basis data ke berbagai bagian situs web Anda. Tapi itu tidak akan mempengaruhi akses file oleh ASP.NET karena tidak mempengaruhi atau mengubah identitas aplikasi "proses" akun yang menjalankan ASP.NET di bawah IIs.

Itu tidak terjadi sampai Anda melakukan "Peniruan" yang memberi tahu ASP.NET untuk menyamar sebagai tanda apa pun yang diteruskan oleh IIs dan untuk kemudian dijalankan di bawah id akun itu. Anda dapat mengatur peniruan identitas di web.config Anda. Ketika Anda mengaktifkan peniruan dalam ASP.NET maka WindowsIdentity tidak berubah pada proses pekerja untuk akun terotentikasi apa pun yang diteruskan ke ASP.NET dari IIS, dan Anda kemudian dapat mengakses file, tentu saja berdasarkan hak-hak apa yang Anda tetapkan pada akun pengguna itu. Penting untuk dicatat ketika itu terjadi sementara dan ASP.NET dapat kembali ke identitas proses default yang ada dalam versi IIs saat ini lagi akun Application Pool Identity yang ditugaskan ke App Pool tertentu.

Ketika IIs hanya menggunakan akun pengguna anonim biasa tanpa otentikasi eksplisit yang ditetapkan di ASP.NET, IIs memulai secara default akun Application Pool's Application Pool Identity yang ditetapkan oleh situs web dan meneruskannya ke ASP.NET dan proses pekerja menjalankannya. Akun identitas Pool Aplikasi itu memproses semua permintaan untuk IIS dan menjalankan ASP.NET untuk situs itu.

Ketika IIs mulai di bawah pengaturan ini dan diakses oleh pengguna, itu sebenarnya mengotentikasi di balik layar secara default akun IUSR anonim yang menentukan akses ke halaman web dan sumber daya dasar lainnya. Tetapi akun itu TIDAK diteruskan ke ASP.NET. Dan itu tidak mempengaruhi Aplikasi Pool Identity IIS berjalan dan yang berjalan di bawah ASP.NET.

Jika Anda menetapkan Meniru menjadi "true" di katakan web.config Anda, DAN Anda menggunakan akun IUSR anonim default di IIs untuk akses publik, DAN Anda mengatur true secara eksplisit properti anonymousAuthentication di web.config (alih-alih menggunakan Windows atau akun login lainnya), II akan membuang Application Pool Identity dan IIs dan ASP.NET sekarang akan menjalankan proses aplikasi mereka sebagai akun IUSR anonim yang diautentikasi dan ditiru.

Ketika Anda melakukannya, ASP.NET dan prosesnya sekarang akan berjalan di bawah akun IUSR .... yaitu proses aplikasi ASP.NET akan menjalankan akun WindowsIdentity sebagai akun IUSR. Anda sekarang dapat menerapkan akses baca / tulis ke akun IUSR anonim itu dan ke folder yang Anda inginkan untuk diakses oleh akun itu. (Catatan: pastikan untuk menambahkan akun proses default, akun Pool Aplikasi untuk pool, hak juga ke folder-folder itu. Itu sesuai dengan rekomendasi Microsoft)

Semoga berhasil!

Stokely
sumber
2

Ada dua konteks otentikasi yang dimainkan. Proses server web (yang menangani permintaan web Anda) berjalan sebagai pengguna App Pool Identity. Ketika permintaan masuk untuk host virtual Anda, kumpulan aplikasi menyamar sebagai pengguna yang tercantum dalam "Kredensial Otentikasi Anonim" situs tertentu - secara default IUSR.

Setiap skrip yang dijalankan dari dalam situs web Anda akan berjalan sebagai IUSR, tetapi pencatatan dan fungsi tertentu lainnya akan berjalan sebagai App Pool User (secara default Layanan Jaringan - meskipun ini telah diubah baru-baru ini untuk menggunakan pengguna pool app virtual khusus). App Pool Identity (Layanan Jaringan) harus dapat membuat daftar file di direktori Anda karena pemeriksaan tertentu dilakukan di tumpukan permintaan sebelum kontrol diserahkan ke skrip Anda.

Merupakan praktik yang baik untuk menjalankan satu situs per kumpulan, dan mengatur App Pool Identity untuk dijalankan sebagai pengguna yang sama dengan pengguna Anonim situs web Anda. Dimungkinkan untuk keluar dari konteks Pengguna Anonim (IUSR) dan meningkatkan hak istimewa ke orang-orang dari App Pool Identity itu sendiri.

Steve Mayne
sumber