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
Feb 15

Am 14. Februar 2009 wurde Debian GNU/Linux 5.0 (Codename “Lenny”) veröffentlicht und löst somit Debian GNU/Linux 4.0 (Codename “Etch”) als aktuelle stabile Version des Debian-Projekts ab. Die aktuelle Version unterstützt nun zwölf unterschiedliche Architekturen, unter anderem auch aktuelle Intel und AMD-Plattformen mit 64bit, hinzugekommen ist Marvells Orion-Plattform, die in zahlreichen Speicherlösungen zum Einsatz kommt und die Unterstützung für Netbooks. Die Paketverwaltung apt bietet nun die Möglichkeit Paketbeschreibungen in der Sprache des Benutzers auszugeben, sofern eine Übersetzung vorhanden ist.  Weitere Neuerungen können der Presseveröffentlichung entnommen werden.

Jul 23

Die grundsätzliche Funktionalität von sudo habe ich im Artikel “sudo vs. su” bereits erklärt. In diesem Artikel möchte ich darauf eingehen, wie man einem Benutzer die Verwendung von sudo erlauben kann. Unter Linux gibt es hierfür die Datei “/etc/sudoers”. Diese sollte allerdings nicht mit einem beliebigen Editor bearbeitet werden, sondern ausschließlich mit “visudo”, da hiermit vor dem Speichern eine Syntax-Überprüfung erfolgt. Darauf weist auch der Kommentar “This file MUST be edited with the ‘visudo’ command as root.” am Dateianfang hin. Außerdem weiß visudo wo die sudoers-Datei auf dem System gespeichert ist, da der Pfad auf anderen Betriebssystemen (z.B. bei Mac OS X unter “/private/etc/sudoers”) auch abweichen kann. Wie visudo zu bedienen ist, kann im Artikel “Standard-Editor vi” nachgelesen werden, außerdem werden die verfügbaren Befehle in der Statusleiste angezeigt.

Mit dem folgenden Befehl öffnet man also die sudoers-Datei als Superuser:

visudo

Unter Debian sieht die Datei standardmäßig wie folgt aus:

# /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the man page for details on how to write a sudoers file.
#
 
Defaults        env_reset
 
# Host alias specification
 
# User alias specification
 
# Cmnd alias specification
 
# User privilege specification
root    ALL=(ALL) ALL

Damit wird dem Benutzer “root” auf allen Computern die Ausführung aller Befehle mit/unter jedem Benutzer erlaubt. Im Allgemeinen können fünf Einstellungen pro Zeile festgelegt werden:

  1. Benutzer: Ein Benutzer oder Alias (Standard: muss festgelegt werden).
  2. Host: Ein Host oder Alias (Standard: muss festgelegt werden).
  3. =
  4. (Runas): Mit/Unter welchem Benutzer der Befehl ausgeführt wird (in runden Klammern geschrieben) (Standard: root).
  5. Authentifizierung: Ob nach dem Benutzer-Passwort gefragt werden soll (PASSWD) oder nicht (NOPASSWD) gefolgt von “:” und anschließend Befehl (Standard: nach Passwort fragen).
  6. Befehl: Ein oder mehrere Befehle oder Alias (Standard: muss festgelegt werden).
# User privilege specification
root    ALL=(ALL) ALL

könnte mit der selben Wirkung vereinfacht

# User privilege specification
root    ALL=ALL

oder erweitert wie folgt geschrieben werden:

# User privilege specification
root    ALL=(ALL) PASSWD:ALL

Auch mehrere Befehle können angegeben werden, z.B. dass immer nach dem Benutzer-Passwort gefragt wird, außer für /sbin/reboot:

username ALL=NOPASSWD:/sbin/reboot,PASSWD:ALL

Wie bereits erwähnt können für Benutzer, Host und Befehl auch ein Alias angegeben werden. Diese können wie folgt festgelegt und aktiviert werden:

# Host alias specification
Host_Alias SERVER=host1,host2
 
# User alias specification
User_Alias MAINTAINER=username1,username2
 
# Cmnd alias specification
Cmnd_Alias DEB=/sbin/reboot,/usr/bin/aptitude
  
# User privilege specification
root    ALL=(ALL) ALL
MAINTAINER    SERVER=(root) PASSWD:DEB

Die oben erwähnten Konfigurationen nochmals übersichtlich zusammengefasst:

# User privilege specification
# USER     HOST  =(RUNAS) PASSWD/NOPASSWD COMMAND
root       ALL   =(ALL)                   ALL
root       ALL   =                        ALL # same as above
root       ALL   =(ALL)   PASSWD:         ALL # same as above
MAINTAINER SERVER=(root)  PASSWD:         DEB
Jul 12

vi ist aufgrund seiner geringen Größe und weiten Verbreitung auf vielen *NIX-Betriebssystemen standardmäßig installiert. Aus diesem Grund ist es ein großer Vorteil, wenn man zumindest die Grundfunktionalität des Editors kennt und damit Dateien (z.B. Konfigurationsdateien) bearbeiten kann.

Mit dem Befehl “vimtutor” kann man in der Konsole ein vi-Tutorial starten, das sehr zu empfehlen ist und einem den Editor näher bringt.

Hier möchte ich dennoch die Funktionalität für Eilige kurz zusammenfassen:

Zum Starten von vi tippt man den Befehle “vi [-Optionen] Dateiname” in die Konsole.

Folgende wichtige Optionen stehen zur Verfügung:
-i: vi wird im Eingabemodus anstelle standardmäßig im Befehlsmodus gestartet.
-R: Die angegebene Datei wird Read-Only geöffnet.
+[n]: Sprint zu Zeile n, wobei [n] durch eine Ganzzahl zu ersetzen ist.

Selbstverständlich können Optionen auch miteinander kombiniert werden:
vi -R +50 .bash_history

Der Editor selbst kennt drei unterschiedliche Modi: Befehlsmodus, Eingabemodus und Kommandozeile. Standardmäßig wird vi im Befehlsmodus gestartet, mit der oben genannten Option -i kann allerdings der Eingabemodus erzwungen werden.

Im Eingabemodus kann man wie von einem Editor zu erwarten Text bearbeiten. Dabei werden die gedrückten Tasten an der aktuellen Cursor-Position eingefügt/gelöscht/… . Um den Eingabemodus oder die Kommandozeile (wieder) zu verlassen und in den Befehlsmodus (zurück) zu gelangen, muss man nur die Taste “Esc” drücken. In frühen Versionen von vi konnte man nicht erkennen, welcher Modus aktiv war, deshalb drücken vi-Benutzer vorsichtshalber gerne die Taste “Esc”, um sicher im Befehlsmodus zu sein, bevor sie fortfahren.

Zur Kommandozeile gelangt man, indem man im Befehlsmodus “:” eintippt. Wichtige Kommandos sind:
e!: Alle Änderungen seit dem letzten Speichern verwerfen.
w: Speichern.
wq: Speichern und beenden.
q: Beenden (nur wenn keine Änderungen vorgenommen wurden).
q!: Beenden ohne zu speichern.

Zum Speichern einer Datei und anschließendem beenden von vi tippt man im Befehlsmodus folgendes ein:
:wq

Im Befehlsmodus stehen unter anderem folgende wichtige Befehle zur Verfügung:

Bearbeiten:
i: Eingabe vor dem aktuellen Zeichen (wechselt in den Eingabemodus).
a: Eingabe nach dem aktuellen Zeichen (wechselt in den Eingabemodus).
I: Eingabe am Beginn der aktuellen Zeile (wechselt in den Eingabemodus).
A: Eingabe am Ende der aktuellen Zeile (wechselt in den Eingabemodus).
R: Überschreiben einschalten.

Bewegen:
w: Ein Wort vorwärts bewegen.
[n]w: [n] Wörter vorwärts bewegen, wobei [n] durch eine Ganzzahl zu ersetzen ist.
b: Ein Wort zurück bewegen.
[n]b: [n] Wörter zurück bewegen, wobei [n] durch eine Ganzzahl zu ersetzen ist.
0: Zum Zeilenanfang spingen.
$: Zum Zeilenende springen.
G: Zum Ende des Dokuments springen.
[n]G: Zur Zeile [n] des Dokuments springen, wobei [n] durch eine Ganzzahl zu ersetzen ist.

Löschen:
dd: Aktuelle Zeile löschen.
[n]dd: [n] Zeilen löschen, wobei [n] durch eine Ganzzahl zu ersetzen ist.
x: Nächstes Zeichen löschen.
[n]x: Nächste [n] Zeichen löschen, wobei [n] durch eine Ganzzahl zu ersetzen ist.
X: Vorheriges Zeichen löschen.
[n]X: Vorherige [n] Zeichen löschen, wobei [n] durch eine Ganzzahl zu ersetzen ist.
D: Löschen des Textes beginnend von Cursor-Position bis zum Zeilenende.

Rückgängig:
u: Letzten Befehl rückgängig machen.
U: Letzten Befehl in aktueller Zeile rückgängig machen.

Suchen:
/[pattern]: Vorwärtssuche nach [pattern], wobei [pattern] durch den Suchbegriff zu ersetzen ist.
?[pattern]: Rückwärtssuche nach [pattern], wobei [pattern] durch den Suchbegriff zu ersetzen ist.
n: Suche erneut durchführen.
N: Suche in umgekehrte Richtung erneut durchführen.

Speichern und beenden:
ZZ: Speichern und beenden (entspricht “wq” in der Kommandozeile).

Jul 01

Bei der Installation von Programmen mit aptitude oder apt-get auf Debian GNU/Linux (oder Derivaten) wird eine Lock-Datei angelegt, damit zwei Administratoren nicht gleichzeitig in den kritischen Bereich kommen können. Führt man die Installation z.B. via SSH durch und die Verbindung wird unerwartet unterbrochen, bleibt die Lock-Datei erhalten, wenn Benutzereingaben für die Installation erforderlich waren. Verbindet man sich anschließend erneut via SSH und möchte die Installation erneut durchführen, wird folgende Fehlermeldung ausgegeben:

debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process

Diese Meldung besagt, dass die Lock-Datei bereits existiert, sich derzeit jemand im kritischen Bereich befindet und deshalb keine Installation durchgeführt werden kann. Da wir allerdings wissen, dass die SSH-Verbindung unterbrochen wurde und deshalb noch der “alte” Installationsprozess den Zugriff auf aptitude bzw. apt-get blockiert, können wir diesen beenden. Mit dem folgenden Befehl erfahren wir, welcher Prozess die Datei blockiert:

fuser -v /var/cache/debconf/config.dat

Die Ausgabe sieht wie folgt aus:

                     USER        PID ACCESS COMMAND
/var/cache/debconf/config.dat:
                     root       4233 f.... dpkg-preconfigu

Wir erkennen, dass der Prozess “dpkg-preconfigu” mit der PID “4233″ die Datei blockiert, deshalb beenden wir diesen mit dem folgenden Befehl:

kill -9 4233

Diesen Vorgang wiederholen wir solange, bis “fuser -v /var/cache/debconf/config.dat” keinen blockierenden Prozess mehr auflistet. Abschließend entfernen wir noch die Lock-Datei und einer weiteren/erneuten Installation mittels aptitude oder apt-get steht nichts mehr im Wege:

rm -R /var/lib/dpkg/lock

Für alle Befehle sind Superuser-Rechte (root) erforderlich.

Jun 21

Unter Linux (z.B. Debian) muss man sich um administrative Tätigkeiten (z.B. Installation von Programmen) ausführen zu dürfen mit dem Superuser root anmelden. Verwendet man beispielsweise einen Desktop-Manager (z.B. GDM), so ist die Anmeldung als root zumindest unter Debian nicht erlaubt. Damit soll unterbunden werden, dass übliche Tätigkeiten wie etwa erstellen von Texten mit Superuser-Rechten durchgeführt werden, obwohl diese nicht benötigt werden. Wäre man immer mit Superuser-Rechten angemeldet, bestünde jederzeit die Gefahr, das System zu beschädigen. Ob durch Eigenverschulden oder ein fremdes Skript ist schlussendlich egal, denn das System wäre kaputt. Deshalb sollte man immer als Benutzer mit eingeschränkten Rechten arbeiten.

In der Konsole werden die Befehle su bzw. sudo (u.U. erst nach expliziter Installation) bereitgestellt. Diese erlauben es als Benutzer mit eingeschränkten Rechten Programme/Skripte mit Superuser-Rechten auszuführen. Doch zwischen beiden Befehlen besteht ein nicht zu vernachlässigender Unterschied. Wechselt man mit dem Befehl zu den Superuser-Rechten, so muss das Passwort von root eingegeben werden und man bleibt so lange mit Superuser-Rechten angemeldet, bis man sich selbst wieder abmeldet. Der Befehl sudo erfordert die Eingabe des eigenen Passworts und besitzt außerdem einen Timeout. Nach Ablauf des Timeouts fordert sudo erneut zur Eingabe des Passworts auf. Da die “Abmeldung” der Superuser-Rechte bei sudo automatisch erfolgt, kann auf einem Computer nach Ablauf dieser Zeit kein Unsinn gemacht werden, sollte dieser unbeaufsichtigt bleiben und anderen Menschen zugänglich sein.

Wenn man einen Befehl mit Superuser-Rechten ausführen möchte, verwendet man sudo. Möchte man allerdings mehrere Befehle mit Superuser-Rechten ausführen, dennoch nicht auf den sicheren und bequemen Timeout verzichten, kann man sudo su in die Konsole eintippen. Bis zum Auftreten des Timeouts hat man Superuser-Rechte in der Konsole, d.h. alle Befehle die ab diesem Zeitpunkt bis zum Timeout ausgeführt werden, werden mit Superuser-Rechten ausgeführt.

Ein weiterer Vorteil von sudo ist, dass mehrere Benutzer mit eingeschränkten Rechten administrative Aufgaben erledigen können, ohne dass sie das Passwort von root wissen müssen. Außerdem können die erlaubten Aufgaben mit sudo beschränkt werden.