Oct 20

Möchte man SSL-Zertifikate mit Zwischenzertifikaten einsetzen (um höhere Sicherheit zu gewährleisten werden fast ausschließlich Zwischenzertifikate verwendet), so müssen diese in Apache, Dovecot bzw. Postfix zusätzlich zur üblichen SSL-Konfiguration hinterlegt werden.

Apache:

In der Datei “/etc/apache2/httpd.conf” muss folgende Zeile eingefügt werden:

SSLCACertificateFile /etc/ssl/certs/SSL123_CA_Bundle.pem

Dovecot:

In der Datei “/etc/dovecot/dovecot.conf” muss folgende Zeile eingefügt werden:

ssl_ca_file = /etc/ssl/certs/SSL123_CA_Bundle.pem

Postfix:

In der Datei “/etc/postfix/main.cf” muss folgende Zeile eingefügt werden:

smtpd_tls_CAfile=/etc/ssl/certs/SSL123_CA_Bundle.pem

Jul 29

Wenn man Änderungen nicht nur von einer Datei sondern von vielen Dateien und möglicherweise auch mit komplexer Datei- bzw. Ordnerstruktur feststellen möchte um daraus eine Patch-Datei zu erzeugen, so muss man diff rekursiv anwenden um nicht jede geänderte Datei einzeln patchen zu müssen. Hier erkläre ich die übliche – sozusagen zum Standard etablierte – Vorgehensweise um dieses Ziel zu erreichen:

Zuerst vergleicht man also den Ordner mit den Originaldateien rekursiv mit der geänderten Version:

diff -urN original changed > /pfad/zu/changes.patch

Optionen:

-u  -U NUM  --unified[=NUM]  Output NUM (default 3) lines of unified context.
-r  --recursive  Recursively compare any subdirectories found.
-N  --new-file  Treat absent files as empty.

Anschließend kann man auf anderen Installationen die Patch-Datei anwenden (zuerst muss in das Verzeichnis mit den Originaldateien wechseln):

patch -p1 < /pfad/zu/changes.patch

Optionen:

-p NUM  --strip=NUM  Strip NUM leading components from file names.

Da die Patch-Datei im Verzeichnis der Originaldateien aufgerufen wird, mit diff allerdings die übergeordneten Ordner verglichen wurden, muss der Ordnername entfernt werden, dies geschieht mit der Option “-p1″.

Jul 13

Wenn in einem Ordner eine große Anzahl von Dateien liegt, verweigern cp, mv usw. ihren Dienst mit der Meldung:

$ mv *.png ../target/
bash: /bin/mv: Argument list too long

Abhilfe schafft find mit dem Parameter exec:

find . -name "*.png" -exec mv {} ../target/ \;

Der Nachteil der find-Methode mit dem Parameter exec ist, dass für jede Datei der Befehl in exec ausgeführt wird. Performanter ist hingegen xargs, das die übergebene Liste in kleinere Listen aufteilt, sodass diese dann von cp, mv, etc. noch verarbeitet werden können:

find . -name "*.png" | xargs -0 mv -t ../target/
Jul 29

Sehr erfreut war ich über den Newsletter von Debian, den ich heute in meinem Postfach vorgefunden habe. Ab sofort wird jeweils im Dezember eines ungeraden Jahres der aktuelle Stand für einen neuen Release eingefroren. Im folgenden Frühjahr sollte dann mit der Veröffentlichung zu rechnen sein. D.h. dass im Schnitt alle zwei Jahre mit einer neuen stabilen Version zu rechnen ist. Das wird schlussendlich dazu führen, dass stets relativ neue Pakete in den jeweiligen stabilen Releases zu finden sein werden. Ich hoffe nur bzw. bin auch relativ überzeugt davon, dass die Stablität und Qualität nicht darunter zu leiden hat.

Jun 23

Zur Überprüfung ob die über apt-get/aptitude geladenen Dateien aus einer vertrauenswürdigen Quelle stammen werden diese auf der Seite von Debian mit einem privaten Schlüssel signiert und auf der Benutzer-Seite mit dem zugehörigen öffentlichen Schlüssel auf Korrektheit geprüft. Die Schlüsselpaare haben bei Debian eine Gültigkeit von drei Jahren, danach müssen diese aktualisiert werden. Der alte Schlüsselpaar verliert mit 01.07.2009 seine Gültigkeit, das neue Schlüsselpaar wird ab 13.06.2009 eingesetzt. Damit die neuen öffentlichen Schlüssel auf dem System bekannt sind, müssen diese aktualisiert werden.

Führt man “apt-get update” oder “aptitude update” ohne Aktualisierung der Schlüssel aus, wird folgende Meldung ausgegeben:

W: There is no public key available for the following key IDs:
9AA38DCD55BE302B
W: There is no public key available for the following key IDs:
9AA38DCD55BE302B
W: GPG error: ftp://ftp.hosteurope.de etch Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 9AA38DCD55BE302B
W: GPG error: http://ftp.de.debian.org etch Release: Die folgenden Signaturen konnten nicht überprüft werden, weil ihr öffentlicher Schlüssel nicht verfügbar ist: NO_PUBKEY 9AA38DCD55BE302B
W: Probieren Sie "apt-get update", um diese Probleme zu korrigieren.

Mit dem Befehl “apt-get install debian-archive-keyring” bzw. “aptitude install debian-archive-keyring” (je nachdem ob man apt-get oder aptitude bevorzugt) können die öffentlichen Schlüssel aktualisiert werden. Aus Sicherheitsgründen muss noch eine Frage mit “Ja” bestätigt werden:

Muss 12,8kB an Archiven herunterladen. Nach dem Entpacken werden 4096B zusätzlich belegt sein.
Wollen Sie fortsetzen? [Y/n/?] Y
WARNUNG: nichtvertrauenswürdige Versionen der folgenden Pakete werden installiert!

Nichtvertrauenswürdige Pakete können die Sicherheit Ihres Systems gefährden.
Sie sollten nur dann mit der Installation fortfahren, wenn Sie sicher sind, dass
dies das ist, was Sie wollen.

debian-archive-keyring

Wollen Sie diese Warnung ignorieren und trotzdem weitermachen?
Geben Sie zum Weitermachen "Ja", zum Abbrechen "Nein" ein: Ja

Die Installation wird daraufhin durchgeführt:

Schreibe erweiterte Statusinformationen... Fertig
Hole:1 ftp://ftp.hosteurope.de etch/main debian-archive-keyring 2009.01.31 [12,8kB]
12,8kB wurden in 0s heruntergeladen (81,1kB/s)
(Lese Datenbank ... 29059 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereiten zum Ersetzen von debian-archive-keyring 2007.07.31~etch1 (durch .../debian-archive-keyring_2009.01.31_all.deb) ...
Entpacke Ersatz für debian-archive-keyring ...
Richte debian-archive-keyring ein (2009.01.31) ...
gpg: key 6070D3A1: "Debian Archive Automatic Signing Key (4.0/etch) <ftpmaster@debian.org>" not changed
gpg: key ADB11277: "Etch Stable Release Key <debian-release@lists.debian.org>" not changed
gpg: key BBE55AB3: "Debian-Volatile Archive Automatic Signing Key (4.0/etch)" not changed
gpg: key F42584E6: public key "Lenny Stable Release Key <debian-release@lists.debian.org>" imported
gpg: key 55BE302B: public key "Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>" imported
gpg: key 6D849617: public key "Debian-Volatile Archive Automatic Signing Key (5.0/lenny)" imported
gpg: Total number processed: 6
gpg:               imported: 3  (RSA: 2)
gpg:              unchanged: 3
gpg: no ultimately trusted keys found

Abschließend kann man die installierten Schlüssel noch mit “apt-get list” ansehen:

/etc/apt/trusted.gpg
--------------------
pub   1024D/6070D3A1 2006-11-20 [expires: 2009-07-01]
uid                  Debian Archive Automatic Signing Key (4.0/etch) <ftpmaster@debian.org>

pub   1024D/ADB11277 2006-09-17
uid                  Etch Stable Release Key <debian-release@lists.debian.org>

pub   1024D/BBE55AB3 2007-03-31 [expires: 2010-03-30]
uid                  Debian-Volatile Archive Automatic Signing Key (4.0/etch)
sub   2048g/36CA98F3 2007-03-31 [expires: 2010-03-30]

pub   1024D/F42584E6 2008-04-06 [expires: 2012-05-15]
uid                  Lenny Stable Release Key <debian-release@lists.debian.org>

pub   4096R/55BE302B 2009-01-27 [expires: 2012-12-31]
uid                  Debian Archive Automatic Signing Key (5.0/lenny) <ftpmaster@debian.org>

pub   2048R/6D849617 2009-01-24 [expires: 2013-01-23]
uid                  Debian-Volatile Archive Automatic Signing Key (5.0/lenny)
Apr 09

Bei HostEurope wird für vServer Virtuozzo zur Virtualisierung verwendet. Dieses setzt bei jedem Start die Dateien “/etc/hostname” und “/etc/resolv.conf” neu, d.h. geänderte Konfigurationseinstellungen gehen bei jedem Neustart verloren. Abhilfe schafft ein kleines Startup-Skript, das in “/etc/init.d/hostname-vps.sh” mit folgendem Inhalt abgelegt wird:

#!/bin/bash
if [ -f /etc/hostname.override ]
then
  cp /etc/hostname.override /etc/hostname
  cat /etc/hostname | xargs /bin/hostname
fi
 
if [ -f /etc/resolv.conf.override ]
then
  cp /etc/resolv.conf.override /etc/resolv.conf
fi
 
exit 0

Wenn die Datei “/etc/hostname.override” existiert, so ersetzt diese die Datei “/etc/hostname”. Selbiges gilt analog für “/etc/resolv.conf.override” und “/etc/resolv.conf”. Damit dieses Skript beim Starten ausgeführt wird, müssen noch Links in den entsprechenden Runlevel-Ordner hinzugefügt werden. Debian stellt hierfür das Tool “update-rc.d” zur Verfügung:

# update-rc.d hostname-vps.sh defaults 09

Nun müssen noch die override-Dateien mit den gewünschten Optionen angelegt werden. Anschließend kann das System neu gestartet und die Funktionalität überprüft werden:

# reboot
Apr 08

Im Auslieferungszustand startet Apache2 auf HostEurope vServern mit Debian nicht automatisch beim Hochfahren, obwohl Apache2 installiert wurde. Das ist natürlich ärgerlich, da dieser bei Server-Wartungsarbeiten, Stromausfall, etc. händisch neu gestartet werden müsste, was im Serverbetrieb natürlich nicht gewünscht ist.

Ein Blick in die Log-Dateien bringt keine Fehler ans Tageslicht, der nächste Schritt ist den aktuellen Runlevel zu überprüfen:

# /sbin/runlevel
N 2

D.h. der vServer befindet sich im Runlevel 2, das ist Debian-Standard. Die Ausgabe von “$ ls -la /etc/rc2.d/” zeigt, dass Apache2 nicht gestartet wird, d.h. es fehlt der Link zum Startskript, der bei Debian üblicherweise gesetzt ist. Das lässt sich einfach beheben:

# cd /etc/rc2.d/
# ln -s ../init.d/apache2 S91apache2

Nun noch den Server neu starten:

# reboot

Und ein Aufruf der IP-Adresse im Browser sollte nun die Default-Seite von Apache2 als Ergebnis liefern.

Mar 17

Auf Linux/Unix-Systemen gehören Dateien und Ordner immer einem Benutzer und einer Gruppe. Neu erstellte Dateien erben Benutzer und Gruppe vom Benutzer, der die Dateien/den Ordner erstellt. Neue Dateien lassen sich mit dem Befehl touch (z.B. “touch test.txt”), Ordner mit mkdir (z.B. “mkdir test”) anlegen, die Ausgabe von Objekten im Verzeichnis erfolgt mit ls (z.B. “ls -la”):

$ touch test.txt
$ mkdir test
$ ls -la
total 0
drwxr-xr-x   4 user  group   136 16 Mär 14:55 .
drwxrwxrwx+ 68 user  group  2312 16 Mär 14:55 ..
drwxr-xr-x   2 user  group    68 16 Mär 14:55 test
-rw-r--r--   1 user  group     0 16 Mär 14:55 test.txt

Die Datei “test.txt” gehört hier dem Benutzer “user” und der Gruppe “group”, genauso wie alle anderen Objekte (“.” zeigt den aktuellen, “..” den übergeordneten Ordner an). Zusätzlich werden die Rechte ausgegeben – für “test.txt” sind dies “-rw-r–r–”.

Der erste Buchstabe spezifiziert den Typ näher, für Ordner wird i.d.R. ein “d” angezeigt (siehe Ordner “test”), symbolische Links können an einem “l” erkannt werden. Die nächsten drei Buchstaben “rw-” beschreibt die Rechte des Besitzers (Owner), die nächsten drei “r–” jene der Gruppe (Group), die letzten drei “r–” die Rechte für den Rest (World). Dreistellige Gruppen von Buchstaben können auch als Zahlen ausgedrückt werden, mit folgender Bedeutung:

r = 4 = 100 = Read
w = 2 = 010 = Write
x = 1 = 001 = eXecute
(Buchstabe = Dezimal-Zahl = Binär-Zahl = Bedeutung) 

D.h. “rwx” ist gleichbedeutend mit “7″ bzw. “rw” mit “6″ oder “rx” mit “5″.

Benutzer bzw. Gruppe können mit chown (z.B. “chown user2:group2 test.txt”), Rechte mit chmod (z.B. “chmod 0666 test.txt”, selbes Ergebnis mit “chmod a=rw test.txt”) modifiziert werden.