Kategorien
Linux

lokale MySQL Sicherung mit Logrotate

Logrotate kann falsch genutzt werden um eine lokale MySQL Sicherung zu erstellen.

“logrotate” ist ein sehr weit verbreitetes Linux Werkzeug welches mit den meisten Linux Distribuntionen vorkonfiguriert ausgeliefert wird.

Im Verzeichnis /var/log sind die Dateien nach dem folgenden Schema angeordnet.:

/var/log/auth.log
/var/log/auth.log.0
/var/log/auth.log.1.gz
/var/log/auth.log.2.gz
/var/log/auth.log.3.gz

Das ist wofür “logrotate” geschrieben wurde. Die Logdatei wird von /var/log/auth.log umbenannt zu /var/log/auth.log.0 und am folgenden Tag komprimiert und umbenannt in /var/log/auth.log.1.gz. Wenn mehr als vier sicherungen der Logdatei existieren werden überzählige Sicherungen gelöscht. Genau was eine lokale Datenbank-Sicherung erreichen soll.

Normalerweise mache ich meine MySQL Sicherungen mit einem Cronjob, der mir dann relativ schnell die Festplatte mit Datenbanksicherungen füllt. Da es die Aufgabe von “logrotate” ist Logdateien umzubenennen, zu komprimieren und alte Logdateien zu löschen eignet es sich auch sehr gut für eine kleine lokale Datensicherung.

Mit ein wenig chreativem falsch gebrauch des Werkzeugs “logrotate” kann es verwendet werden um MySQL Sicherungen zu rotieren.

Hier die Kurzanleitung wie ich dies erreicht habe:

Zuerst erstelle ich das Verzeichnis /var/backups/mysql/ in dem die Datensicherung der MySQL Datenbank angelegt werden soll.

Um den “logrotate” Deamon dazu zu bringen die Datenbank zu sicher erstelle ich die Datei /etc/logrotate.d/0-mysql-backup mit dem folgenden Inhalt:

/var/backups/mysql/database.sql {
     daily
     rotate 10
     missingok
     compress
     nocreate
     prerotate
          /usr/bin/mysqldump -uUSERNAME -pPASSWORD -A --events --single-transaction > /var/backups/mysql/database.sql
     endscript
}

Diese “logrotate” Konfigurationsdatei läuft täglich (daily), behält 10 Backups (rotate 10), läuft auch wenn die Datei nicht vorhanden ist (missingok), komprimiert die Daten mit dem in logrotate eingestellten Kompressionsalgorithmus (compress), erstellt im Anschluss keine neue Datei (nocreate) und erstellt vor dem lauf von “logrotate” den MySQL Dump.

Da Logrotate ohne vorhandene Datei nicht einmal den Befehl im Bereich prerotate ausführt muss die sicherungsdatei database.sql zuerst angelegt werden.

/usr/bin/touch /var/backups/mysql/database.sql

Ob wir alles richtig gemacht haben können wir auf der Shell testen.

/usr/sbin/logrotate -f -v /etc/logrotate.d/0-mysql-backup

Bei dieser Sicherung handelt es sich nicht um ein vollwertiges Backup da das Sicherungsverzeichnis /var/backups/mysql/ sich auf dem gleichen Computer (oder sogar auf der gleichen Festplatte) befindet auf der auch der MySQL Server selbst läuft. Hier kann natürlich auch vor der Sicherung das Verzeichnis gemounted werden.

Kategorien
Linux Raspberry Pi

Neuer Linux Kernel für Raspberry Pi

Manchmal brauche ich einfach das eine oder andere Kernel Modul welches sich nicht im Vanilla Kernel meines Rasbian befindet, oder ich möchte unbedingt einige Module loswerden oder ich will einen aktuelleren linux Kernel.
Um eines oder alle diese Ziele zu erreichen muss ein neuer Linux Kernel für den Raspberry Pi angefertigt werden. Hier die Kurzanleitung wie dies in fünf einfach Schritten zu schaffen ist.:

1.) Linux Kernel Quellen herunterladen

Um den Aktuellen Kernel übersetzen zu können brauchen wir einige Module. Um diese zu Installieren nutzen wir apt-get install.:

sudo apt-get install bc git build-essential

Um den “aktuellen” Linux Kernel zu bekommen holen wir über Git die Quellen:

git clone --depth=1 https://github.com/raspberrypi/linux

alternativ können wir auch einen aktuelleren Kernel (im Beispiel 4.5) holen lassen.:

git clone --depth=1 --branch=rpi-4.5.y https://github.com/raspberrypi/linux

und wechseln in das Installationsverzeichnis.

cd linux

2.) Default Konfiguration erstellen

Im Anschluss muss ich die default Linux Konfiguration für meinen Raspberry Pi erstellen, für Raspberry Pi 1 A oder B und das Compute Module:

KERNEL=kernel
make bcmrpi_defconfig

für den Raspberry Pi 2 geht dies über:

KERNEL=kernel7
make bcm2709_defconfig

3.) Kernel konfiguration anpassen (optional)

um die Konfiguration des Linux Kernels anzupassen bietet Linux die

make menuconfig

oder alternativ

make nconfig

4.) Kernel übersetzen

um den Kernel im Anschluss zu compilieren die folgenden Zeilen ausführen:

make zImage modules dtbs

5.) Kernel Installieren

sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img

Wenn der Kernel einen abweichenden Namen erhalten soll kann in der Datei config.txt die Zeile “kernel” für den verwendeten Kernel angepasst werden.:

kernel=meinKernel.img
Kategorien
Linux

Defekte Parallels Plesk MySQL Datenbank wiederherstellen

Manchmal geht die Plesk MySQL Datenbank beschädigt. Dies passiert häufig nach dem wiedereinspielen eines Backups auf VPower Server oder einem Stromverlust bei laufendem Server.

Mit ein paar einfachen Schritten kann jedoch das Backup, das Plesk selbst anlegt genutzt werden um Odin Plesk wieder in Funktion zu bringen.

MySQL Datenbank Stopen

sudo service mysql stop

MySQL Datenbank ohne Netzwerk und Benutzerverwaltung starten

sudo /usr/bin/mysqld_safe -–skip-grant-tables -–skip-networking --skip-syslog &

optional, so ohne Fehler überhaupt möglich, letztes Backup der tabellen

sudo mysqldump mysql --event > mysql.sql
sudo mysqldump psa > mysql.sql

MySQL Datenbanken ‘psa’ und ‘mysql’ entfernen

mysql
mysql> drop database psa;
Query OK, 220 rows affected (1.71 sec)

mysql> drop database mysql;
Query OK, 24 rows affected, 2 warnings (0.05 sec)

mysql> quit

MySQLdump aus /var/lib/psa/dumps/mysql.daily.dump.0.gz in die Datenbank einspielen

zcat /var/lib/psa/dumps/mysql.daily.dump.0.gz|mysql

MySQL Datenbank neu starten

sudo killall mysqld
sudo service mysql start
mysql start/running, process 8952
Kategorien
Forensik Linux security

Hostkeys und Moduli für sshd erneuern

Bei einem neu eingespielten Raspberry Pi Betriebssystem Image sollten die Hostkeys und die Moduli Datei des SSH Dienstes sshd ausgetauscht werden.

Die Hostkeys dienen der Authentifizierung des Servers und, zusammen mit der Moduli Datei, der Initialisierung der Verschlüsselung. Um die Verschlüsselung nicht angreifbarer zu halten als unbedingt notwendig sollten die Moduli und Keys für jeden Computer unterschiedlich sein.

1.) löschen der alten Hostkeys und der Moduli Datei von sshd

sudo rm /etc/ssh/ssh_host_key
sudo rm /etc/ssh/ssh_host_key.pub
sudo rm /etc/ssh/ssh_host_rsa_key
sudo rm /etc/ssh/ssh_host_rsa_key.pub
sudo rm /etc/ssh/ssh_host_dsa_key
sudo rm /etc/ssh/ssh_host_dsa_key.pub
sudo rm /etc/ssh/moduli

2.) Hostkey für sshd neu generieren

sudo /usr/bin/ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N ""
sudo /usr/bin/ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N ""
sudo /usr/bin/ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N ""
sudo /usr/bin/ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -C "" -N ""
sudo /usr/bin/ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -C "" -N ""

3.) Moduli Kandidaten für sshd generieren und wählen

# moduli kandidaten generieren

ssh-keygen -G moduli-2048.candidates -b 2048

# sichere kandidaten wählen

ssh-keygen -T moduli-2048 -f moduli-2048.candidates
cat moduli-2048 > /etc/ssh/moduli

Wenn jetzt, nach diesem Hostkey und Moduli Update eine Verbindung zu disem SSH-Server hergestellt werden soll wird die Fehlermedung “WARNING: POSSIBLE DNS SPOOFING DETECTED!” und die Fehlermeldung “WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!” angezeigt. Mit ssh-keygen kann der alte Hostkey aus der known_hosts Datei entfernt werden.:

ssh-keygen -R servername
Kategorien
Linux Windows

iperf nutzen die Netzwerkgeschwindigkeit zu ermitteln

TCP Netzwerk-Geschwindigkeit via iPerf zwischen einem Windows und einem Linux Server prüfen.

Unter Windows den iPerf-Server starten

C:\iperf>iperf.exe -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------

durch die Option -s startet iperf im Servermodus und lauscht auf Port 5001. Alternativ kann via -p oder –port ein Port angegeben werden auf dem iperf lauschen soll.

Unter Linux mit dem iPerf Client auf den Server zugreifen

[root@LinuxTest ~]# iperf -c 10.0.0.5
------------------------------------------------------------
Client connecting to 10.0.0.5, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  3] local 10.0.0.4 port 47326 connected with 10.0.0.5 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec   308 MBytes   258 Mbits/sec

Interval: Wie lange der Test ausgeführt wurde
Transfer: Welche Datenmenge übertragen wurde
Bandwidth: Die bei der Übertragung erreichte Bandbreite

Auch hier kann wieder mit der Option -p oder –port der Port angegeben werden den iperf verwenden soll.

iPerf startet dann eine Netzwerkverbindung zum angegebenen Server und überträgt Zufallsdaten.

iPerf ist aktuell für Windows, Linux, Android, MacOS X, FreeBSD, OpenBSD, NetBSD, VxWorks und Solaris verfügbar.

Download des Quellcodes unter https://iperf.fr/

Kategorien
Linux Video

Linux Desktop als Stream im Netzwerk bereitstellen

manchmal wünsche ich mir den Linux-Desktop riesengroß auf meinem Projektor im Wohnzimmer darzustellen. Meinen PC zum Projektor tragen, Steckdosen und langes HDMI Kabel suchen mag ich aber nicht. Da ich meinen Projektor jedoch über einen Raspberry Pi mit Kodi-Mediacenter betreibe kann ich mit Hilfe von avconv (oder, wer dies lieber mag, auch mit ffmpeg die Optionen sind die gleichen) das Audiosignal und Videobild vom meinem Desktop aufnehmen und das Ergebnis zum Kodi streamen.

X11 Desktop als Stream Aufnehmen

Den Aufgezeichneten Stream sende ich via VLC in mein lokales Netzwerk. Auf meinem XBMC erstelle ich dann eine neue Quelle, in der eine  STRM Datei liegt.

avconv -f alsa -ac 2 -i default -f x11grab -r 25 -s 1920x1080 -i :0.0 -acodec libmp3lame -vcodec libx264 -preset ultrafast -threads 0 -f mpegts - | vlc -I dummy - --sout='#std{access=http,mux=ts,dst=:37777}'

Die Audioquelle ist hier Alsa (-f alsa), über die ich den Stereoton (-ac 2) von dem Standard Audiogerät der gewählten Soundkarte (-i default) aufnehme.
Die Videoquelle ist der x11 Desktop (-f x11grab), deb ich mit einer Bildwiederholrate von 25 Bildern in der Sekunde (-r 25) und in der Auflösung des Desktops 1920×1080 Pixel aufnehme. Der Linux Desktop :0.0, dies ist der erste gestartete X11 Desktop, wird aufgenommen (-i :0.0).

Die Kompression der Audioaufnahme soll mit mp3 in den Standarteinstellungen erfolgen (-acodec libmp3lame), als Videocodec soll x264 (libx264) mit dem Preset “Ultrafast” und allen verfügbaren CPU Kernen um die Kompression zu verteilen. Die Ausgabe soll in einem MPEG TS Container erfolgen (-f mpegts).

Dann wird das Fertige Video an vlc übergeben (vlc -I dummy -) und an das Netzwerk ausgegeben.

den Stream Wiedergeben

Wenn der Stream auf dem Linux-PC gestartet wurde kann er im Kodi-Mediacenter mit Hilfe einer, folgend beschriebenen, STRM Datei geöffnet werden.

Die STRM Datei “Stream.strm” ist eine Textdatei, Sie enthält das Protokoll, die IP-Adresse des Streamenden Computers und den Port über den der Stream ausgegeben wird.:

http://192.168.0.13:37777
Kategorien
Forensik Linux

FTP Geschwindigkeit von der Linux Shell aus messen

Manchmal erscheinen FTP Server unglaublich langsam. Um einen realistischen Geschwindigkeits Test durchzuführen habe ich mir den Folgenden Weg überlegt.

1.) Testdateien erstellen

~]> dd if=/dev/urandom of=~/test1M count=1 bs=1M
1+0 Datensätze ein
1+0 Datensätze aus
1048576 Bytes (1,0 MB) kopiert, 0,170467 s, 6,2 MB/s
~]> dd if=/dev/urandom of=~/test10M count=10 bs=1M
10+0 Datensätze ein
10+0 Datensätze aus
10485760 Bytes (10 MB) kopiert, 1,15114 s, 9,1 MB/s

2.) Verbindung zum FTP Server herstellen

~]> ftp ftp.server.local
Connected to ftp.server.local.
220 FTP-Backupspace
Name (ftp.server.local:root): benutzer
331 Password required for benutzer
Password:
230 User benutzer logged in
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

3.) Die Testdateien zum Server übertragen

ftp> put test1M
local: test1M remote: test1M
200 PORT command successful
150 Opening BINARY mode data connection for test1M
226 Transfer complete
1048576 bytes sent in 0.12 secs (8661.7 kB/s)
ftp>
ftp> put test10M
local: test10M remote: test10M
200 PORT command successful
150 Opening BINARY mode data connection for test10M
226 Transfer complete
10485760 bytes sent in 1.81 secs (5655.2 kB/s)
ftp>

4.) Die Testdateien vom Server zurück übertragen

ftp> get test1M
local: test1M remote: test1M
200 PORT command successful
150 Opening BINARY mode data connection for test1M (1048576 bytes)
226 Transfer complete
1048576 bytes received in 0.11 secs (9278.0 kB/s)
ftp>
ftp> get test10M
local: test10M remote: test10M
200 PORT command successful
150 Opening BINARY mode data connection for test10M (10485760 bytes)
226 Transfer complete
10485760 bytes received in 1.13 secs (9039.9 kB/s)
ftp>

5.) Aufräumen

ftp> delete test1M
250 DELE command successful
ftp> delete test10
550 test10: No such file or directory
ftp> delete test10M
250 DELE command successful
ftp>
ftp> quit
221 Goodbye.
~]> rm test1M
~]> rm test10M

6.) Auswertung

Die Übertragung der Dateien erfolgte in meinem Beispiel mit mindestens (5655.2 kB/s) zum FTP Server und mit mindestens (9039.9 kB/s) vom Server zum Computer.

Wenn ihr einen Besseren Weg kennt die FTP Geschwindigkeit zu messen, meldet euch

Kategorien
Linux security

Webhosting Datei und Ordnerrechte korrigieren.

Da viele dubiose Anleitungen behaupten das in Webhosting Paketen, Dateien ungewöhnliche Rechte erhalten sollen. Die meisten Anleitung sind der Überzeugung das die einzigen gültigen Rechte für einen Ordner 777 seien, das jedem alles erlaubt sein soll.
Manchmal sollen auch völlig chaotische Dateirechte, möglichst kreativ vergeben werden.

Die meisten Provider geben jedoch die Rechte 644 für Dateien und 755 für Ordner vor. Häufig werden, wenn “andere” Schreibrechte bekommen auch die Aufrufe über http blockiert, ein freundliches “403 Forbidden” wird dann den Besuchern angezeigt.

Dieses Rechtegewirr kann jedoch durch 3 einfache Zeilen in der Linux Shell schnell wieder behoben werden.

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
find . -name .ht* -exec chmod 640 {} \;

 

Kategorien
Linux

Raspberry Pi 2 – Arch Linux Installation aus einem Linux System

Vorbereiten der SD-Karte. Ersetze sdX in den folgenden Schritten durch den entsprechenden Namen des Gerätes unter dem deine SD-Karte in Linux erschienen ist. (leicht über dmesg|tail direkt nach Anschluss der SD-Karte zu finden)

  1. Starte fdisk um die SD-Karte zu partitionieren:
    sudo –s # um alle folgenden Schritte als Benutzer root auszuführen
    fdisk /dev/
    sdX
  2. In der fdisk Eingabe lösche die alten Partitionen und erstelle die neuen:
    1. Der Befehl o löscht alle Partitionen auf der Karte.
    2. p zeigt alle vorhandenen Partitionen an. Es sollte keine mehr existieren
    3. Wähle n, für neue Partition, dan p für primäre Partition, im Anschluss 1 für die erste Partition, danach ENTER um den ersten Sektor zu bestätigen und +100M für den letzten Sektor.
    4. Im Anschluss t, danach c um den Typ der Partition auf „W95 FAT32 (LBA)“ zu setzen.
    5. Drücke n, dan p im Anschluss 2 für die zweite Partition dann ENTER zwei mal um sowohl den ersten als auch den letzten Sektor zu bestätigen.
    6. Schreibe die Partitionstabelle und verlasse das Programm mit w.
  3. Erstellen des ext4 Dateisystems:
    mkfs.ext4 /dev/sdX2
    mkdir /mnt/root
    mount /dev/sdX2 /mnt/root
  4. FAT-Dateisystem erstellen und mounten:
    mkfs.vfat /dev/sdX1
    mkdir /mnt/root/boot
    mount /dev/sdX1 /mnt/root/boot
  5. Lade die ArchLinux Distribution auf das root Dateisystem:
    wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz
    tar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C /mnt/root
    sync
  6. Die beiden Partitionen unmounten:
    umount /mnt/root/boot /mnt/root

Jetzt ist die SD-Karte bereit für den Raspberry Pi. Nach dem Anschluss von Netzwerk und 5V-Stromversorgung startet er ArchLinux.
Eine Verbindung ist über angeschlossenen Monitor und Tastatur, SSH und Serielle Konsole möglich.
Der Benutzername des default Benutzers ist „alarm“ sein Passwort lautet „alarm“.
Das root-Password lautet „root“.

Kategorien
Linux

head und tail – Anfang und Ende

head bei einer Eingabedatei mit 100 durchnummerierten Zeilen:

head <(seq 1 100)

Ausgabe:

1
2
3
4
5
6
7
8
9
10

tail bei einer Eingabedatei mit 100 durchnummerierten Zeilen:

tail <(seq 1 100)

Ausgabe:

91
92
93
94
95
96
97
98
99
100

Head zeigt beim Aufruf die ersten 10 Zeilen der angegebenen Datei an, Tail die letzten 10 Zeilen.

Optionen

Mit der Option -n [Zahl] lässt sich die Ausgaben von head als auch von tail auf “Zahl”-Zeilen begrenzen.

Mit der Option -f lassen sich die Ausgabe tail fordlaufend, um neu an die Datei angehängte Zeilen vergrößern.

zurück zum Hauptartikel