PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tomcat als nicht-root starten



JAY_Fisi
20.09.06, 14:33
Hallo,

Ich habe hier einen Tomcat 5.5. laufen und würde ihn gerne standardmäßig als nicht-root-user starten lassen.
Weiss jemand wie das geht?
Bin für jede Hilfe dankbar :-)

marce
20.09.06, 14:41
Bau Dir doch ein Wrapper-Skript drumherum, welches einen sudo auf das eigentliche Start-Script macht - funzt hier problemlos...

Ansonsten geht es doch eh alks jeder User von sich aus, solange Du keinen Port unter 1024 verwendest...

JAY_Fisi
20.09.06, 14:48
Danke für deine Antwort!

Kannst du mir das mit dem sudo und Wrapper näher erläutern?

marce
20.09.06, 14:51
Kommt auf das Szenario an:

Bist Du root und willst, das TomCat als anderer User läuft oder bist Du user und willst TomCat, der als root laufen soll starten?

JAY_Fisi
20.09.06, 15:04
Ich bin root und möchte dass Tomcat als anderer User läuft

marce
20.09.06, 15:10
wir haben hier bei uns ein entsprechendes install-Script gebastelt:

#!/bin/bash

#
# In Verzeichnis wechseln
#
cd /root/software/i_tomcat


#
# Uebergabeparameter ueberpruefen
#
if [[ ! $1 ]]
then
echo "Bitte Anwendung als Parameter 1 angeben"
exit
fi


if [[ ! $2 ]]
then
echo "Bitte Benutzerkennung als Parameter 2 angeben"
exit
fi


#
# Benutzer und Gruppe anlegen
#
groupadd tomcat
useradd -g tomcat -G users -d /usr/local/tomcat_$1 $2


#
# Tomcat lokal entpacken
#
tar -xzf jakarta-tomcat-4.1.29.tar.gz


#
# Tomcat verschieben
#
mv jakarta-tomcat-4.1.29 /usr/local/tomcat_$1


#
# Start und Stop-Scripte anlegen
#
echo "#!/bin/bash" > start_tomcat.sh
echo "" >> start_tomcat.sh
echo "cd /usr/local/tomcat_$1" >> start_tomcat.sh
echo "" >> start_tomcat.sh
echo "su - $2 -c /usr/local/tomcat_$1/tomcat_start.sh" >> start_tomcat.sh


echo "#!/bin/bash" > stop_tomcat.sh
echo "" >> stop_tomcat.sh
echo "cd /usr/local/tomcat_$1" >> stop_tomcat.sh
echo "" >> stop_tomcat.sh
echo "su - $2 -c /usr/local/tomcat_$1/tomcat_stop.sh" >> stop_tomcat.sh


echo "#!/bin/bash" > tomcat_start.sh
echo "" >> tomcat_start.sh
echo "cd /usr/local/tomcat_$1" >> tomcat_start.sh
echo "" >> tomcat_start.sh
echo "mv logs/catalina.out logs/catalina.out_\$(date +%Y%m%d_%H%M%S)" >> tomcat_start.sh
echo "" >> tomcat_start.sh
echo "PATH=/usr/local/java2/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin" >> tomc
at_start.sh
echo "JAVA_HOME=/usr/local/java2/" >> tomcat_start.sh
echo 'JAVA_OPTS="-Xms128m -Xmx768m"' >> tomcat_start.sh
echo "CATALINA_HOME=/usr/local/tomcat_$1" >> tomcat_start.sh
echo "" >> tomcat_start.sh
echo "export JAVA_OPTS" >> tomcat_start.sh
echo "export CATALINA_HOME" >> tomcat_start.sh
echo "export PATH" >> tomcat_start.sh
echo "export JAVA_HOME" >> tomcat_start.sh
echo "" >> tomcat_start.sh
echo "date >> startTomcat.log" >> tomcat_start.sh
echo "" >> tomcat_start.sh
echo "cd bin" >> tomcat_start.sh
echo "./startup.sh" >> tomcat_start.sh


echo "#!/bin/bash" > tomcat_stop.sh
echo "" >> tomcat_stop.sh
echo "cd /usr/local/tomcat_$1" >> tomcat_stop.sh
echo "" >> tomcat_stop.sh
echo "PATH=/usr/local/java2/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin" >> tomc
at_stop.sh
echo "JAVA_HOME=/usr/local/java2/" >> tomcat_stop.sh
echo 'JAVA_OPTS="-Xms128m -Xmx768m"' >> tomcat_stop.sh
echo "CATALINA_HOME=/usr/local/tomcat_$1" >> tomcat_stop.sh
echo "" >> tomcat_stop.sh
echo "export JAVA_OPTS" >> tomcat_stop.sh
echo "export CATALINA_HOME" >> tomcat_stop.sh
echo "export PATH" >> tomcat_stop.sh
echo "export JAVA_HOME" >> tomcat_stop.sh
echo "" >> tomcat_stop.sh
echo "date >> startTomcat.log" >> tomcat_stop.sh
echo "" >> tomcat_stop.sh
echo "cd bin" >> tomcat_stop.sh
echo "./shutdown.sh" >> tomcat_stop.sh


chmod 700 start_tomcat.sh
chmod 700 stop_tomcat.sh
chmod 700 tomcat_start.sh
chmod 700 tomcat_stop.sh


cp start_tomcat.sh /usr/local/tomcat_$1/
cp stop_tomcat.sh /usr/local/tomcat_$1/
cp tomcat_start.sh /usr/local/tomcat_$1/
cp tomcat_stop.sh /usr/local/tomcat_$1/


#
# server.xml und web.xml kopieren
#
cp server.xml /usr/local/tomcat_$1/conf/server.xml
cp web.xml /usr/local/tomcat_$1/conf/web.xml


#
# Benutzer ud -gruppe von Tomcat aendern
#
cd /usr/local/
chown -R $2:tomcat tomcat_$1


#
# webapps aufraeumen
#
cd /usr/local/tomcat_$1/webapps/
rm -r ROOT
rm -r examples
rm -r tomcat-docs
rm -r webdav


#
# zureck nach Hause
#
cd /root/software/i_tomcat


... das baut alles zusammen. Hinterher kann man dann als "root" in dem entsprechenden Verzeichnis (z.B. /usr/local/tomcat_projekt/) per ./start_tomcat.sh bzw. ./stop_tomcat.sh den Tomcat starten - der macht dann ein su, baut sich sein Environment zusammen und fährt hoch...

Das hier ist nun für 4.1.28, für 5.5 funktioniert es analog...


edit: Ach ja, das kopieren der web.xml und server.xml kommt daher, dass wir dafür schon entschlackte und angepasste Versionen haben, kann also weggelassen werden...

comrad
20.09.06, 15:41
Ich hatte das gleiche Problem und ich würde dir NICHT raten, Tomcat als Root laufen zu lassen. Es ist ein Application Server und dementsprechend kann viel passieren.

Ich hab es wie folgt gelöst:

Der Tomcat läuft bei mir auf Port 8080 (Standard), damit kann ich ihn als User starten und laufen lassen. Alle Anfragen auf Port 80 leite ich nun lokal auf Port 8080 um. So ist der Server von aussen auf Port 80 erreichbar, läuft aber als User.

Dazu brauchst du nur folgende Iptable-Regel:



/usr/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080


comrad

marce
20.09.06, 15:44
Ich hatte das gleiche Problem und ich würde dir NICHT raten, Tomcat als Root laufen zu lassen. Es ist ein Application Server und dementsprechend kann viel passieren.
genau das macht mein Script doch auch. Es geht lediglich davon aus, dass man als root auf dem Server eingeloggt ist und den Server starten will...