LVM: Physical Volume vergössern

Physical Volumes haben sich als praktischen Standard für das Volume Management etabliert.
Doch irgendwann ist die zugrunde liegende Disk voll und muss vergrössert werden, was in virtuellen Umgebungen ganz einfach ist.

Für die nachfolgende Vergrösserung der Physical Volumes gibt es verschiedene Vorgehensweisen, welche hier beleuchtet werden.

Continue reading LVM: Physical Volume vergössern

LVM: Physical Volume entfernen

Manchmal merkt man, dass man eine Disk „zu viel“ in der VG hat und diese anderweitig verwenden möchte.

Mittels pvmove kann man die Daten von einer Disk (physical volume) auf andere in der gleichen volume group (VG) verschieben, danach kann man mittels vgreduce die Disk aus der VG entfernen und schliesslich mit pvremove das physical volume komplett entfernen.

Das ganze sieht so aus:

pvmove /dev/sdX
vgreduce <volume_group> /dev/sdX
pvremove /dev/sdX

Achtung: Möchte man danach die Festplatte im laufenden Betrieb „physisch“ aus dem System entfernen, muss man vorher ebenfalls die System-Referenzen entfernen!

Gebräuchliche OpenSSL Befehle

Allgmeine OpenSSL Befehle

Diese Kommandos dienen zum erstellen von CSRs, Zetifikaten, PrivateKeys und anderen verschiedenen Dingen.

PrivateKey erstellen

openssl genrsa -out example.com.key 4096

Zertifikat erstellen

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

CSR erstellen

openssl req -out CSR.csr -key privateKey.key -new

Siehe dazu auch: SSL CSR erstellen für weitere Optionen, wie z.B: ein CSR für ein SAN Zertifikat.

CSR aus bestehendem Zertifikat erstellen

Hat man keinen CSR zum ursprünglich angelegten Zertifikat mehr, lässt sich das einfach aus dem bisherigen Zertifikat und Key erstellen:

openssl x509 -x509toreq -in certificate.crt -signkey privateKey.key -out $CSR.csr 

Neuer PrivateKey aus altem erstellen

openssl rsa -in privateKey.pem -out newPrivateKey.pem

Neuer CSR inklusive key erstellen

openssl req -new -newkey rsa:4096 -nodes -keyout www.example.com.key -out www.example.com.csr -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Neues selbst signiertes Zertifikat inklusive key erstellen

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout www.example.com.key -out www.example.com.crt

Überprüfen mit OpenSSL

Zertifikate, CSRs oder PrivateKeys überpüfen:

Certificate Request (CSR) prüfen

openssl req -text -noout -verify -in CSR.csr

PrivateKey prüfen

openssl rsa -check -in privateKey.key

Zertifikat anschauen

openssl x509 -text -noout -in certificate.crt

Einzelne Felder aus dem Zertifikat ausgeben

openssl x509 -enddate -noout -in certificate.crt
openssl x509 -subject -noout -in certificate.crt

PKCs12 file prüfen

openssl pkcs12 -info -in keyStore.p12

Debuggen mit OpenSSL

Falls man einen Fehler bekommt wie: „private doesn’t match the certificate“ oder einem installierten Zertifikat wird nicht vertraut, dann kann man das mit diesem Kommandos herausfinden.

Prüfen ob ein Zetifikat (.crt) zu einem Schlüssel (.key) passt

openssl x509 -noout -modulus -in certificate.crt | openssl md5; openssl rsa -noout -modulus -in privateKey.key | openssl md5; openssl req -noout -modulus -in CSR.csr | openssl md5

(alle md5-summen müssen gleich sein)

Mit der Website verbinden und Zertifikat sehen

openssl s_client -connect www.paypal.com:443

Hinweis: Bei der Verwendung von name based virtualhosts mittels SNI muss zusätzlich noch der Parameter -servername angefügt werden:

openssl s_client -servername www.paypal.com -connect www.paypal.com:443

Konvertieren mit OpenSSL

Mit den folgenden Kommandos kann man Zertifikate und Schlüssel in andere Format konvertieren um diese mit spezifischen Server- und Software- typen kompatibel zu machen.
z.B. eine normale PEM Datei, welche mit apache funktionieren würde in eine PFX (PKCS#12) Datei umwandeln und mit Tomcat oder IIS zu benutzen.

DER nach PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

PEM nach DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PKCS12/PFX (.p12/.pfx) nach PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

(You can add -nocerts to only output the private key or add -nokeys to only output the certificates)

PEM nach PKCS12/PFX (.p12/.pfx)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Quelle: SSLShopper: The Most Common OpenSSL Commands

CA erstellen und mit dieser ein Zertifikat erstellen

Mit den nachfolgenden Befehlen kann man schnell eine CA erstellen udn damit ein Zertifikat signieren:

# Key erstellen
openssl genrsa -out ca.key 2048
# Root-CA Zertifikat mit diesem key erstellen
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt

## Zertifikat für domain: "example.org" erstellen
# Key für cert erstellen:
openssl genrsa -out example.org.key 2048
# CSR mit diesem key erstellen
openssl req -new -key example.org.key -out example.org.csr
# Zertifikat erstellen und mit der Root-CA signieren:
openssl x509 -req -in example.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out example.org.crt -days 500 -sha256

Nützliche aliase für bash

Wenn man in bash aliase anlegt kannt man die, doch recht schwierig zu merkenden Kommandos abkürzen:

alias csrview='openssl req -text -noout -verify -in'
alias crtview='openssl x509 -text -noout -in'
alias sslkeygen='openssl genrsa 4096 -out'

Nützliche Shell Scripts

Diese Scripts kann man im ~/bin/ Verzeichnis ablegen zum einfachen aufrufen.

checkcert
Zeigt die Checksummen von KEY, CRT und CSR an, damit man sofort sieht ob diese zusammenpassen.

#!/bin/bash

DOMAIN=$1
if [ -z "$DOMAIN" ]; then
  echo "usage: $0 <domain.tld>"
  exit 1
fi

if [ "$DOMAIN" != "" ]; then
  if [ -f  $DOMAIN.crt ]; then
    echo -n "CRT: "; openssl x509 -noout -modulus -in $DOMAIN.crt | openssl md5
  fi
  if [ -f  $DOMAIN.key ]; then
    echo -n "KEY: "; openssl  rsa -noout -modulus -in $DOMAIN.key | openssl md5
  fi
  if [ -f  $DOMAIN.csr ]; then
    echo -n "CSR: "; openssl  req -noout -modulus -in $DOMAIN.csr | openssl md5
  fi
fi

Festplatten im laufenden Betrieb entfernen („hot-remove“)

Will man unter Linux eine Disk „hot removen“, also im laufenden Betrieb herausziehen, muss man danach auch die Referenzen auf das Device entfernen.

Macht man dies nicht und „reisst die Disk einfach heraus“, erhält man solche unschönen Fehler im messages log, bzw. mit dmesg:

end_request: I/O error, dev sdd, sector 209715192
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0

oder im LVM:

[root@server ~]# vgs
  /dev/sdd: read failed after 0 of 4096 at 0: Input/output error
  VG     #PV #LV #SN Attr   VSize   VFree
  [...]

Um die Festplatte im laufenden Betrieb richtig entfernen zu können, muss man nebst dem obligatorischen korrektem unmounten / aus der VG removen / pvremove / usw. folgendes tun um die System-Referenz auf das Device entfernen:

echo 1 > /sys/block/<DEVICE>/device/delete

Wobei <DEVICE> hier mit dem Device-Namen ersetzt werden muss, in unserem Fall z.b. „sdd“.

Man kann diese Prozedur im übrigen auch machen, wenn man die Festplatte schon heraus gezogen hat, um diese Meldungen verschwinden zu lassen. (:wink:)

Quellen

stdout und stderr gleichzeitig umleiten

Häufig möchte man bei Script- oder Programm Ausgaben, diese komplett, also stdout und stder in ein file oder /dev/null Umleiten.

Dazu existieren häufig falsche annahmen, wie z.B. script.sh 2>&1 /dev/null, was falsch ist.

Richtigerweise muss man zuerst die Ausgabe Umleiten und dann stderr auf stdout schreiben lassen, was mit dem & in der Form: 2>&1 geht.

Praktisch sieht das dann so aus:

script.sh > /dev/null 2>&1

Es gibt aber sogar noch einen eleganteren Weg mit &> um stdout und stderr gleichzeitig umzuleiten:

script.sh &> combined.log

(E)SMTP-Dialog (Mail schreiben über SMTP)

Diese Referenz soll dazu dienen, um sich mit einem SMTP-Server zu verständigen, etwa wenn man mal ein mail über telnet schicken will… 😉

Nach dem verbinden mit telnet mail.example.org 25, meldet sich der SMTP-Dämon mit einer Statuszeile:

220 Welcome blabla...

Alle Meldungen beginnen mit einer dreistelligen Zahl, deren erste Ziffer angibt, ob die Aktion erfolgreich war oder nicht. 2 steht für Erfolg.
Jetzt identifiziert sich der Sender mit HELO (SMTP) oder EHLO (ESMTP):

EHLO <hostname>

Nun antwortet der Server:

2xx OK

xx steht dabei für zwei Ziffern.

Ab hier muss man sich mittlerweile bei den meisten Mailservern Authentifizieren, dass die Mail angenommen wird:

AUTH LOGIN

Der Server erwartet nun Benutzername und Passwort, jeweils BASE64 Codiert (base64 Encoder)

334 USER <Base64_codierter_Benutzername>
334 PASS <Base64_codiertes_Passwort>

Nach erfolgreichem authentifizieren bestätigt der Server dies:

235 OK

Der Sender übergibt die Envelope-Adresse des Absenders:

MAIL FROM: <user@example.org>

Der Server bestätigt dies mit:

2xx OK

Jetzt werden die Envelope-Adressen der Adressaten übergeben:

RCPT TO: <user@example.net>

Der Server bestätigt dies wieder mit:

2xx OK

Dies wiederholt sich für alle Adressaten. Nun kann die Mail selber verschickt werden:

DATA
From: user@example.org
To: user@example.net
hallo
.

Eine Zeile mit einem einzelnen Punkt beendet die Mail (ist aber selbst nicht Teil der Nachricht). Der Server antwortet:

2xx Message accepted for delivery.

Nun kann eine weitere Mail durch Angabe der Envelope-Adressen verschikt werden, oder aber die Verbindung wird beendet durch:

QUIT

und der Server antwortet etwa:

221 blabla closing connection.

Bei diesem einfachen SMTP-Dialog ist insbesondere zu beachten, daß ausschließlich druckbare ASCII-Zeichen (also auch keine Umlaute) übertragen werden können. Dies ist erst möglich im erweiterten ESMTP; dort muß zwar der ESMTP-Dialog selbst ebenso wie die Header der Mail aus druckbaren ASCII-Zeichen bestehen, allerdings darf der Text der Mail beliebige Zeichen enthalten.
ESMTP wird statt mit HELO mit EHLO eingeleitet, darauf antwortet der Dämon mit einer Liste der zusätzlich verstandenen Kommandos/Features:

220 mail.Uni-Mainz.DE ESMTP Sendmail 8.8.4/8.8.4; Mon, 13 Jan 1997 15:03:46 +0100 (MET)
ehlo roquefort.zdv.uni-mainz.de
250-mail.Uni-Mainz.DE Hello roquefort.zdv.Uni-Mainz.DE [134.93.8.119], pleased to meet you
250-EXPN
250-VERB
250-8BITMIME
250-SIZE
250-DSN
250-ONEX
250-ETRN
250-XUSR
250 HELP

Versteht der Server nur SMTP, so antwortet er einer Fehlermeldung, worauf der Sender nun doch ein HELO schickt:

220 vm.gmd.de running IBM VM SMTP V2R2 on Mon, 13 Jan 97 15:04:47 +0100
ehlo roquefort.zdv.uni-mainz.de
500 Unknown command, 'ehlo'
helo roquefort.zdv.uni-mainz.de
250 vm.gmd.de is my domain name.

Sieve

Mit dem addon sieve können Serverseitige Mail filter erstellt werden.
Muss man mal den sieve Server testen, so geht dies natürlich auch via telnet:

AUTHENTICATE "PLAIN" "<base64-encoded credentials>"
OK "Logged in."
LISTSCRIPTS
"managesieve" ACTIVE
OK "Listscripts completed."
GETSCRIPT "managesieve"
{6}
keep;
OK "Getscript completed."

Verbinden mit SSL/STARTTLS

Wenn SSL ins Spiel kommt (was heutzutage eigentlich immer der Fall ist 😉 ), wird es schwieriger, da sich die clients in diesem Falle ja verschlüsselt unterhalten und kaum jemand diese „Sprache“ beherrschen wird. 😀

Glücklicherweise gibt es dafür im openssl Programm eine Option, welche die Verschlüsselung transparent macht:

openssl s_client -starttls smtp -connect mail.example.org:587 -crlf -ign_eof

Zwischen -starttls und -connect wird das Protokoll angegeben.
openssl unterstützt derzeit die Protokolle „smtp“, „pop3“, „imap“, „ftp“, „xmpp“, „xmpp-server“, „irc“, „postgres“, „lmtp“, „nntp“, „sieve“ und „ldap“

Weitere Informationen

apache: Automatische SSL Umleitung

Manchmal macht es Sinn gewisse Seiten oder Unterseiten automatisch auf eine SSL Seite umzuleiten, etwa: "webmail.example.com" oder "myshop.example.com/bestellung/"

Dies geht ganz einfach mit einer .htaccess Direktive, oder alternativ global ein einem apache config file (bei Debian z.B.: /etc/apache2/conf.d/ssl-redirect.conf )
Continue reading apache: Automatische SSL Umleitung

Abgestürtze SSH Session: Wieder verbinden zu laufenden Prozessen

Manchmal passiert es: Die SSH session bricht ab, sei es aufgrund längerer Inaktivität, oder Verbindungsunterbruch. Vor allem, wenn man wichtige Kommandos eingegeben hatte, möchte man diese zwecks Rückverfolgung in der history behalten. – Dies ist bei einem Session-Unterbruch normalerweise nicht der Fall, da die bash-history immer erst beim logout geschrieben wird.

Oder man hat z.B. eine Datei mit vim geöffnet und möchte diese nach dem neu verbinden weiter bearbeiten.

Continue reading Abgestürtze SSH Session: Wieder verbinden zu laufenden Prozessen

Printserver

Hat man erst mal einen SAMBA-Fileserver eingerichtet, möchte man auch die Drucker über diesen steuern; besonders bei Netzwerkdruckern wird man die erweiterten Möglichkeiten wie History der gedruckten Dokumente, Druckerstatus, usw. Nutzen.

Und das schönste: Mittlerweile ist die Einrichtung mit SAMBA & CUPS kein Problem mehr!

Continue reading Printserver

WWW-Server

Beim Webserver gibt es sehr viel Optimierungspotential.
Wir werden hier erst mal apache mit einer übersichtlichen und einfach zu erweiternden Konfiguration erstellen und danach suExec mit FastCGI einsetzten um die Sicherheit auch bei mehreren Benutzern auf dem System (sog. „ISP Hosting Setup“) zu gewährleisten.
Damit dann die User ihre Daten auch hochladen können, wird ein FTP-Server (proftpd) installiert.

Danach werden wir noch einen MySQL-Datenbankserver erstellen.
Continue reading WWW-Server