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

[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 ../..
三:創(chuàng)建系統(tǒng)服務(wù)
vim /usr/lib/systemd/system/tomcat.service
下方信息根據(jù)實(shí)際情況填寫(xiě)
[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了
啟動(dòng) systemctl start tomcat
停止 systemctl stop tomcat
重啟 systemctl restart tomcat
查看狀態(tài) systemctl status tomcat
如果systemctl start tomcat不能啟動(dòng),可以systemctl status tomcat查看狀態(tài),然后根據(jù)具體信息進(jìn)行排錯(cuò)。比如我就因?yàn)榈谝淮螞](méi)配置JAVA_HOME變量,導(dǎo)致啟動(dòng)失敗,如下圖。

最后別忘記設(shè)置了開(kāi)機(jī)自啟了和開(kāi)放防火墻對(duì)應(yīng)端口。開(kāi)機(jī)自啟命令是 systemctl enable tomcat