Linux WebServer WebRoot Path Identification

Andrew.Hann發表於2015-03-05

目錄

1. HTTPD(Apache)
2. NGINX
3. TENGINE
4. JBOSS
5. TOMCAT
6. LIGHTTPD

 

1. HTTPD(Apache)

0x1: 啟動引數

Usage: ./httpd [-D name] [-d directory] [-f file]
               [-C "directive"] [-c "directive"]
               [-k start|restart|graceful|graceful-stop|stop]
               [-v] [-V] [-h] [-l] [-L] [-t] [-T] [-S]
Options:
1. -D name            
define a name for use in <IfDefine name> directives,它配合配置檔案中的<IfDefine>段,用於在伺服器啟動和重新啟動時,有條件地跳過或處理某些命令

2. -d directory  
specify an alternate initial ServerRoot,為ServerRoot指令設定初始值為serverroot。它可以被配置檔案中的ServerRoot指令所覆蓋,其預設值是/usr/local/apache2

3. -f file           
specify an alternate ServerConfigFile,在啟動中使用config檔案的指令。如果config不是以/開頭的檔名, 則它是相對於ServerRoot的一個路徑。其預設值是conf/httpd.conf 

4. -C "directive"     
process directive before reading config files,在讀取配置檔案之前,先處理directive的配置

5. -c "directive"    
process directive after reading config files,在讀取配置檔案之後,再處理directive的配置

6. -e level  
show startup errors of level (see LogLevel),在伺服器啟動時,設定LogLevel為level。它用於在啟動時,臨時增加出錯資訊的詳細程度,以幫助排錯

7. -E file        
log startup errors to file,將伺服器啟動過程中的出錯資訊傳送到檔案file

8. -v              
show version number,顯示httpd的版本,然後退出

9. -V               
show compile settings,顯示httpd的版本和編譯引數, 然後退出

10. -h                
list available command line options (this page),輸出一個可用的命令列選項的簡要說明

11. -l                
list compiled in modules,輸出一個編譯在伺服器中的模組的列表。它不會列出使用LoadModule指令動態載入的模組

12. -L                 
list available configuration directives,輸出一個指令的列表,幷包含了各指令的有效引數和使用區域

13. -t -D DUMP_VHOSTS 
show parsed settings (currently only vhost settings),僅對配置檔案執行語法檢查。程式在語法解析檢查結束後立即退出,或者返回0(Syntax OK),或責返回非0的值(Syntax Error)。如果還指定了-D DUMP_VHOSTS ,會顯示虛擬主機配置的詳細資訊

14. -S               
a synonym for -t -D DUMP_VHOSTS,顯示從配置檔案中讀取並解析的設定結果(目前僅顯示虛擬主機的設定)

15. -t -D DUMP_MODULES
show all loaded modules

16. -M            
a synonym for -t -D DUMP_MODULES

17. -t                
run syntax check for config files,僅對配置檔案執行語法檢查。程式在語法解析檢查結束後立即退出,或者返回0(Syntax OK),或責返回非0的值(Syntax Error)

0x2: WebRoot識別虛擬碼

1. 列舉當前程式列表資訊: 列舉/proc
    1) 程式對應的檔案絕對路徑: /proc/pid/exe
    2) 程式啟動引數: /proc/pid/cmdline
2. 確定webserver型別: 根據程式名進行判斷
3. 從程式的啟動引數中獲取配置檔案的相關資訊
    1) -f config
    2) -d ServerRoot
4. 如果"-f config"配置檔案引數字串沒找到,則/proc/pid/exe -V動態執行一次,顯示編譯資訊
    1) -D HTTPD_ROOT="/opt/apache": 表明webroot路徑
    2) -D SERVER_CONFIG_FILE="conf/httpd.conf": 表明配置檔案相對路徑
5. 如果"-d ServerRoot"web路徑引數字串沒找到,則根據"/proc/pid/exe"去掉路徑中的最後2個分量,作為webserver的根目錄,並拼接上"/conf/httpd.conf"作為配置檔案路徑
/*根據獲取的配置檔案路徑,進行配置檔案解析*/
6. 解析配置檔案,從中獲得webroot的配置資訊
    1) ServerRoot "/opt/apache"
    2) DocumentRoot(web檔案路徑) "/usr/web"
    3) Include conf/vhosts/*/*.conf: 配置檔案中又引入了新的配置檔案,進行遞迴解析
    4) Alias /icons/ /usr/local/apache/icons/: 配置中出現的別名目錄

Relevant Link:

http://httpd.apache.org/docs/2.2/mod/mod_alias.html#alias
http://httpd.apache.org/docs/current/mod/core.html#serveralias

 

2. NGINX

0x1: 啟動引數

Tengine version: Tengine/2.1.0 (nginx/1.6.2)
Usage: nginx [-?hvmVtdq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
1. -?,-h        
this help

2. -v            
show version and exit,顯示 nginx 的版本

3. -V 
show version, modules and configure options then exit,顯示 nginx 的版本,編譯器版本和配置引數

4. -m            
show all modules and exit

5. -l           
show all directives and exit

6. -t            
test configuration and exit

7. -d            
dump configuration and exit,列印配置檔案資訊
  
8. -q       
suppress non-error messages during configuration testing

9. -s signal    
send signal to a master process
    1) stop
    2) quit
    3) reopen
    4) reload
可以使用訊號系統來控制主程式,主程式可以處理以下的訊號
    1) TERM、INT:    快速關閉
    2) QUIT:    從容關閉
    3) HUP:        過載配置,用新的配置開始新的工作程式,從容關閉舊的工作程式
    4) USR1:    重新開啟日誌檔案
    5) USR2:    平滑升級可執行程式
    6) WINCH:    從容關閉工作程式

10. -p prefix    
set prefix path (default: /usr/local/nginx/)

11. -c filename  
set configuration file (default: conf/nginx.conf)

12. -g directives : set global directives out of configuration file

0x2: WebRoot識別虛擬碼

1. 列舉當前程式列表資訊: 列舉/proc
    1) 程式對應的檔案絕對路徑: /proc/pid/exe
    2) 程式啟動引數: /proc/pid/cmdline
2. 確定webserver型別: 根據程式名進行判斷
3. 從程式的啟動引數中獲取配置檔案的相關資訊
    1) -c </path/to/config>
    2) -p prefix
4. 如果"-p prefix"字首配置引數字串沒找到,則根據"/proc/pid/exe"+"/conf/nginx.conf"進行拼接,作為配置檔案路徑

5. 如果在NGINX啟動引數中沒找到和配置檔案有關的字串,則/proc/pid/exe -d動態執行一次,列印出整個配置檔案資訊 
....
6. 解析配置檔案,從中獲得webroot的配置資訊
    1) http: 
        1.1) 在http節點中搜尋root關鍵字
        1.2) 對include關鍵字進行檢測,對引入的獨立配置檔案路徑進行遞迴解析
    2) server: 
        2.1) 在server節點中搜尋root關鍵字
        2.2) 對include關鍵字進行檢測,對引入的獨立配置檔案路徑進行遞迴解析
    3) location(以\.php$結尾的location節點)
        3.1) 解析FastCgi節點
            3.1.1) 搜尋root關鍵字
            3.1.2) 解析fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name
            3.1.3) 解析$document_root
        3.2) 搜尋root關鍵字
        3.3) location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ { alias /data/w3/images/$1;}: 配置中出現的別名目錄 

Relevant Link:

http://www.nginx.cn/nginxchscommandline
http://wiki.nginx.org/ChsCommandLine
http://wiki.nginx.org/FullExample
http://www.ha97.com/5194.html
http://nginx.org/cn/docs/http/ngx_http_core_module.html#alias
http://www.886404.com/search?q=NGINX+%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6+Alias
http://wiki.nginx.org/ChsCommandLine

 

3. TENGINE

4. JBOSS

0x1: 啟動引數

usage: run.sh [options] 

options: 
1. -h、--help    
顯示幫助資訊

2. -V、--version
顯示版本資訊
 
3. -D<name>[=<value>]            
設定系統屬性,JBoss Bootstrap Environment 
    1) JBOSS_HOME: /usr/java/jboss4 
    2) JAVA: /usr/java/j2sdk/bin/java 
    3) JAVA_OPTS: -Dprogram.name=run.sh -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 
    4) CLASSPATH: /usr/java/jboss4/bin/run.jar:/usr/java/j2sdk/lib/tools.jar 

4. -d、--bootdir=<dir>
設定啟動補丁目錄的位置;必須是絕對路徑或者url

5. -p、--patchdir=<dir>
設定補丁目錄的位置,必須是絕對路徑或者url

6. -n、--netboot=<url>
從指定的url網路位置啟動

7. -c、--configuration=<name>
指定伺服器啟動的配置(default、all、minimal)

8. -B、--bootlib=<filename>
將其它的jar包新增到bootclasspath的前面

9. -L、--library=<filename>
將其它的jar包新增到loaders classpath

10. -C、--classpath=<url>
將其它的url新增到loaders classpath

11. -P、--properties=<url>
從指定的url載入系統屬性

12. -b、--host=<host or ip>
所有JBoss Service繫結的地址

13. -g、--partition=<name>
HA分割槽的名稱(預設為DefaultDomain)

14. -u、--udp=<ip>
UDP的多播地址

15. -l、--log=<log4j|jdk>
設定日誌記錄外掛型別

0x2: WebRoot識別虛擬碼

1. 列舉當前程式列表資訊: 列舉/proc
    1) 程式對應的檔案絕對路徑: /proc/pid/exe
    2) 程式啟動引數: /proc/pid/cmdline
2. 確定webserver型別: 根據程式名進行判斷
3. 從程式的啟動引數中獲取WEB根目錄
    1) -Djboss.home.dir=: 從設定的系統屬性中提取WEB根目錄
    2) -Djava.endorsed.dirs=: 從設定的系統屬性中提取WEB根目錄
//啟動引數中獲取的就已經是WEB根目錄了

Relevant Link:

http://blog.csdn.net/icess_ma/article/details/1958363 
http://wenku.baidu.com/link?url=zxv-P-A2VDHEGsuJY_IcdaMpsRYLGa7be9d4EaQeyMZUnbHHY62KzbTDCe3ux074KN-bvE8kUDmBOFvJ9v3cR5HK1ynAoByfISwmMpTCJFa

 

5. TOMCAT

0x1: 啟動引數

Tomcat的啟動引數位於tomcat的安裝目錄\bin目錄下,Linux作業系統就是catalina.sh檔案,Windows作業系統就是catalina.bat檔案

1. -server
一定要作為第一個引數,在多個CPU時效能佳 

2. -Xms
初始Heap大小,使用的最小記憶體,cpu效能高時此值應設的大一些 
3. -Xmx
java heap最大值,使用的最大記憶體 
//上面兩個值是分配JVM的最小和最大記憶體,取決於硬體實體記憶體的大小,建議均設為實體記憶體的一半

4. -XX:PermSize
設定記憶體的永久儲存區域 

5. -XX:MaxPermSize
設定最大記憶體的永久儲存區域 

6. -XX:MaxNewSize

7. -Xss 15120 
這使得JBoss每增加一個執行緒(thread)就會立即消耗15M記憶體,而最佳值應該是128K,預設值是512k
 
8. +XX:AggressiveHeap 
會使得Xms沒有意義。這個引數讓jvm忽略Xmx引數,最大程度地消耗一個G實體記憶體、以及一個G的swap

9. -Xss:
每個執行緒的Stack大小 

10. -verbose:gc 
開啟垃圾收集資訊 

11. -Xloggc:gc.log 
指定垃圾收集日誌檔案 

12. -Xmn
young generation的heap大小,一般設定為Xmx的3、4分之一 

13. -XX:+UseParNewGC
縮短minor收集的時間 

14. -XX:+UseConcMarkSweepGC
縮短major收集的時間,此選項在Heap Size比較大而且Major收集時間較長的情況下使用更合適

15. -Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"  
HOME目錄

16. -Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
ENDORSED目錄

0x2: WebRoot識別虛擬碼

1. 列舉當前程式列表資訊: 列舉/proc
    1) 程式對應的檔案絕對路徑: /proc/pid/exe
    2) 程式啟動引數: /proc/pid/cmdline
2. 確定webserver型別: 根據程式名進行判斷
3. 從程式的啟動引數中獲取配置檔案的相關資訊
    1) -Dcatalina.home=  
4. 如果在NGINX啟動引數中沒找到和配置檔案有關的字串,則/proc/pid/exe+"/conf/server.xml"拼接出tomcat的預設配置檔案路徑
....
5. 解析配置檔案,從中獲得webroot的配置資訊,這是一個xml檔案,需要進行層次解析
Server -> Service -> Engine -> Host(迴圈遍歷所有Host節點) -> 屬性appBase對應的值/或者屬性docBase對應的值就是對應的WEB ROOT路徑

Relevant Link:

http://wenku.baidu.com/view/fa4f0118964bcf84b9d57b06.html
http://blog.csdn.net/huoyunshen88/article/details/8731937
http://blog.csdn.net/lifetragedy/article/details/7708724

 

6. LIGHTTPD

0x1: 啟動引數

lighttpd/1.4.35 (ssl) (Mar 12 2014 17:15:15) - a light and fast webserver
usage:
1. -f <name>  
filename of the config-file

2. -m <name>  
module directory (default: /usr/lib64/lighttpd)

3. -p
print the parsed config-file in internal form, and exit

4. -t  
test the config-file, and exit

5. -D         
don't go to background (default: go to background)

6. -v
show version

7. -V         
show compile-time features

8. -h
show this help

0x2: WebRoot識別虛擬碼

1. 列舉當前程式列表資訊: 列舉/proc
    1) 程式對應的檔案絕對路徑: /proc/pid/exe
    2) 程式啟動引數: /proc/pid/cmdline
2. 確定webserver型別: 根據程式名進行判斷
3. 從程式的啟動引數中獲取配置檔案的相關資訊
    1) -f config 
4. 如果"-d ServerRoot"web路徑引數字串沒找到,則根據"/proc/pid/exe"去掉路徑中的最後2個分量,作為webserver的根目錄,並拼接上"conf/lighttpd.conf"作為配置檔案路徑
/*根據獲取的配置檔案路徑,進行配置檔案解析*/
5. 解析配置檔案,從中獲得webroot的配置資訊
    1) server.document-root = server_root + "/lighttpd": 進行變數回溯解析,獲取WEB根目錄 
    2) include "conf.d/access_log.conf": 配置檔案中又引入了新的配置檔案,進行遞迴解析 
    //lighttpd 不支援include * 萬用字元路徑 和 entiry directory

Relevant Link:

http://linux.chinaunix.net/techdoc/net/2009/06/18/1119096.shtml

 

Copyright (c) 2014 LittleHann All rights reserved

 

相關文章