Festplatte kopieren

Aktuelle Festplatten haben einen Selbstmonitoring (S.M.A.R.T) eingebaut. Mit den SMART-Tools kann man die Informationen abfragen.

sudo apt install smartmontools

Nach der Installtion können wir die akutellen Werte von SMART abfragen.

sudo smartctl -A /dev/sda

Meine Festplatte zeigt an, das es zu einem Fehler kommen wird. So ein Hinweis sollte ein Weckruf sein. Es wird höchste Zeit, die Festplatte zu gegen ein neueres Modell zu tauschen.

Wenn man eine Festplatte kopieren möchte, kann man natürlich dd if=/dev/sda of=/dev/sdb verwenden. Besser geht es mit dem Programm ddrescue.

sudo apt install ddrescue

Wir kopieren von der Quelle /dev/sda auf das Ziel /dev/sdb.

sudo ddrescue /dev/sda /dev/sdb

Quellen: SMART Wiki, Wiki gddrescue

Ungenutzte Pakete entfernen

Über die Zeit können sich unter Ubuntu einige überflüssige Paket ansammeln. Mit dem Programm Deborphan kann man die verweisten Bibliotheken anzeigen.

Die Installation ist mit einem Kommando erledigt.

sudo apt install deborphan

Mit dem Aufruf werden alle Paket ohne Verwendung angezeigt.

deborphan

Es gibt auch ein Programm zu Löschung dieser Pakete.

sudo orphaner

Kernel Module entfernen und RAM sparen

Mit einer kleinen Änderung kann man „etwas“ Speicher einsparen. Wer einen Raspberry Pi mit dem Ubuntu Image betreibt, kann ein paar Megabyte RAM sparen. Im normalen Betrieb von Ubuntu spiel diese Änderung keine Rolle.

In der Datei initramfs.conf wird einen Wert geändert.

sudo vim /etc/initramfs-tools/initramfs.conf

Den Defaultwert wird von MODULES=most in MODULES=dep geändert.

Anschließend wird ein Update des initramfs-Image erstellt.

Wir können es für den aktuellen Kernel erstellen.

sudo update-initramfs -u

Oder für alle vorhandenen Kernel ein neues Image erstellen.

sudo update-initramfs -uk 'all'

Nach einem Neustart werden nur alle notwendigen Kernel Module geladen.

Ubuntu Mainline Kernel 5.0.4 installation

Für Ubuntu gibt es die aktuellen Kernel als Package. Wir wollen den aktuellen Kernel 5.0.4 auf einem Xenial Xerus (Ubuntu 16.04) mit 64 Bit CPU installieren. Im Verzeichnis von Ubuntu finden wir weitere Plattformen (AMD64, i386, armhf, arm64, usw).

Für die Installion brauchen wir die Pakete für den Kernel (linux-image-unsigned) und die Modulle (linux-modules).

Mit diesem Script installieren wir Kernel 5.0.4 auf einem Ubuntu mit 64Bit CPU.

#!/bin/sh
URL=https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.0.4/
KERNEL=linux-image-unsigned-5.0.4-050004-generic_5.0.4-050004.201903231634_amd64.deb
MODULES=linux-modules-5.0.4-050004-generic_5.0.4-050004.201903231634_amd64.deb
 
wget -P /tmp $URL/$MODULES
wget -P /tmp $URL/$KERNEL
 
sudo dpkg -i /tmp/$MODULES
sudo dpkg -i /tmp/$KERNEL

Nach dem Neustart wird der Kernel 5.0.4 verwendet, obwohl Ubuntu 16.04 (LTS) nur den Kernel 4.15 (linux-generic) enthält. Achtung, der Mainline Kernel 5.0.4 erhält keine Sicherheitspatches. Die Portierung von Sicherheitspatches in Xenial erfolgt nur im offiziellen Kernel mit Long Term Support (LTS).

Quelle: Kernel Wiki, Mainline Kernel, Changelog Kernel 5.0

Dateien verschlüsseln

Wenn man Dateien in die Cloud überträgt, sollte man die Daten verschlüsseln. Mit GoCryptFS werden die Inhalte und Dateinamen verschlüsselt.

Die Anwendung ist schnell installiert.

sudo apt install gocryptfs

Jetzt sollte GoCryptFS arbeiten.

gocryptfs -version

Wir legen zwei Verzeichnisse für die Daten an.

mkdir cipher plain

Zuerst müssen wir die Verschlüsslung initialisieren.

gocryptfs -init cipher

Jetzt kann man ein Mount im Verzeichnis ./plain/ durchführen.

gocryptfs cipher plain

Die verschlüsselten Daten liegen im ./cipher/ Verzeichnis und die entschlüsselten Daten im ./plain/ Verzeichnis.

Als Test können wir die Datei „text.txt“ mit dem Inhalt „Hallo“ erzeugen.

echo "Hallo" > ./plain/test.txt

Im ./cipher/ Verzeichnis liegen jetzt drei Dateien (gocryptfs.conf,
gocryptfs.diriv, 911XXX_XYZ).

ls -l ./cipher/

Mit Umount kann man das Dateisystem wieder trennen.

SSH mit Zwei Faktor Authentifizierung

Wir möchten unsere SSH Zugang mit einer Zwei Faktor Authentifizierung absichern.

Zur Erzeugung des zweiten Faktor verwenden wir ein Smartphone mit der App FreeOTP oder Google Authenticator. Diese Apps generieren ein Token, welcher nur für eine bestimmte Zeit gültig ist. Damit wir der SSH Zugang zusätzlich abgesichert.

Zuerst müssen wir das SSH Modul für Google Authenticator installieren.

sudo apt install libpam-google-authenticator

Jetzt müssen wir den Server mit der App verbinden. Dazu rufen wir die Anwendung als Benutzer auf.

google-authenticator

Den QS Code können wir mit dem Smartphone in der App Google Authenticator einlesen. Die Emergency Codes sollten wir uns an einem sicheren Ort speichern.

Die Frage können wir mit Yes, Yes, Yes, No, Yes beantworten.

Do you want authentication tokens to be time-based (y/n) y
Do you want me to update your "/home/user/.google_authenticator" file (y/n)? y
 
The app provides you with a secret key, verification code, and recovery codes. Keep these in a secure, safe location. The recovery codes are the only way to access your server if you lose your mobile phone.
 
Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, tokens are good for 30 seconds. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. If you experience problems with poor time synchronization, you can increase the window from its default size of +-1min (window size of 3) to about +-4min (window size of 17 acceptable tokens). 
Do you want to do so? (y/n) n
 
If the computer that you are logging into isn't hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Das PAM Modul muss noch konfiguriert werden.

sudo vim /etc/pam.d/sshd

Ende der Datei fügen wir eine Zeile hinzu.

auth required pam_google_authenticator.so

In den Einstellungen vom SSH-Server müssen ggf. noch Einstellunge geändert werden.

sudo vim /etc/ssh/sshd_config

Prüfen Sie ob diese Werde gesetzt sind.

ChallengeResponseAuthentication yes
PasswordAuthentication no

Nach dem Neustart vom SSH-Server sollte die Zwei Faktor Authentifizierung arbeiten.

sudo systemctl restart sshd.service

Apache2 status Error www-browser not found

Man kann den Status eines Apache Server per Kommandozeile abfragen.

apachectl status

Dabei erhalten Sie jedoch diese Fehlermeldung:

/usr/sbin/apachectl: 113: /usr/sbin/apachectl: www-browser: not found
'www-browser -dump http://localhost:80/server-status' failed.
Maybe you need to install a package providing www-browser or you
need to adjust the APACHE_LYNX variable in /etc/apache2/envvars

Um den Fehler zu beheben, müssen wir noch ein Text-Browser installieren.

sudo apt install w3m

Systemd DNS Resolver

Wenn die Namensauflösung mit Systemd nicht richtig funktioniert, dann muss man vielleicht einen Resolver manuelle einrichten.

Zuerst legen wird das Verzeichnis an.

sudo mkdir /etc/systemd/resolved.conf.d/

Jetzt hinterlegen wird den DNS Resolver.

sudo vim /etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=1.1.1.1 8.8.8.8
DNSSEC=true
DNSOverTLS=opportunistic

Nach einem Neustart von Systemd-resolver sollte die Namensauflösung wieder funktionieren.

sudo systemctl restart systemd-resolved

Spracheinstellung von Ubuntu und Debian auf Deutsch umstellen

Wir wollen die Sprache von Englisch auf Deutsch in Ubuntu oder Debian ändern.

Dazu installieren wird die Sprachen.

sudo apt install locales

Wir können uns die aktuellen Einstellung ansehen.

locale -a

Sollte die Sprache „Deutsch“ mit UTF-8 nicht nicht erzeugt sein, so sollten wir es jetzt vornehmen.

sudo locale-gen de_DE.UTF-8

Die Einstellungen für die Sprache können wir mit einem grafischen Tool einfach ändern.

sudo dpkg-reconfigure locales

Nach der Umstellung sollten nur Einträg welche ausgewählt wurden in der Datei enthalten sein.

cat /etc/locale.gen

de_DE.UTF-8 UTF-8

Für unsere Umgebung müssen wir ggf. noch die Einstellungen hinterlegen.

sudo vim /etc/environment

LC_ALL=de_DE.UTF-8
LANG=de_DE.UTF-8

Nach dem Update sollten alle Einstellung wie Datum und Währung und Sprache auf Deutsch umgestellt sein.

sudo update-locale

Diese Anleitung funktioniert mit Debian und Ubuntu.

Apache mit http/2 auf Ubuntu Server 18.04

Durch die Verwendung von HTTP/2 wird die Verbindung bei SSL/TSL Verbindungen stark beschleudingt. Wir müssen den Apache2 für die Verwendung von HTTP/2 umstellen.

Hinweis: Das Modul mod_php verwendet das Prozessmodul mpm_prefork. Um das Protokoll HTTP/2 zu verwenden, müssen wir auf das Prozessmodul mpm_event mit FastCGI umstellen.

Die Installation von Apache2 und PHP7.2 erfolgt unter Ubuntu 18.04 wie folgt.

sudo apt install apache2 php7.2

Nach der Installation läuft der Apache mit Prefork als Prozessmodul. Für HTTP/2 brauchen wir das Prozessmodul Event.

Zuerst deaktivieren wir MPM Prefork und das Modul von PHP.

sudo a2dismod php7.2
sudo a2dismod mpm_prefork

Jetzt aktivieren das MPM Event Prozessmodul mit FastCGI.

sudo a2enmod mpm_event proxy_fcgi setenvif

Wir möchten PHP mit FastCGI verwenden und installier es jetzt.

sudo apt install php7.2-fpm
sudo a2enconf php7.2-fpm

PHP läuft als extra Dienst, welche wir aktivieren und starten.

sudo systemctl start php7.2-fpm
sudo systemctl enable php7.2-fpm

Nach dem Neustart von Apache sollte PHP wieder laufen.

sudo systemctl restart apache2

Für HTTP/2 aktivieren wir das Modul.

sudo a2enmod http2

Damit unsere Webseite das Protokoll HTTP/2 verwendet, müssen wir es in der Konfiguration hinterlegen.

sudo vim /etc/apache2/sites-enabled/your-host-ssl.conf

<VirtualHost *:443>
 Protocols h2 http/1.1
 SSLEngine On
 ...

Nach einem Neustart von Apache sollte das Protokoll HTTP/2 funktionieren.

sudo systemctl restart apache2

Den Funktionstest kann man mit dem Curl Tool durchführen. Hier am Beispiel von Google.

curl -k -v --http2 https://www.google.com/

Sollte es zu Problemen mit der Anzahl der Theads kommen, kann man die Anzahl begrenzen.

sudo vim /etc/apache2/mods-enabled/http2.load

H2MinWorkers 1
H2MaxWorkers 1

Das Protokoll HTTP/2 ermöglich auch das Vorrausladen (Preload) von Inhalten. Hier ein Beispiel für WordPress als Header.

Header add Link "</wp-content/themes/twentyseventeen/style.css>;rel=preload"
Header add Link "</wp-includes/js/jquery/jquery.js>;rel=preload"
Header add Link "</wp-includes/js/jquery/jquery-migrate.min.js>;rel=preload"
Header add Link "</wp-includes/js/wp-embed.min.js>;rel=preload"