全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2093
推到 Plurk!
推到 Facebook!

ISAPI 在 IIS5 上運作, 針對 NTFS partition 該怎麼設權限能讓 IUSER 去讀取C:\windows 或其它目錄的檔案呢?

答題得分者是:careychen
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-08-30 00:37:16 IP:220.134.xxx.xxx 訂閱
小弟撰寫 ISAPI 總為了 IIS 的安全設定一直傷腦筋,
因為 ISAPI 需要去讀某些設定檔, 但在 NTFS 環境中都常常有權限的問題,
導致 ISAPI 無法執行 (HTTP 500 或 DLLHOST.exe hang 住吃 CPU 9x%) 或者出現 I/O Error 103
也就是同一隻程式可能在同XP IIS5 的環境都有可能出現可運行和不可運行的情況,
在 IIS 6.0 上就更是對安全霧沙沙, 能設定成功真的是要經過一大堆"開放權限"的設定動作

想請問先進, IIS 上的 CGI/ISAPI 等程式若有讀/寫檔案的需求, 該怎麼設定 NTFS 目錄的安全性或者 IIS 的目錄安全設定呢?
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-08-30 17:08:33 IP:220.134.xxx.xxx 訂閱
補充資料

同樣的一個log 動作, 在 initialization 裡就能運作,
但在 Default action 的 webmoduleaction 竟不能運作, 出現 I/O 103

截取程式片段如下, 請先進指導一下.
(程式均在 XP IIS5 的環境下, 在 FAT32 的電腦就沒問題, 在NTFS 就有這問題,
由於並無太多系統做對照組測試, 無法確定是不是檔案系統的關係)
unit Unit1;
interface
uses
SysUtils, Classes, HTTPApp;
type
TWebModule1 = class(TWebModule)
procedure WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
WebModule1: TWebModule1;
implementation
{$R *.DFM}
procedure LogFile(instr : string);
var
myfile : TEXTFILE;
begin
try
if FileExists('c:\isapi_test.log') then
begin
AssignFile(myfile, 'c:\isapi_test.log');
append(myfile);
end
else
begin
AssignFile(myfile, 'c:\isapi_test.log');
rewrite(myfile);
end;
writeln(myfile, '[' datetimetostr(now) '] ' instr);
finally
Closefile(myfile);
end;
end;

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
LogFile('Hello world');
end;

initialization
LogFile('world begin');

end;
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-08-30 18:09:06 IP:218.210.xxx.xxx 訂閱
其實這只是安全性的問題,不要存在 C: 的根目錄底下,自建一個目錄放在裡面就 ok 了


===================引 用 Arnor 文 章===================
procedure LogFile(instr : string);
var
myfile : TEXTFILE;
begin
try
if FileExists('C:\Test\isapi_test.log') then
if FileExists('c:\isapi_test.log') then
begin
AssignFile(myfile, 'c:\test\isapi_test.log');
AssignFile(myfile, 'c:\isapi_test.log');
append(myfile);
end
else
begin
ForceDirectories('C:\Test'); // 加一行這個
AssignFile(myfile, 'c:\test\isapi_test.log');
AssignFile(myfile, 'c:\isapi_test.log');
rewrite(myfile);
end;
writeln(myfile, '[' datetimetostr(now) '] ' instr);
finally
Closefile(myfile);
end;
end;

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
begin
LogFile('Hello world');
end;

end;
------
價值的展現,來自於你用哪一個角度來看待它!!
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-08-30 20:09:14 IP:220.134.xxx.xxx 訂閱
謝謝回覆.

我自個找到問題點, 但是不清楚why.

問題點在專案宣告裡
ISAPIThreadPool

將它註解起來就沒問題了..
//ISAPIThreadPool

記得沒錯 thread pooling 是優化執行效能的方式,
是否是因為這樣才會有繼承應用程式執行角色權限的問題,
才會發生 I/O 被拒. (NTFS 安全性本就複雜難懂, 跟一般FAT32 有差距)

雖然程式目前可跑, 但在效能上難道會有很大落差嗎?
請先進指教.
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-08-30 21:52:40 IP:59.126.xxx.xxx 訂閱
我找到了這兩篇,他說 ISAPIThreadPool 和 ISAPIApp 的順序要變一下,這是個 bug ,換一下順序就行了
ISAPIApp必須在ISAPIThreadPool之前

http://topic.csdn.net/t/20040402/16/2918424.html ==> 5 樓的位置
http://www.delphifans.com/infoView/Article_3632.html ==> 第 5 點

但目前沒看到有人寫 【繼承應用程式執行角色權限的問題】是因為 ISAPIThreadPool 造成的,我再看看有沒有類似的文章
------
價值的展現,來自於你用哪一個角度來看待它!!
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-08-30 22:02:56 IP:220.134.xxx.xxx 訂閱
謝謝回覆

是的.
我知道是這問題後有針對這關鍵字查了一下搜尋引擎,
也有看到這說法, 也有測了一下, 不過很可惜並不成功,
所以, 該文章所指得這bug 應該是指在效能上的bug fix.
沒見到如我一樣的是I/O 問題.

經我這兩天的嘗試, 似乎對以前遇到 IIS6 因為安全性關係 (windows 2003 NTFS IIS6 整個安全性真的是一整個不知該高興還是頭暈),
有了點新突破, 至少確認了就是安全性才會影響 ISAPI 在諸多環境上能否運作的重要問題點. (倘若ISAPI程序沒牽扯到I/O 當然就不會有這問題).

或許也只是因為我用得還是D6, 在這方面不一定在新版D2007之類的就已改善了也說不定,
我這方面沒有環境測.

===================引 用 careychen 文 章===================
我找到了這兩篇,他說 ISAPIThreadPool 和 ISAPIApp 的順序要變一下,這是個 bug ,換一下順序就行了
ISAPIApp必須在ISAPIThreadPool之前

http://topic.csdn.net/t/20040402/16/2918424.html ==> 5 樓的位置
http://www.delphifans.com/infoView/Article_3632.html ==> 第 5 點

但目前沒看到有人寫 【繼承應用程式執行角色權限的問題】是因為 ISAPIThreadPool 造成的,我再看看有沒有類似的文章
careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-08-30 22:13:51 IP:59.126.xxx.xxx 訂閱
我今天的測試是用 D7+Update2 版 開發 XP 的 IIS5  和 2003 上的 iis6 都跑過,沒什麼問題
不過我是用你上面寫的那一段加上我修改過後的,跑很多次沒看到什麼問題,不曉得您一直說的 I/O 的部份
是還有其他的程式造成的呢? 還是單純就上面那段程式碼,就會一直造成你說的狀況,
如果是,有可能是 D6 本身舊有的問題造成
如果不是,那看您是否方便 Po 出其他的程式碼,我幫您試試
------
價值的展現,來自於你用哪一個角度來看待它!!
Arnor
一般會員


發表:28
回覆:29
積分:16
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-08-30 22:26:49 IP:220.134.xxx.xxx 訂閱
就如我所說的,
我也不清楚為何有些電腦就是不行跑.

我上述那段程式碼就是我的測試碼,
因為不想把專案整個拿來測試改來改去,
會太亂, 就只針對部份動作測.

===================引 用 careychen 文 章===================
我今天的測試是用 D7 Update2 版 開發 XP 的 IIS5 和 2003 上的 iis6 都跑過,沒什麼問題
不過我是用你上面寫的那一段加上我修改過後的,跑很多次沒看到什麼問題,不曉得您一直說的 I/O 的部份
是還有其他的程式造成的呢? 還是單純就上面那段程式碼,就會一直造成你說的狀況,
如果是,有可能是 D6 本身舊有的問題造成
如果不是,那看您是否方便 Po 出其他的程式碼,我幫您試試
系統時間:2017-12-13 5:26:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!