chown -R USER:GROUP teamspeak3-server_linux-x86
su -c "cd $DIR && $DIR/ts3server_startscript.sh start $1" - $USER
Ich antworte mir zu meiner Frage mal selbst. Nachdem ich einige Zeit herumexperimentiert habe, bin ich auf des Rätels Lösung gekommen. Der Grund warum der TS3 Server trotz Aufruf mit SU $USER nicht starten wollte lag an zwei Dingen:
Erstens muss auf der Konsole eine kleine Vorarbeit geleistet werden. Die Installation des .spk Paketes wird intern durch den User root durchgeführt. Das hat zur Folge, dass die Programmverzeichnisse unter '/var/packages/TS3-Server/target/teamspeak3-server_linux-x86' auch dem User root gehören. Damit der Server durch einen unprivelegierten Benutzer gestartet werden kann, müssen die Besitzverhältnisse des Verzeichnis 'teamspeak3-server_linux-x86' rekursiv geändert werden:
Rich (BBCode):chown -R USER:GROUP teamspeak3-server_linux-x86
Zweitens hatte ich vergessen, dass der unpriveligierte User nach Aufruf von SU $USER ja in seiner eigenen Umgebung und demzufolge in seinem Homeverzeichnis startet. In dem Standard Start-Stop-Skript erfolgt aber der CD-Befehl zum Wechsel in das TS-Verzeichnis bereits vor dem Startbefehl, so dass der unpriveligierte User das Binary nicht finden konnte. Man muss also dem Startbefehl auch noch einen CD-Befehl mitgeben:
$USER ist durch den Namen des unpriveligierten Benutzers zu ersetzen.Rich (BBCode):su -c "cd $DIR && $DIR/ts3server_startscript.sh start $1" - $USER
Durch diesen Aufruf startet der TS3-Server nun mit einem unprivelegierten Benutzer.
Aus Sicherheitsgründen ist das aus meiner Sicht ein deutlicher Mehrwert.
#!/bin/sh
###BEGIN INIT INFO########################
#
# start-stop-status
# Starts, stops the TS3 server and
# reports status to the package manager
#
###END INIT INFO##########################
DIR="/var/packages/TS3-Server/target/teamspeak3-server_linux-amd64"
cd "$DIR"
case $1 in
start)
"$DIR/ts3server_startscript.sh" start &
exit $?
;;
stop)
"$DIR/ts3server_startscript.sh" stop &
exit $?
;;
status)
if [ -e "$DIR/ts3server.pid" ]; then
if ( kill -0 $(cat "$DIR/ts3server.pid") 2> /dev/null ); then
exit 0 # Server is running
else
exit 1 # Server seems to have died
fi
else
exit 2 # No server running (ts3server.pid is missing)
fi
;;
log)
cat logs/*.log > /tmp/ts3.log
echo "/tmp/ts3.log";
exit 0
;;
*)
exit 0
;;
esac
"$DIR/ts3server_startscript.sh" start &
su -c "cd $DIR && $DIR/ts3server_startscript.sh start $1" - $USER
chown -R teamspeakuser:users teamspeak3-server_linux-x86
Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.
Als Dankeschön schalten wir deinen Account werbefrei.