PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : HowTo: TeamSpeak2 Server sicher aufsetzen mit MySQL



cfchris6
30.11.2007, 23:08
In diesem kleinen Tutorial/Überblick möchte ich zeigen, wie man einen TS2-Server sicher(er) machen kann, indem man die Passwörter nur verschlüsselt (für die exakten: Prüfsummen der Passwörter) ablegt und nicht wie standartmäßig in die SQLite DB schreibt, die mit den Rechten von TeamSpeak gelöscht werden kann. Wenn du also ein $cr!P7 k1ddy bist, was möglichst schnell viele Server 0v3r74k3n will, dann solltest du am besten -hier- aufhören, zu lesen.

Wie gesagt, es geht darum, einen TS2-Server abzusichern und nebenbei so einzurichten, dass er sich bequemer administrieren lässt. Das ganze ist für Linux geschrieben, ist aber prinzipiell für Windows genauso umsetzbar ebenfalls wie auf anderen *nix Systemen.
Fast jeder Server, der viele Benutzer zu verwalten hat, sei es für FTP oder Mail etc. lässt die Autorisierung nicht über /etc/passwd und andere verstreute Dateien laufen sondern mittels diverser Module oder gleich PAM zentral über MySQL, da dies die Verwaltung wesentlich einfacher macht. Genau aus diesem Grunde wird meine TS2-Server-Konfiguration ebenfalls über MySQL laufen.

Zu diesem Zweck wird zunächst ein neuer Benutzer und eine neue Datenbank angelegt:

CREATE USER 'ts2'@'localhost';
SET PASSWORD FOR 'ts2'@'localhost' = OLD_PASSWORD('<password>');
CREATE DATABASE `ts2` ;
GRANT ALL PRIVILEGES ON `ts2` . * TO 'ts2'@'localhost';
Die Datenbank kann leer bleiben, TeamSpeak erstellt die Tabellenstruktur selber. Das Spielchen mit OLD_PASSWORD ist notwendig, weil TeamSpeak2 eigentlich nicht für aktuelle MySQL Server Versionen gedacht ist, sondern afaik für 4.0x. So bekommt man es aber auch mit aktuellen Versionen zum laufen, ich selbst habe es mit 5.0.32 und 5.0.45 erfolgreich gemacht.

Aus dem gleichen Grund benötigt TeamSpeak2 auch ältere mysqlclient Libraries, nämlich libmysqlclient.so.10.0.0 und libmysqlclient_r.so.10.0.0 Um die zu bekommen hab ich mir unter ftp://ftp.wesmo.com/pub/contributed/RPMS/MySQL-shared-3.23.57-1.i386.rpm das RPM runter geladen und dann mit alien in ein tar.gz gewandelt, da ich Debian verwende. Das ist sicherlich nicht die beste Methode, funktioniert aber problemlos. Falls jemand der das hier nachvollzieht mal ein wenig Experimentierfreude besitzt, könnte er mal versuchen, ob man einfach Symlinks mit den alten Namen (also libmysqlclient.so.10, libmysqlclient.so.10.0.0, libmysqlclient_.so.10 und libmysqlclient_r.so.10.0.0) auf die neue Version der Libraries erstellen kann. Für alle, die es nicht wissen, die Bibliotheken gehören normalerweise nach /usr/lib

TeamSpeak kommt bei mir nach /opt/tss2_rc2, der Pfad ist im Prinzip frei wählbar, muss dann eben aber später überall angepasst werden. (wer hätts gedacht) Dorthin wird dass TeamSpeak Server-Archiv einfach entpackt und die neue Binary installiert. (Nicht unbedingt direkt diese Links nehmen, sondern über www.goteamspeak.com gehen, falls neue Updates rausgekommen sein sollten)

(sudo su)
cd /opt
wget ftp://ftp.freenet.de/pub/4players/teamspeak.org/releases/ts2_server_rc2_202319.tar.bz2
tar xjf ts2_server_rc2_202319.tar.bz2
rm ts2_server_rc2_202319.tar.bz2
cd tss2_rc2
rm server_linux
wget ftp://ftp.freenet.de/pub/4players/teamspeak.org/developer/server/202401/server_linux
chmod u+x server_linux teamspeak2-server_startscript

Bevor der Server das erste mal gestartet wird, müssen unbedingt noch die Konfiguration und die SQL-Abfragen bearbeitet werden. Im Verzeichnis tss2_rc2 erstellen wir eine Datei mit dem Namen server.ini mit folgendem Inhalt:

[DBEXPRESS]
sqldir=mysql_sql/
Drivername=mysql
Database=ts2
Hostname=127.0.0.1
User_name=ts2
Password=<password>
GetDriverFunc=getSQLDriverMYSQL
VendorLib=/usr/lib/libmysqlclient_r.so.10.0.0
LibraryName=./libsqlmy.so
Active=1
Da TeamSpeak aus Sicherheitsgründen nicht unter Root Rechten laufen sollte, wird ein neuer Benutzer angelegt, der dann auch gleich die Rechte bekommt:

(sudo su)
chmod -R o-r-w-x-X /opt/tss2_rc2
cd ..
useradd teamspeak
chown -R teamspeak /opt/tss2_rc2

Jetzt wechseln wir in das Verzeichnis mysql_sql, und ersetzen in folgenden Dateien ":sPassword" durch "md5(:sPassword)": edit_client.sql, new_client.sql, read_client_login.sql. Des weiteren ändern wir noch in create_clients.sql die Länge von dem Feld `s_client_password` auf 32 ab. Als letztes ändert man in read_servers.sql die Zeile zu "SELECT * FROM ts2_servers WHERE i_server_id > 0;" ab.
Wer das nicht alles selber machen will, der kann sich hier die Dateien fertig runter laden: http://anonym.to/?http://cfchris6.xail.net/mysql_sql.tgz

Das einzige was jetzt noch fehlt, ist ein echtes "Daemon Startscript" dazu erstellen wir als root die Datei /etc/init.d/teamspeak2 und öffnen sie in einenm Editor. Als Inhalt bekommt sie:
#!/bin/bash
su -c "cd /opt/tss2_rc2 && ./teamspeak2-server_startscript $1" teamspeak
exit 0
Jetzt die Datei noch ausführbar machen. Dann kann man mit "/etc/init.d/teamspeak2 start" als root den TeamSpeak2-Server starten, was normalerweise, wenn alles geklappt hat, mit einer Meldung ähnlich dieser quittiert werden sollte: "TeamSpeak Server Daemon started with PID ****". Daraufhin kann man sich mit "/etc/init.d/teamspeak2 passwords" noch die Passwörter anzeigen lassen, die für Admin und Superadmin generiert wurden.
Ergänzungen: Es ist günstig, ein alternatives Webinterface zu verwenden oder das Webinterface gleich ganz zu deaktivieren, da es standartmäßig nicht 100%ig sicher ist und die Administration per MySQL Shell oder PHP-MYADMIN genauso gut geht. Auch muss man nicht unbedingt md5 nehmen, sha1 oder anderes geht natürlich auch. Ich weiß zugegebenermaßen nicht, ob md5 auch von dem Standard DBMS (SQLite) unterstützt wird, über eine diesbezügliche Rückmeldung würde ich mich auch freuen.

Sollte dies auf euer Interesse stoßen, dass ihr es woanders auch posten wollt, schreibt einfach (c)by cfchris6 drunter und schickt mir ne pm. Und solltes euch nicht gefallen, dann könnt ihr einerseits gern konstruktive Kritik äußern oder es andererseits einfach ignorieren. :wink:

cya, chris