最近新接手一個網站建設項目,用java開發,以下兩個需求:
1、Tomcat需要降權運行,不能以root用戶運行,否則造成安全隱患。
2、Tomcat要運行在80端口或者443端口上。
第一個需求很好滿足,主要是第二個需求。大家都知道,非root用戶在CentOS7系統上,是不能使用1024以下端口的,好在Tomcat提供了解決方案,那就是jsvc
jsvc 是在Apache基金會下的daemon項目下開源項目,主要功能是可以使一些運行在普通用戶下的java進程,獲取一些root權限下的權利,最常見的需求就是降權的Tomcat能夠使用80或者443端口了。
一:新建tomcat用戶和組,更改文件夾權限


[root@web ~]# groupadd tomcat
[root@web ~]# useradd -s /sbin/nologin -g tomcat tomcat
[root@web ~]# chown -R tomcat:tomcat /home/tomcat8/
二:編譯JSVC


[root@web ~]# cd /home/tomcat8/bin/
[root@web bin]# tar -xzvf commons-daemon-native.tar.gz
[root@web bin]# cd commons-daemon-1.2.2-native-src/unix/
[root@web unix]# ./configure
[root@web unix]# make
[root@web unix]# cp jsvc ../..
三:創建系統服務
vim /usr/lib/systemd/system/tomcat.service
下方信息根據實際情況填寫
[Unit]
Description=Apache Tomcat 8 Web Application Container
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/home/tomcat8/bin/tomcat.pid
Environment=CATALINA_PID=/home/tomcat8/bin/tomcat.pid
Environment=JAVA_HOME=/usr/local/java/jdk1.8.0_191
Environment=CATALINA_HOME=/home/tomcat8
Environment=CATALINA_BASE=/home/tomcat8
Environment=CATALINA_OPTS=
ExecStart=/home/tomcat8/bin/jsvc \
-Dcatalina.home=${CATALINA_HOME} \
-Dcatalina.base=${CATALINA_BASE} \
-cp ${CATALINA_HOME}/bin/commons-daemon.jar:${CATALINA_HOME}/bin/bootstrap.jar:${CATALINA_HOME}/bin/tomcat-juli.jar \
-user tomcat \
-java-home ${JAVA_HOME} \
-pidfile /home/tomcat8/bin/tomcat.pid \
-errfile SYSLOG \
-outfile SYSLOG \
$CATALINA_OPTS \
org.apache.catalina.startup.Bootstrap
ExecStop=/home/tomcat8/bin/jsvc \
-pidfile /home/tomcat8/bin/tomcat.pid \
-stop \
org.apache.catalina.startup.Bootstrap
[Install]
WantedBy=multi-user.target
保存成功之后,我們就可以使用以下命令控制Tomcat了
啟動 systemctl start tomcat
停止 systemctl stop tomcat
重啟 systemctl restart tomcat
查看狀態 systemctl status tomcat
如果systemctl start tomcat不能啟動,可以systemctl status tomcat查看狀態,然后根據具體信息進行排錯。比如我就因為第一次沒配置JAVA_HOME變量,導致啟動失敗,如下圖。


最后別忘記設置了開機自啟了和開放防火墻對應端口。開機自啟命令是 systemctl enable tomcat
