web-dev-qa-db-ja.com

Tomcat 7をユーザーとして開始-init.dスクリプトはpidを書き込めません

CentOS 6でTomcat 7をユーザーとして実行したい。ユーザーTomcat:tomcatを作成し、/var/lib/Apache-Tomcat*の下で所有権を変更した。

それを行う方法に関するオンラインのドキュメントはたくさんありますが、それらは最新のものではないと思います。それらのほとんどは、あなたが以下のようにそれを行うことを示しています。問題は...ファイルシステムの権限が低いために、Tomcatの起動などのスクリプトがPIDに書き込めないため、この手法は危険です。ファイルシステムの書き込み権限を緩め始めたくありません。セキュリティを強化することが目標です。

これを行うためのより良い方法は何ですか? Tomcat用の「既定の」initスクリプトがないことに驚いています。複雑ではないことは知っています。しかし、なぜ車輪を再発明し続ける必要があるのでしょうか。

ありがとう

私はこれを何年も使っています。どこで手に入れたのか思い出せません。 /bin/su Tomcatを追加しました。

# Startup script for the Jakarta Tomcat Java Servlets and JSP server
#
# chkconfig: - 85 15
# description: Jakarta Tomcat Java Servlets and JSP server
# processname: Tomcat
# pidfile: /var/run/Tomcat.pid
# config:

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# Set Tomcat environment.
export Java_HOME=/usr/lib/jvm/Java/
#export CLASSPATH=.:/usr/local/j2sdk/lib/tools.jar:/usr/local/j2re/lib/rt.jar
export CATALINA_HOME=/var/lib/Tomcat
#export CATALINA_OPTS="-server -Xms64m -Xmx512m -Dbuild.compiler.emacs=true"
#export PATH=/usr/local/j2sdk/bin:/usr/local/j2re/bin:$PATH
export CATALINA_PID=/var/run/Tomcat.pid

[ -f $CATALINA_HOME/bin/startup.sh ] || exit 0
[ -f $CATALINA_HOME/bin/shutdown.sh ] || exit 0

export PATH=$PATH:/usr/bin:/usr/local/bin

# See how we were called.
case "$1" in
  start)
        # Start daemon.
        echo -n "Starting Tomcat: "
        /bin/su Tomcat $CATALINA_HOME/bin/startup.sh
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/Tomcat
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down Tomcat: "
        /bin/su Tomcat $CATALINA_HOME/bin/shutdown.sh
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/Tomcat
        ;;
  restart)
        $0 stop
        sleep 1
        $0 start
        ;;
  condrestart)
       [ -e /var/lock/subsys/Tomcat ] && $0 restart
       ;;
  status)
        status Tomcat
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0
4
PrecisionPete

他の1つのオプションは、ディレクトリ/ var/run/Tomcatを作成し、それをTomcat:tomcatに移動することです。次に、initスクリプトを次のように変更します

# pidfile: /var/run/Tomcat/tomcat.pid

export CATALINA_PID=/var/run/Tomcat/tomcat.pid
1
dmourati

ほとんどの場合、私のマシンと同じように/var/runディレクトリの権限は次のとおりです。

drwxr-xr-x 24 root root 740 Mar 22 11:48 run

したがって、このフォルダはrootのみが書き込み可能です。スクリプトはサービスを開始する前にユーザーTomcatに切り替えるため、これは機能しません。

スクリプトは、start-stop-daemonのようなツールを使用する必要があります。このツールは、特定のUIDでサービスを開始するときに、PIDファイルをrootとしてTシャツにできます。

start-stop-daemonを使用している初期化スクリプトの例として、この script を参照してください。

1
vanthome