tomcat用戶設置
1
2
|
[root@host-1 ~]
# useradd -u 501 tomcat
[root@host-1 ~]
# passwd tomcat
|
安裝JDK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@host-1 tools]
# tar zxf jdk-8u101-linux-x64.tar.gz -C /usr/local/
[root@host-1 tools]
# cd /usr/local/
[root@host-1
local
]
# ln -s jdk1.8.0_101 jdk
[root@host-1
local
]
# vim /etc/profile.d/java.sh
export
JAVA_HOME=
/usr/local/jdk
export
JAVA_BIN=
/usr/local/jdk/bin
export
PATH=$PATH:$JAVA_HOME
/bin
export
CLASSPATH=.:$JAVA_HOME
/lib/dt
.jar:$JAVA_HOME
/lib/tools
.jar
export
JAVA_HOME JAVA_BIN PATH CLASSPATH
[root@host-1
local
]
# source /etc/profile.d/java.sh
[root@host-1
local
]
# java -version
java version
"1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
[root@host-1 ~]
# cd /usr/local/
[root@host-1
local
]
# chown -R tomcat.tomcat jdk/
|
tomcat安裝
1
2
3
4
|
[root@host-1 tools]
# tar zxf apache-tomcat-8.5.5.tar.gz -C /usr/local/
[root@host-1 tools]
# cd /usr/local/
[root@host-1
local
]
# ln -s apache-tomcat-8.5.5 tomcat
[root@host-1
local
]
# chown -R tomcat.tomcat tomcat/
|
應用程序配置
1
2
3
4
5
|
[root@host-1
local
]
# mkdir -p /data/webapps
[root@host-1
local
]
# cd /data/
[root@host-1 data]
# chown -R tomcat.tomcat webapps
[root@host-1
local
]
# su tomcat
將應用程序放置在
/data/webapps/
目錄下。建立相應的目錄如團購wmw_tuan,靜態化wmw_static,並修改server.xml,對應好目錄即可
|
啟動tomcat
1
2
3
4
5
6
7
|
[tomcat@host-1 ~]$
/usr/local/tomcat/bin/startup
.sh
Using CATALINA_BASE:
/usr/local/tomcat
Using CATALINA_HOME:
/usr/local/tomcat
Using CATALINA_TMPDIR:
/usr/local/tomcat/temp
Using JRE_HOME:
/usr/local/jdk
Using CLASSPATH:
/usr/local/tomcat/bin/bootstrap
.jar:
/usr/local/tomcat/bin/tomcat-juli
.jar
Tomcat started.
|
tomcat重啟問題
1
2
3
4
|
/usr/local/tomcat/bin/shutdown
.sh 這個命令是關閉tomcat
重啟有2個問題需要注意:
1、建議生產環境中,每次重啟之前把這兩個文件夾清空,不然可能會因為緩存的問題造成一些奇怪的事件
2、有時候會發現執行
shutdown
.sh后,tomcat並沒有完全關閉,所以我們可以做腳本
kill
進程
|
tomcat腳本
1
2
|
# vim tomcat.sh
# chmod +x tomcat
|
telnet管理端口保護(強制)
1
2
3
4
5
6
7
8
9
|
說明:
修改默認的8005管理端口為不易猜測的端口(大於1024)
修改SHUTDOWN指令為其他字符串
標准配置:
<Server port=
"8527"
shutdown
=
"dangerous"
>
備注:
以上配置項的配置內容只是建議配置
|
ajp連接端口保護(推薦)
1
2
3
4
5
6
7
8
9
10
|
說明:
修改默認的ajp 8009端口為不易沖突的大於1024端口
通過iptables規則限制ajp端口訪問的權限僅為線上機器
標准配置:
<Connector port=
"8528"
protocol=
"AJP/1.3"
/>
備注:
以上配置項內容僅為建議配置,請按照實際情況進行合理配置,但要求端口在8000~8999之間
保護此端口的目的在於防止線下的測試流量被mod_jk轉發至線上tomcat服務器
|
禁用管理端(強制)
1
2
3
4
5
6
7
8
9
10
11
|
說明:
刪除默認的{tomcat安裝目錄}
/conf/tomcat-user
.xml文件,重啟tomcat后將會自動生成新的文件
刪除{tomcat安裝目錄}
/webapps
下默認所有的目錄和文件
將tomcat應用根目錄配置為tomcat安裝目錄以外的目錄
標准配置:
<Context path=
""
docBase=
"/data/webapps/bagtree"
debug=
"0"
reloadable=
"false"
crossContext=
"true"
/>
備注:
對於前段web模塊,tomcat管理端屬於tomcat的高危安全隱患,一旦被攻破,黑客通過上傳web shell的方式將會直接取
得服務器的控制權,后果極其嚴重
|
降權啟動(強制)
1
2
3
4
5
6
|
說明:
tomcat啟動用戶權限必須為非root權限,盡量降低tomcat啟動用戶的目錄訪問權限
如需要直接對外使用80端口,可通過普通帳號啟動后,配置iptables規則進行轉發
備注:
避免一旦tomcat服務被入侵,黑客直接獲取高級用戶權限危害整個server的安全
|
文件列表訪問控制(強制)
1
2
3
4
5
6
7
8
9
10
11
|
說明:
conf
/web
.xml文件中default部分listings的配置必須為
false
標准配置:
<init-param>
<param-name>listings<
/param-name
>
<param-value>
false
<
/param-value
>
<
/init-param
>
備注:
false
為不列出目錄文件,
true
為允許列出,默認為
false
|
版本信息隱藏(強制)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
說明:
修改conf
/web
.xml,重定向403、404以及500等錯誤到指定的錯誤頁面
也可以通過應用程序目錄下的WEB-INF
/web
.xml進行錯誤頁面的重定向
標准配置:
<error-page>
<error-code>403<
/error-code
>
<location>
/forbidden
.jsp<
/location
>
<
/error-page
>
<error-page>
<error-code>404<
/error-code
>
<location>
/notfound
.jsp<
/location
>
<
/error-page
>
<error-page>
<error-code>500<
/error-code
>
<location>
/serverbusy
.jsp<
/location
>
<
/error-page
>
備注:
在配置中對一些常見錯誤進行重定向,避免當出現錯誤時tomcat默認顯示的錯誤頁面暴露服務器和版本信息
必須確保程序跟目錄下的錯誤頁面已經存在
|
Server header重寫(推薦)
1
2
3
4
5
6
7
8
|
說明:
在HTTP Connector配置中加入server的配置
標准配置:
server=
"webserver"
備注:
當tomcat HTTP端口直接提供web服務時此配置生效,加入此配置,將會替換http響應Server header部分默認配置,默認是Apache-Coyote
/1
.1
|
訪問限制(根據業務場景需求)
1
2
3
4
5
6
7
8
9
10
|
說明:
通過配置,限定訪問的ip源
標准配置:
<Context path=
""
docBase=
"/home/work/tomcat"
debug=
"0"
reloadable=
"false"
crossContext=
"true"
>
<Valve className=
"org.apache.catalina.valves.RemoteAddrValue"
allow=
"61.148.18.138,61.135.165.*"
deny=
"*.*.*.*"
/>
<
/Context
>
備注:
ip的白名單,拒絕非白名單ip的訪問,此配置主要是針對高保密級別的系統
|
起停腳本權限回收(推薦)
1
2
3
4
5
6
7
8
|
說明:
取出其他用戶對tomcat的bin目錄下
shutdown
.sh、startup.sh、catalina.sh的可執行權限
標准配置:
chmod
-R 744 tomcat
/bin/
*
備注:
防止其他用戶有起停線上tomcat的權限
|
訪問日志格式規范(推薦)
1
2
3
4
5
6
7
8
9
10
|
說明:
開啟tomcat默認訪問日志中的Referer和User-Agent記錄
標准配置:
<Valve className=
"org.apache.catalina.valves.AccessLogValve"
directory=
"logs"
prefix=
"localhost_access_log"
suffix=
".txt"
pattern=
"%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D"
resolveHosts=
"false"
/>
備注:
開啟Referer和User-Agent是為了一旦出現安全問題能夠更好的根據日志進行問題排查
|
附錄:建議配置標准執行方案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
1、配置部分(${CATALINA_HOME}conf
/server
.xml)
<Server port=
"8527"
shutdown
=
"dangerous"
>
<!--Define a non-SSL HTTP
/1
.1 Connector on port 8080 -->
<Connector port=
"8080"
server=
"webserver"
/>
<!--Define an AJP1.3 Connector on port 8528-->
<!--Define an accesslog-->
<Valve className=
"org.apache.catalina.valves.AccessLogValve"
directory=
"logs"
prefix=
"localhost_access_log"
suffix=
".txt"
pattern=
"%h %l %u %t %r %s %b %{Referer}i %{User-Agent}i %D"
resolveHosts=
"false"
/>
<Connector port=
"8528"
protocol=
"AJP/1.3"
/>
<Context path=
""
docBase=
"/data/webapps/xxx"
debug=
"0"
reloadable=
"false"
crossContext=
"true"
>
2、配置部分(${CATALINA_HOME}conf
/web
.xml或者WEB-INF
/web
.xml)
<init-param>
<param-name>listings<
/param-name
>
<param-value>
false
<
/param-value
>
<
/init-param
>
<error-page>
<error-code>403<
/error-code
>
<location>
/forbidden
.jsp<
/location
>
<
/error-page
>
<error-page>
<error-code>404<
/error-code
>
<location>
/notfound
.jsp<
/location
>
<
/error-page
>
<error-page>
<error-code>500<
/error-code
>
<location>
/serverbusy
.jsp<
/location
>
<
/error-page
>
3、刪除如下 tomcat默認目錄和默認文件
tomcat
/webapps/
*
tomcat
/conf/tomcat-user
.xml
4、去除其他用戶對tomcat起停囧啊本的執行權限
chmod
744 -R tomcat
/bin/
*
|