最近新接手一个网站建设项目,用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