Apache和Tomcat配合中出现权限问题解决

我客户的改版的网站(是多个国家版本)要在客户的服务器上线,新网站是使用opencms开发,采用前端是apache,后端是tomcat的结构。之前在另外一台产品机上放了几个国家,配置安装非常顺利。

但是到这台服务器上,出现访问不到root用户创建的文件或者是tomcat产生的静态文件,就是提示“403 禁止访问”

查找到问题所在,所有用户创建出来的文件权限都是如下:

Apache和Tomcat配合中出现权限问题解决

也就是说所有用户创建出来的用户只能自己读。但是我没法去修改这个设置(权限管理是有另一家公司管理,很严)。

那么就出现一个问题了,客户在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就能够访问

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/56309fb2fda3dcde4122f92046c7a48c.html