Я хочу запустить Tomcat 7 как пользователь на CentOS 6. Я создал пользователя tomcat:tomcat
и сменил владельца под /var/lib/apache-tomcat*
и т.д...
В Интернете есть множество документов о том, как это сделать, но я не думаю, что они актуальны. Большинство из них указывают, что вы делаете это, как показано ниже. Проблема в том, что ... этот метод будет бомбой, потому что сценарии запуска tomcat и т. Д. Не могут записывать в PID из-за более низких разрешений в файловой системе. Я не хочу ослаблять права на запись в файловой системе. Цель - повысить безопасность.
Как лучше это сделать? Я удивлен, что для tomcat нет «стандартного» сценария инициализации. Я знаю, что это не сложно. Но почему мы должны изобретать велосипед?
Спасибо
Пользуюсь этим уже много лет. Не помню, где я это взял. Я только что добавил /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
Еще один вариант - создать каталог / var / run / tomcat и привязать его к tomcat: tomcat. Затем измените свой сценарий инициализации на
# pidfile: /var/run/tomcat/tomcat.pid
export CATALINA_PID=/var/run/tomcat/tomcat.pid
Скорее всего, разрешения /var/run
dir, как на моей машине:
drwxr-xr-x 24 root root 740 Mar 22 11:48 run
Таким образом, эта папка доступна для записи только root. Ваш скрипт переключается на пользователя tomcat
перед запуском службы, поэтому это не сработает.
Скрипт должен использовать такой инструмент, как start-stop-daemon
который может использовать файл PID как root при запуске службы с заданным UID.
Посмотри это сценарий в качестве примера сценария инициализации, который использует start-stop-daemon
.