我客户的改版的网站(是多个国家版本)要在客户的服务器上线,新网站是使用opencms开发,采用前端是apache,后端是tomcat的结构。之前在另外一台产品机上放了几个国家,配置安装非常顺利。
但是到这台服务器上,出现访问不到root用户创建的文件或者是tomcat产生的静态文件,就是提示“403 禁止访问”
查找到问题所在,所有用户创建出来的文件权限都是如下:
也就是说所有用户创建出来的用户只能自己读。但是我没法去修改这个设置(权限管理是有另一家公司管理,很严)。
那么就出现一个问题了,客户在opencms后台上传了图片或者静态文件,这些文件会被写到硬盘中,而tomcat目前是使用root身份,也就是说只能root可读。而apache是daemon身份运行(这个用户是nologin的,这样比较安全),那么用户通过apache访问这些静态文件就会出现403错误。
于是我尝试使用daemon身份运行tomcat,结果发现su和sudo都不可以,因为这个用户是nologin的。
结果发现有jsvc这个东西可以使用特定的身份允许tomcat
安装如下
1)下载
wget
2)解压并安装
tar -zxvf commons-daemon-1.0.10-native-src.tar.gz
cd commons-daemon-1.0.10-native-src
cd unix/
./configure --with-Java=/home/soft/jdk/
make
cp jsvc /home/tomcat/bin/
3)创建service
vi /etc/init.d/tomcat
cat /etc/init.d/tomcat
/etc/init.d/tomcat的内容如下:
#!/bin/sh
#
# Startup Script for Tomcat5
#
# chkconfig: 345 88 14
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /var/run/jsvc.pid
# config:
#
# Source function library.
. /etc/rc.d/init.d/functions
#
prog=tomcat_id
#
JAVA_HOME=/home/soft/jdk
CATALINA_HOME=/home/tomcat
DAEMON_HOME=$CATALINA_HOME/bin
TOMCAT_USER=daemon
# for multi instances adapt those lines.
TMP_DIR=/var/tmp
PID_FILE=/var/run/jsvc.pid
CATALINA_BASE=$CATALINA_HOME
JAVA_OPTS='-server -Xms512m -Xmx1024m -XX:PermSize=64m -XX:MaxPermSize=512m -XX:-UseGCOverheadLimit'
CATALINA_OPTS=
CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar
case "$1" in
start)
#
# Start Tomcat
#
$DAEMON_HOME/jsvc \
-user $TOMCAT_USER \
-home $JAVA_HOME \
-Dcatalina.home=$CATALINA_HOME \
-Dcatalina.base=$CATALINA_BASE \
-Djava.io.tmpdir=$TMP_DIR \
-wait 10 \
-pidfile $PID_FILE \
-outfile $CATALINA_HOME/logs/catalina.out \
-errfile '&1' \
$JAVA_OPTS \
$CATALINA_OPTS \
-cp $CLASSPATH \
org.apache.catalina.startup.Bootstrap
#
# To get a verbose JVM
#-verbose \
# To get a debug of jsvc.
#-debug \
exit $?
;;
stop)
#
# Stop Tomcat
#
$DAEMON_HOME/jsvc \
-stop \
-pidfile $PID_FILE \
org.apache.catalina.startup.Bootstrap
exit $?
;;
*)
echo "Usage tomcat_th start/stop"
exit 1;;
esac
设置可以执行
chmod +x /etc/init.d/tomcat
4)修改tomcat拥有者
chown -R daemon:daemon /home/tomcat
chown -R daemon:daemon /home/tomcatlogs/*
5)启动tomcat
service tomcat_th start
这时tomcat写出来的文件都是daemon拥有,因此apache就能够访问