1. 程式人生 > >深入理解IIS執行時的身份

深入理解IIS執行時的身份

深入理解IIS 5.0執行時的身份

Article last modified on 2002-6-27<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

----------------------------------------------------------------

The information in this article applies to:

- Microsoft Windows 2000 Advanced Server

- Microsoft Windows 2000 Server

- Microsoft Windows 2000 Professional

- Microsoft IIS 5.0

----------------------------------------------------------------

概要

為了更好的說明IIS 5.0執行時的身份標識,我們在IIS中新建一個虛擬目錄Token,來舉例說明。

IIS 5.0中,Medium(Pooled)是主頁目錄和每一個新的IIS應用的應用程式保護(Application Protection)的預設配置。

在這種情況下,所有的ASP指令碼的處理執行緒都是在IIS Out-Of-Process Pooled Application

這個COM+應用的程序下執行的!

預設情況下,InetInfo.EXE的執行身份是NT AUTHORITY/SYSTEM,而IIS Out-Of-Process Pooled Application應用的執行身份是IWAM_MachineName

由於預設情況下,匿名訪問是優先的,而它所使用的賬號一般預設設定為IUSER_MachineName。所以ASP執行緒的執行身份就是IUSER_MachineName

不同的配置,不同的執行身份

下面我們做四種不同的IIS配置,來看一下執行身份是怎麼變化的。配置A其實就是IIS 5.0的預設情況。

配置對比如下:

區別

配置A

(預設配置)

配置B

配置C

配置D

Token

虛擬目錄的應用程式保護

(共用的)

Medium(Pooled)

(IIS程序)

Low(IIS Process)

匿名訪問的賬號

IUSR_MYSERVER

一個域使用者

TomoSoft/TokenTest

IUSR_MYSERVER

IUSR_MYSERVER

COM+應用

“IIS Out-Of-Process Pooled Applications”的標識

IWAM_MYSERVER

一個域使用者

TomoSoft/TokenTest

一個域使用者

TomoSoft/TokenTest

一個域使用者

TomoSoft/TokenTest

ASP頁面中所呼叫的元件所在的COM+應用

其他獨立的應用

“IIS Out-Of-Process Pooled Applications”

“IIS Out-Of-Process Pooled Applications”

“IIS Out-Of-Process Pooled Applications”

下圖給出配置A情況的IIS 執行圖:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

配置A的執行情況 

1 配置A的執行身份

可以看出,配置A的情況下,將會有三個以上的程序互動資料,所以在程序之間會有大量的開銷。

但是優點就是,安全。COM+應用、IIS Out-Of-Process Pooled Application應用、InetInfo.EXE三者是相互隔離的,一方崩潰不會波及其餘。

配置B的執行圖:

配置B的執行情況                2 配置B的執行身份

可以看出,配置B的執行,ASP頁面呼叫的COM+元件由於被放置在IIS Out-of-Process Pooled Application這個IIS應用池中,所以這將會大大減少程序間呼叫COM的開銷。

由於ASP處理執行緒屬於STA,而被呼叫的COM+元件也屬於STA,所以COM+元件也在ASP處理執行緒內,所以COM+元件內部執行時的Thread Token是這個ASP處理執行緒的身份Tomosoft/TokenTest,它的Process Token則是IIS應用池的身份Tomosoft/TokenTest

配置C的情況和配置B大體是一樣的。唯一的區別就是COM+元件的Thread TokenIUSER_MachineName,這是和匿名訪問的賬號相一致的

下圖給出配置D的執行圖:

配置D的執行情況 

3 配置D的執行身份

可以看出,ASP處理執行緒在InetInfo.EXE程序中,而且ASP處理執行緒和InetInfo程序的執行身份還是不一樣的!

COM+元件內部執行時的沒有Thread Token,它的Process TokenIIS應用池的身份Tomosoft/TokenTest!

更多資訊

ASP頁面中記錄當前的Token值的測試

Token目錄下新建一個TokenTest.asp,程式碼如下:

<%

On Error Resume Next

Dim TokenDump

這是一個記錄當前執行緒和程序身份的元件

Set TokenDump = Server.Createobject("Tokdumpsrv.TokDump")

Response.write TokenDump.TokenDump(&H1)

%>

IIS Out-Of-Process Pooled Application的標識保持為TomoSoft/TokenTest不變。

只是更改應用程式保護和匿名訪問賬號。

測試4種情況,列表如下:

序號

設定情況

ASP執行的

Thread Token

ASP執行的

Process Token

應用程式保護

匿名訪問賬號

1

TomoSoft/

TokenTest

TomoSoft/TokenTest

Token Type:

Impersonation
Impersonation Level:

Delegation

TomoSoft/TokenTest

Token Type:

Primary
Impersonation Level:

Delegation

2

IUSER_MachineName

MySERVER/

IUSR_MYSERVER

Token Type:

Impersonation
Impersonation Level:

Impersonation

同上

3

TomoSoft/

TokenTest

TomoSoft/TokenTest

NT AUTHORITY/

SYSTEM

4

IUSER_MachineName

MySERVER/

IUSR_MYSERVER

NT AUTHORITY/

SYSTEM

在應用程式保護為中的情況下,可以觀察到,ASP處理執行緒的Thread Token是和該虛擬目錄的匿名訪問賬號一致的,而Process Token是和IIS Out-of-Process Pooled Application應用的標識一致的。

這就符合圖1和圖2的說法了。

在應用程式保護為的情況下,可以觀察到,ASP處理執行緒的Thread Token是和該虛擬目錄的匿名訪問賬號一致的,而Process Token就是InetInfo.EXE的身份SYSTEM賬號。

這就是圖3的說法了。

這種測試在三臺不同伺服器上得到了驗證。

Written by [email protected]



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12679


相關推薦

深入理解IIS執行身份

深入理解IIS 5.0執行時的身份Article last modified on 2002-6-27<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />----------------------

深入理解JVM-執行資料區域

JVM執行java程式是會把它管理的記憶體劃分為若干個不同的資料區域,如圖所示   程式計數器 1.是一塊較小的記憶體空間,可以看做是當前執行緒所執行的位元組碼的行號指示器; 2.JVM的多執行緒是通過執行緒輪流切換並分配處理器執行時間的方式來實現的,在任何一個確定的時刻,一個處理器(對

JavaScript 函數聲明,函數表達式,匿名函數的區別,深入理解立即執行函數(function(){…})()

之前 事件處理程序 logs cnblogs 函數調用 引擎 花括號 ava img function fnName(){xxxx}; // 函數聲明:使用function關鍵字聲明一個函數,在指定一個函數名。 //例如:(正常,因為 提升 了函數聲明,函

深入理解執行緒(四)—— Moniter的實現原理

在深入理解多執行緒(一)——Synchronized的實現原理中介紹過關於Synchronize的實現原理,無論是同步方法還是同步程式碼塊,無論是ACC_SYNCHRONIZED還是monitorenter、monitorexit都是基於Monitor實現的,那麼這篇來介紹下什麼是Monitor。

Nodejs探祕:深入理解執行緒實現高併發原理

前言 從Node.js進入我們的視野時,我們所知道的它就由這些關鍵字組成 事件驅動、非阻塞I/O、高效、輕量,它在官網中也是這麼描述自己的: Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript e

深入理解Java執行緒池(1):ThreadPoolExecutor整體流程梳理,建立worker相關方法

執行緒池作為一個執行緒的容器,主要的作用就是防止頻繁建立執行緒,節省時間資源和cpu資源。雖然一定程度上佔用了記憶體,但實際情況下利遠遠大於弊。 構造方法 public ThreadPoolExecutor( int corePoolSize, //核

深入理解執行緒(一)——Synchronized的實現原理

synchronized,是Java中用於解決併發情況下資料同步訪問的一個很重要的關鍵字。當我們想要保證一個共享資源在同一時間只會被一個執行緒訪問到時,我們可以在程式碼中使用synchronized關鍵字對類或者物件加鎖。那麼,本文來介紹一下synchronized關鍵字的實

深入理解執行緒(五)—— Java虛擬機器的鎖優化技術

本文是《深入理解多執行緒》的第五篇文章,前面幾篇文章中我們從synchronized的實現原理開始,一直介紹到了Monitor的實現原理。 前情提要 通過前面幾篇文章,我們已經知道: 1、同步方法通過ACC_SYNCHRONIZED關鍵字隱式的對方法進行加鎖。當執行緒要

深入理解Java執行緒池原理分析與使用(尤其當執行緒佇列滿了之後事項)

在這裡借花獻佛了,那別人的東西學一學了。在我們的開發中“池”的概念並不罕見,有資料庫連線池、執行緒池、物件池、常量池等等。下面我們主要針對執行緒池來一步一步揭開執行緒池的面紗。使用執行緒池的好處1、降低資源消耗可以重複利用已建立的執行緒降低執行緒建立和銷燬造成的消耗。2、提高響應速度當任務到達時,任務可以不需

[三]java8 函數語言程式設計Stream 概念深入理解 Stream 執行原理 Stream設計思路

這些流的方法是如何實現的?類StreamSupport提供了許多用於建立流的低階方法,所有這些方法都使用某種形式的Spliterator.一個Spliterator.是迭代器Iterator的並行版本它描述了一個(可能是無限的)元素集合,支援順序前進、批量遍歷,並將一部分輸入分割成另一個可並行處理的Split

一個“Hello World”理解JVM執行資料區 侵立刪

轉自:https://mp.weixin.qq.com/s/as8iaQMoUcdL6iPdMrZOZg 先上一張JVM體系結構圖:     1)執行時資料區:經過編譯生成的位元組碼檔案(class檔案),由class loader(類載入子系統)載入後交給

【軟體開發底層知識修煉】二十 深入理解執行程式的結構

上一篇文章記錄了GDB除錯從入門到熟練掌握的學習全過程。點選連結檢視:【軟體開發底層知識修煉】十九 GDB除錯從入門到熟練掌握超級詳細實戰教程學習目錄 還記得在以前的學習Binutils工具的時候,學習了很多工具來檢視可執行程式的結構,那個時候並沒有詳細說明程式的

深入理解java執行緒池—ThreadPoolExecutor

幾句閒扯:首先,我想說java的執行緒池真的是很繞,以前一直都感覺新建幾個執行緒一直不退出到底是怎麼實現的,也就有了後來學習ThreadPoolExecutor原始碼。學習原始碼的過程中,最噁心的其實就是幾種狀態的轉換了,這也是ThreadPoolExecutor的核心。花了

深入理解執行緒與併發程式設計

一、多執行緒三大特性 1、原子性:一個操作或者多個操作要麼全部執行,要麼都不執行。 2、可見性:當多個執行緒訪問同一個變數時,一個執行緒修改了這個變數的值,其他執行緒能夠立即看到修改的值。 3、有序性:程式執行的順序是按照程式碼的先後順序執行的,在單執行緒

深入理解立即執行函式(function(){})();

( function(){…} )()和( function (){…} () )是兩種javascript立即執行函式的常見寫法,要理解立即執行函式,需要先理解一些函式的基本概念。 1,函式宣告,函式表示式,匿名函式 函式宣告:function fnName(){...};使用function關鍵字宣告一個

java多型的理解執行多型)

說道多型,一定離不開其它兩大特性:封裝和繼承。而多型是在它們的基礎之上表現而來的,息息相關。在記憶中,每一次學習面向物件的時候,都與這三大特性有扯不開的關係,其是面向物件的重點,當然也算是難點。但是,它們就像是一層窗戶紙,只要有一個縫隙,你就完全可以搞懂什麼是面向物件。下面來

深入理解執行緒(二)—— Java的物件模型

上一篇文章中簡單介紹過synchronized關鍵字的方式,其中,同步程式碼塊使用monitorenter和monitorexit兩個指令實現,同步方法使用ACC_SYNCHRONIZED標記符實現。後面幾篇文章會從JVM原始碼的角度更加深入,層層剝開synchronized

深入理解JVM——執行緒安全與鎖優化

執行緒安全 當多個執行緒訪問一個物件時,如果不考慮這些執行緒在執行時環境下的排程和交替執行,也不需要進行額外的同步,或者在呼叫方進行任何其他的協調操作,呼叫這個物件的行為都可以獲得正確的結果,那麼這個物件是執行緒安全的。 Java語言中的執行緒安全 執行緒

深入理解Zend執行引擎

PHP:一種解釋型語言 PHP經常會被定義為“指令碼語言”或者是“解釋型語言”,什麼是“解釋型語言”呢? 所謂“解釋型語言”就是指用這種語言寫的程式不會被直接編譯為本地機器語言(native machine language),而是會被編譯為一種中間形式

JavaScript: ----深入理解JS執行上下文(二)

占位符 例子 -s 名稱 活動對象 {} undefined 行處理 對象 上篇文章我們了解到:js解析器會在(全局代碼/函數/eval代碼)執行前創建一個與之對應的執行上下文, 而對於每個執行上下文,都會有三個重要屬性: 變量對象(Variable object