Autostart Debian 6.0

Turas

Grünschnabel
hallo Leute

ich probiere seit gersten ein Autostart Script für einen TeamSpeak Server zu erstellen.

Diese Script habe ich unter /etc/init.d/ gespeichert mit dem Namen teamspeak-server.
Code:
#!/bin/bash
cd /home/teamspeak/

case "$1" in
	start)
		exec su -c "sh ./ts3server_startscript.sh start" teamspeak 
		;;
	stop)
		exec su -c "sh ./ts3server_startscript.sh stop" teamspeak
	;;
	restart)
		exec su -c "sh ./ts3server_startscript.sh restart" teamspeak
	;;
	*)
		echo "Usage: $0 {start|stop|restart}"
		exit 1
esac
exit 0
Das Script habe ich mit den benötigten Rechten versehen und getestet (mit Erfolg).

Zudem haben ich mit
Code:
ln -s /etc/init.d/teamspeak-server /etc/rc5.d/S24teamspeak-server
einen Soft-Link erstellt.

Nun zu dem Problem: Der Server startet nicht bei einem Reboot.
Zudem habe ich noch eine Frage: Wo kann man die Log Datei vom Bootvorgang einsehen?

Gruß Marvin
 
Zuletzt bearbeitet:
Hi,

die Symlinks würde ich nicht manuell erstellen, verwende hierzu das Programm "update-rc.d".
Beispiel:
Bash:
update-rc.d teamspeak-server defaults

Eine Logdatei für den Bootvorgang gibts meines Wissens nach nicht, nur die Ausgaben in der /var/log/messages und /var/log/syslog.

// Edit: Habe mir da auch mal ein Script gebastelt, sperrt den Server auch in ein chroot:
Bash:
#!/bin/bash

### BEGIN INIT INFO
# Provides:          teamspeak
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Should-Start:      ts3server_linux_x86
# Should-Stop:       ts3server_linux_x86
# Short-Description: start teamspeak 3 server inside a chroot
### END INIT INFO

VERSION="$( readlink /opt/ts3 )"

CHROOT=/opt/ts3/
PID_FILE=/var/run/ts3.pid
USER=ts3
GROUP=ts3
DAEMON=/start.sh
DESC="Teamspeak3 Server"
DAEMON_ARGS="inifile=/ts3/ts3server.ini"

. /lib/lsb/init-functions

function d_unmount() {
        if [ "$( mount | grep "${VERSION}" )" != "" ]; then
                umount ${CHROOT}dev/random
                umount ${CHROOT}dev/urandom
                umount ${CHROOT}dev/shm
                umount ${CHROOT}tmp
        fi
}

function d_check_mounts() {
        if [ ! -e ${CHROOT}dev/null ]; then
                mknod ${CHROOT}dev/null c 1 3
                chmod 666 ${CHROOT}dev/null
        fi
        if [ ! -e ${CHROOT}dev/zero ]; then
                mknod ${CHROOT}dev/zero c 1 5
                chmod 666 ${CHROOT}dev/zero
        fi
        if [ "$( mount | grep "${VERSION}" )" == "" ]; then
                mount -o bind /dev/random ${CHROOT}dev/random
                mount -o bind /dev/urandom ${CHROOT}dev/urandom
                mount -t tmpfs -o size=16K,noexec tmpfs ${CHROOT}dev/shm
                mount -t tmpfs -o size=8M,noexec,mode=1777 tmpfs ${CHROOT}tmp
        fi
}

case "${1}" in
        start)
                d_check_mounts
                log_begin_msg "Starting ${DESC}..."
                start-stop-daemon -S -p ${PID_FILE} -g ${GROUP} -c ${USER} -r ${CHROOT} -b -m --exec ${DAEMON} -- ${DAEMON_ARGS}
                log_end_msg $?
                ;;
        stop)
                log_begin_msg "Stopping ${DESC}..."
                start-stop-daemon -K -p ${PID_FILE} -r ${CHROOT} ${DAEMON}
                log_end_msg $?

                sleep 5

                rm -f ${CHROOT}${PID_FILE}
                d_unmount
                ;;
        restart)
                $0 stop
                sleep 5
                $0 start
                ;;
        status)
                status_of_proc -p ${PID_FILE} $DAEMON "$DESC" && exit 0 || exit $?
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}" >&2
                exit 1
                ;;
esac

exit 0

Falls du weitere Infos zum Chroot brauchst, kann ich dir gerne helfen auch eins aufzubauen.

Grüße,
BK
 
Zuletzt bearbeitet:
hey

danke für deine schnelle Antwort. Ich habe jetzt den Befehl
Code:
update-rc.d teamspeak-server defaults
ausgeführ und jetzt startet der Server auch automatisch.

Ich hatte den Befehl vorher auch schon benutzt aber immer mit einem Start Wert 24.

Jetzt habe ic noch eine Frage: In wiefern ist das Script von dir besser bzw. wo liegen die Vorteile?

Gruß Marvin

EDIT:

Ich erhalte jetzt immer die Meldung
Code:
insserv: warning: script 'K01teamspeak-server' missing LSB tags and overrides
 
Zuletzt bearbeitet:
Hi,

die Meldung bedeutet, dass dein Script keine LSB Infos im Kopfbereich hat.
Bei mir alles zwischen "BEGIN INIT INFO" und "END INIT INFO" als Kommentar. Da das alte SysV ja mittlerweile deprecated (veraltet) ist, wird nun langsam auf das neuere Upstart umgestellt. Damit die Umstellung keine Probleme macht (ist ja ein komplett neuer Ansatz) werden jetzt in der Übergangsphase die alten init.d-Scripte um die notwendigen Informationen zum Umzug erweitert. Wenn diese fehlen, dann wird diese Meldung geworfen.

Der Vorteil bei meinem Script ist, dass der Teamspeak-Server:
a) nicht als Root ausgeführt wird
b) in einem eigenen Chroot läuft
c) größtenteils wie andere init-Scripte funktioniert

A und B sind vorallem aus Sicherheitsgründen sehr zu empfehlen, vorallem bei Dritt-Programmen wo der Quelltext nicht offen verfügbar ist. Habe keine Lust darauf, dass mir wegen eines Exploits für TS3 der Server gehackt wird.
C ist hauptsächlich für das Verständnis gut, die verwendeten Programme und der Aufbau des Scripts ist quasi standartisiert.

Grüße,
BK
 
Zuletzt bearbeitet:
Hallo

Ist man nicht sicher vor einem Exploits wenn der Server auf einem neuen User liegt ? Weil ich habe den ja unter dem User teamspeak laufen
 
Hi,

Der user bietet nur bedingten Schutz. Wenn er es schafft, sich eine Shell zu öffnen und Befehle auszuführen, dann ist es nur noch eine Frage der Zeit bis er root-Rechte hat. Im chroot hat er halt das Problem, dass darin wirklich nur das nötigste liegt um den TS-Server laufen zu lassen. Somit bietet das chroot keine so große Angriffsfläche.

Grüße,
BK
 
Zurück