CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8

最近新接手一个网站建设项目,用java开发,以下两个需求:

1、Tomcat需要降权运行,不能以root用户运行,否则造成安全隐患。

2、Tomcat要运行在80端口或者443端口上。

第一个需求很好满足,主要是第二个需求。大家都知道,非root用户在CentOS7系统上,是不能使用1024以下端口的,好在Tomcat提供了解决方案,那就是jsvc

jsvc 是在Apache基金会下的daemon项目下开源项目,主要功能是可以使一些运行在普通用户下的java进程,获取一些root权限下的权利,最常见的需求就是降权的Tomcat能够使用80或者443端口了。

一:新建tomcat用户和组,更改文件夹权限

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
[[email protected] ~]# groupadd tomcat
[[email protected] ~]# useradd -s /sbin/nologin -g tomcat tomcat
[[email protected] ~]# chown -R tomcat:tomcat /home/tomcat8/

二:编译JSVC

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
编译jsvc
[[email protected] ~]# cd /home/tomcat8/bin/
[[email protected] bin]# tar -xzvf commons-daemon-native.tar.gz
[[email protected] bin]# cd commons-daemon-1.2.2-native-src/unix/
[[email protected] unix]# ./configure 
[[email protected] unix]# make
[[email protected] 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变量,导致启动失败,如下图。

CentOS 7.5 操作系统下,非ROOT用户JSVC方式启动Tomcat8
因为没配置JAVA_HOME,导致Tomcat启动失败

最后别忘记设置了开机自启了和开放防火墙对应端口。开机自启命令是 systemctl enable tomcat

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系电话

17689511878

17759303055

微信
微信
分享本页
返回顶部