Mein Artikel „Debian Backup mittels Paketlisten & MySQL Dumps & FTP Upload“ wurde soeben aktuallisiert. Das Script passt nun die Prozess und I/O Priorität für den eigenen Prozess an um den Server nicht bei seinen regulären Arbeiten zu behindern und verschlüsselt das Backup auf Wunsch mit GnuPG.

Zum Artikel gehts mit diesem Link: Verschlüsseltes Debian Backup

Keine Kommentare »
 

Wenn man sich in der Shell nicht auf die Finger schauen lassen will kann mit dem Kommando

unset HISTFILE

abhilfe schaffen. Der Befehl deaktiviert die Shell History (den Verlauf) für die aktuelle Sitzung. Beim neu Einloggen ist der Standard wiederhergestellt und die Shell History wieder aktiviert.

Keine Kommentare »
 

Torrents mit dem eigenen Server herunterzuladen ist nicht nur schonend für die eigene Leitung Zuhause sondern schont ebenso die Internet Leitungen der Open Source Projekte von dessen HTTP Servern der Download ansonsten stattfinden würde. Aus diesem Grund lade ich seit längerem größere Dateien gerne über die, sofern vorhanden, verfügbaren Torrent Quellen herunter. Dazu verwende ich den Konsolen basierenden Bittorrent Client Bittornado im Zusammenspiel mit dem allseits bekannten Screen.

Die Installation beider Komponenten gestaltet sich unter Debian oder Ubuntu sehr einfach. Ein kurzes

apt-get install bittornado screen

reicht aus um die Installation auszuführen. Für andere Distributionen empfehle ich die Programme über den jeweiligen Paketmanager zu installieren. Ein compilieren der Quellcodes ist meiner Meinung nach zu aufwändig.

Zum starten des Bittornado Daemons aus der Shell verwende ich ein kleines von mir geschriebenes Script. Dieses macht es möglich den UNIX Benutzer, das Download Verzeichnis sowie die maximale Anzahl von Uploads und die Uploadbandbreite festzulegen. Ich limitere den Upload um nicht zu viel Traffic zu erzeugen. Der Benutzer wird festgelegt um bei einer Exploitmöglichkeit für Bittornado keine umfassenden Angriffspunkte am System zu bieten. Sehr interessant ist hierbei auch das Bittornado in der Programmiersprache Python geschrieben ist. Dadurch wird etwas mehr Speicher und Rechenzeit benötigt. Was für mich keine Relevanz hat. Im Gegenzug können keine Buffer Overflows auftreten.

#! /bin/sh
 
##
## <Configuration>
##
 
USER="webservices"
 
DIR="/home/webservices/incoming/"
 
MAX_UPLOADS="6"
 
MAX_UPLOAD_BANDWIDTH="14"
 
##
## </Configuration>
##
 
screen -AmdS bittornado su ${USER}  -c "btlaunchmanycurses ${DIR}  --minport 50000 --maxport 55000 --max_uploads ${MAX_UPLOADS} --max_upload_rate ${MAX_UPLOAD_BANDWIDTH}"

Das Script wird mit

chmod +x <SCRIPTNAME>

lauffähig gemacht und mit

./<SCRIPTNAME>

aufgerufen. Das Vorgehen ist bei allen Scripten unter UNIX Systemen gleich. Auch mein Script stellt da keine Ausnahme da. Der im Script hinterlegte Benutzer und das Verzeichnis musst du vorher natürlich noch für dein System anpassen. Nach dem Aufruf des Scriptes passiert scheinbar nichts. Im Hintergrund wurde jedoch eine Screen Sitzungen mit Bittornado gestartet.

Um einen Download zu starten muss eine gültige .torrent Datei in das im soeben gestartete Script angegebene Verzeichnis verschoben werden. Kurze Zeit später beginnt der Download des Torrents in Bittornado. Der aktuelle Stand der Downloadvorgänge kann mit

screen -r

oder, falls mehere Screen Sitzungen zur selben Zeit aktiv sind mit

screen -r bittornado

abgefragt werden. Wichtig ist es hierbei die Download Übersicht über screen mit strg + a und dem anschließendem Drücken der d Taste zu schließen. Ein eingeben der Tastenkombination strg + c würde Bittornado umgehend beenden und den Download abbrechen.

Den fertigen Dowload findest du im Download Verzeichnis neben den .torrent Dateien.

Natürlich könnte Bittornado auch mit dem manuellen eintippen der Befehle ohne das Startscript auf die selbe Art und Weise gestartet werden. Diese Arbeit möchte niemand antun. Insbesondere nicht ich. Ich denke mein Startscript für Bittornado ist mehr als hilfreich.

Keine Kommentare »
 

Shellzugriff aus dem Browser heraus ist nicht nur geschickt sondern in streng konfigurierten Netzwerken auch die einzige Möglichkeit Shellzugriff auf den Server zu bekommen. Hierfür kann ich dir PHP Shell empfehlen. Shellkommandos lassen sich damit ausführen und die Ergebnisse der Kommandos ansehen.

Leider lassen sich Programme wie Nano mit der PHP Shell nicht ausführen. Autovervollständigung mittels TAB unterstützt das Shell Werkzeug ebenfalls nicht.

Neben dem starten des PHP Shell Scriptes als root ist es eine weitere Vorraussetzung „Safe Mode“ zu deaktivieren und das Ausführen der Funktion proc_open() zu erlauben.

Ich kann euch diese kleine Webapplikation nur ans Herz legen.

Links:

Keine Kommentare »
 

Jeder Daemon auf einem Linux System führt eine Log Datei im Verzeichnis /var/log. Ab einer gewissen Laufzeit finden sich dort mehere Megabyte an archivierten Log Dateien. Das händische löschen von archivierten Log Datein ist eine nervige Sache. Um mir Nerven und Zeit zu ersparen habe ich mir ein Script geschrieben das mir diese Arbeit abnimmt.

#!/bin/sh
 
## Logfile
LOGFILE="/var/log/cleanup.log"
 
find /var/log/ -iname *.gz -type f -exec rm -fv {} ; >> $LOGFILE 2>&1
 
if [ $? -ne 0 ]; then		
	exit 1
else	
	exit 0
fi

Das Script sucht mit „find“ im Verzeichnis /var/log nach archivierten Log Dateien (Dateien mit der Endung .gz) und entfernt diese. Ironischer Weise legt das Script ebenfalls eine Log Datei an (/var/log/cleanup.log) in der gelöschte Dateien und Probleme niedergeschrieben werden.

Keine Kommentare »
 

Auf der Suche nach einem Backup Shell Script für meinen Debian Server wurde ich in den weiten des Internets nicht fündig. Zumindest fand ich kein Script das genau das tat was ich wollte. Also machte ich mich selbst ans Werk. Vorweg: Das Script erstellt nicht einfach eine simple Kopie des Festplatteninhalts. Dies verbraucht meiner Meinung nach zu viel Speicherplatz. Sämtliche Debian Binarys müssen nämlich nicht gesichert werden. Denn diese sind von den Servern aus der sources.list abrufbar. Einzig und allein die Binarys unter /usr/local/ werden, neben den Konfigurationsdateien unter /etc/ und den Dateien unter /var/ /home/ und /root/, gesichtert. Natürlich können diese Verzeichnisse geändert werden. Es reicht die Variable TOBACKUP im Konfigurationsteil des Scriptes um die entsprechenden Verzeichnisse zu erweitern oder mit Hilfe der Variable TOEXCLUDE Unterverzeichnisse vom Backup auszuschließen. Die Kernel Version, Distribution, Architektur und der Installationszeitpunkt des Systems werden nochmals seperat in der Datei uname.txt gesichert.

Ebenso erstellt das Script SQL Dumps von allen MySQL Datenbanken des Servers und läd das gesamte Backup, verschlüsselt oder nur komprimiert, optional auch auf einen FTP Space übertragen. Wichtig ist das das Verzeichnis das in OUTDIR eingetragen ist exisitert. Sowohl bei lokalem speichern des Backups als auch beim remote Backup Vorgang auf den FTP Space. Eine Übertragung auf einen FTP Backup Space erfolgt nur, wenn FTP Zugangsdaten hinterlegt sind. Sollte etwas in die Option BACKUPPASS eingetragen sein verschlüsselt das Script die Daten mit GnuPG.

Die Kommentare im Script habe ich in englisch gehalten. Damit sollte eigentlich jeder zurecht kommen und ich muss das Script nicht mehrsprachig kommentiert online stellen. Auf alle Konfigurationsoptionen möchte ich hier im Text nicht weiter eingehen. Die Variablenbezeichnungen sowie die Kommentare sollten alles erklären.

#!/bin/sh
 
##
## <Configuration>
##
 
## Backup prefix
PREFIX="yourprefix_"
 
## Dirs which should be backed
TOBACKUP="/root/ /home/ /etc/ /var/ /usr/local/"
 
## Dirs which shouldn't be backed
TOEXCLUDE="/yourdirstoexclude/"
 
## MySQL login data
MYSQLUSER="yoursqluser"
MYSQLPASS="yoursqlpass"
MYSQLHOST="yoursqlhost"
 
## Dir to save backup
OUTDIR="yourdirtosave"
 
## FTP login form the backup FTP server (optional)
FTPHOST="optionalyourftphost"
FTPUSER="optionalyourftpuser"
FTPPASS="optionalyourftppss"
 
## Backup password (optional)
BACKUPPASS="optionalyourpassword"
 
## Working dir
WORKINGDIR="/tmp/"
 
## Logfile
LOGFILE="/var/log/${PREFIX}backup.log"
 
##
## </Configuration>
##
 
if [ -n "$OUTDIR" ]; then
 
	## Set prozess priority
	renice -19 -p $$ 1> /dev/null 2>> $LOGFILE
 
	## Set I/O priority
	ionice -c2 -n1 -p $$ 1> /dev/null 2>> $LOGFILE
 
	## Date and time
	DATE=$(date "+%Y-%m-%d-%H-%M-%S")
 
	## Create and enter working dir
	mkdir ${WORKINGDIR}${PREFIX}${DATE}
	cd ${WORKINGDIR}${PREFIX}${DATE}
 
	## Save version
	uname -a > "uname.txt"
	TOBACKUP="${TOBACKUP} uname.txt"
 
	## Create a list with installed deb pakets
	dpkg --get-selections > "deb.list"
	TOBACKUP="${TOBACKUP} deb.list"
 
	## Create MySQL dump environment
	mkdir mysqldumps/
	TOBACKUP="${TOBACKUP} mysqldumps/"
 
	## Create MySQL dumps from all databases
	DBS="$(mysql  -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS -Bse 'show databases' 2>> $LOGFILE)"	
	if [ $? -ne 0 ]; then
 
		## Delete temporary files
		rm -r ${WORKINGDIR}${PREFIX}${DATE}
		exit 1
	fi
	for DB in $DBS; do
		mysqldump --skip-lock-tables -h $MYSQLHOST -u $MYSQLUSER -p$MYSQLPASS $DB > "mysqldumps/${DB}.sql"
	done
 
        ## Exclude dirs
	if [ -n "$TOEXCLUDE" ]; then
 
		TOEXCLUDE="--exclude ${TOEXCLUDE}"
	fi
 
	## Compress and / or encrypt files
	if [ -n "$BACKUPPASS" ]; then	
 
		VAR_EXTENSION=".tar.bz2.gpg"
		tar -cf - $TOBACKUP $TOEXCLUDE 2> /dev/null | gpg --symmetric --bzip2-compress-level 9 --passphrase ${BACKUPPASS}  > "${PREFIX}${DATE}${VAR_EXTENSION}"
	else
 
		VAR_EXTENSION=".tar.bz2"
		tar -cf - $TOBACKUP $TOEXCLUDE 2> /dev/null | bzip2 -c --best > "${PREFIX}${DATE}${VAR_EXTENSION}"
	fi
 
	if [ -n "$FTPHOST" ] && [ -n "$FTPUSER" ] && [ -n "$FTPPASS" ]; then
 
		## Save backup on FTP server
		ncftpput -u $FTPUSER -p $FTPPASS $FTPHOST $OUTDIR "${PREFIX}${DATE}${VAR_EXTENSION}" 2>> $LOGFILE
 
	else
 
		## Save backup lokal
		cp "${PREFIX}${DATE}${VAR_EXTENSION}" "$OUTDIR" 2>> $LOGFILE
	fi
 
	## Delete temporary files
	rm -r ${WORKINGDIR}${PREFIX}${DATE}
 
	if [ $? -ne 0 ]; then		
		exit 1
	else	
		exit 0
	fi
else
	echo "Error: Output dir is empty" >> $LOGFILE 
	exit 1
fi

Der Name des komprimierten Backups setzt sich wie folgt zusammen: %Präfix%%Jahr%-%Monat%-%Tag%-%Stunde%-%Minute%-%Sekunde%.tar.bz2. Die Log Datei des Scripts findest du unter /var/log/%Präfix%backup.log. Enthalten sind dort Statistiken und Fehler zur FTP Übertragung sowie kritische Konfigurationsfehler.

Im Script werden Prozess und I/O Priorität angepasst um den Server nicht an seiner regulären Arbeit zu hindern. Beachte dabei das ein Ausführen von nice nur mit root Rechten möglich ist.

Mögliche Probleme mit Paketabhängigkeiten sollten sich nach dem erfolgreichen ausführen dieses Befehls erledigt haben:

sudo apt-get install ncftp bzip2 gnupg

Sowohl date als auch tar, nice, ionice dpkg und mysql / mysqldump sind normalerweise auf dem Server vorhanden.

Bei Fragen oder Problemen scheue nicht die Kommentarfunktion zu verwenden.

17 Kommentare »