Kategorien
Blog

MES03: Plattenwegweiser

Dieser Artikel gehört zur Serie Mein eigener Server.

In Teil 2 habe ich eigentlich versprochen, mit der Konfiguration zu beginnen. Aber vorher muss ich noch zwei kleine Ausflüge machen:

Wo die Dinge jetzt liegen

Wie bereits erwähnt haben wir keine Laufwerksbuchstaben sondern nur Verzeichnisse. Dabei verwenden alle UNIX-Betriebssysteme mehr oder weniger die gleichen Verzeichnisstrukturen. Die wichtigsten will ich hier mal aufzählen:

/etc/

Hier liegen die Konfigurationen. Sowohl die des Systems als auch die der meisten Softwarepakete. Beispiele: die Benutzer des Systems sind in /etc/passwd definiert (aber nicht immer), die Konfiguration des Webservers findet sich unter /etc/apache2/ (natürlich nur, wenn Apache 2 als Webserver benutzt wird), die Startskripten für im Hintergrund laufende Dienste sind in /etc/init.d/.

/var/

Hier legen Programme veränderliche Dateien ab. Und Daten, die nur von Serverprogrammen benutzt werden sollen (z.B. die Dateien einer Webseite) liegen auch oft hier.

/usr/

Die ausführbaren Dateien der Software sind größtenteils in diesem Verzeichnis installiert. Einige Grundsystemfunktionen liegen auch in /bin/ und /lib/.

/usr/local/

Programme aus anderen Quellen als der Distribution, zum Beispiel Selbstkompiliertes können hier installiert werden, damit sie sich nicht mit den original ausgelieferten Dateien in die Quere kommen. Manche Distributionen und einige kommerzielle Unixe verwenden zu diesem Zweck auch /opt/.

/home/

Hier haben die Benutzer ihre Homeverzeichnisse. Dort können sie sowohl ihre eigenen Dateien als auch ihre Dotfiles (die persönlichen Konfigurationen für Programme, die so genannt werden, weil ihre Namen meist mit einem Punkt beginnen) ablegen.

/tmp/

Temporäre Dateien. Auf manchen Systemen wird der Inhalt beim Neustart automatisch gelöscht. Es darf deshalb nicht davon ausgegangen werden, dass hier abgelegte Daten über einen längeren Zeitraum erhalten bleiben.

Ein Paketmanager

Einer der größten Vorteile der meisten Linuxdistributionen ist die Softwareinstallation mit einem Paketmanager. Der kennt in der Regel die Abhängigkeit der verschiedenen Softwarepakete voneinander, so dass das System immer in einem funktionierenden Zustand sein sollte. Debian verwendet apt.

Die Konfiguration des Paketmanagers liegt in /etc/apt/. Die wichtigste Datei ist sources.list. Darin stehen die Quellen, aus denen das System Installationspakete beziehen soll. Auf einem von Hetzner installierten Debian Squeeze sieht das im Moment so aus:

###############################################################################
# Hetzner mirror
#

deb http://mirror.hetzner.de/debian/packages squeeze main contrib non-free
deb http://mirror.hetzner.de/debian/security squeeze/updates main contrib non-free

###############################################################################
# backup mirror
#

deb http://cdn.debian.net/debian/ squeeze main non-free contrib
deb-src http://cdn.debian.net/debian/ squeeze main non-free contrib

deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free

## backports
deb http://mirror.hetzner.de/debian/backports squeeze-backports main contrib non-free
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free

Softwareinstallation

Das Werkzeug ermöglicht die folgenden Operationen:

apt-get update

Holt die aktuellen Paketlisten von den in sources.list definierten Quellen.

Beispiel:

root@Debian-60-squeeze-64-minimal ~ # apt-get update
Get:1 http://mirror.hetzner.de squeeze Release.gpg [1,672 B]
Get:2 http://mirror.hetzner.de squeeze/updates Release.gpg [836 B]
Get:3 http://mirror.hetzner.de squeeze-backports Release.gpg [1,571 B]         
[...]
Get:33 http://cdn.debian.net squeeze/main amd64 Packages [8,602 kB]            
Get:34 http://cdn.debian.net squeeze/non-free amd64 Packages [124 kB]          
Get:35 http://cdn.debian.net squeeze/contrib amd64 Packages [64.1 kB]
Fetched 26.1 MB in 6s (4,006 kB/s)                                             
Reading package lists... Done
root@Debian-60-squeeze-64-minimal ~ # 

apt-get dist-upgrade

Bringt alle installierten Pakete auf die neueste Version.

apt-get install

Installiert die angegebenen Pakete und versucht dabei, alle Abhängigkeiten aufzulösen (also alle von den Paketen benötigten Pakete ebenfalls zu installieren und alle in Konflikt stehenden Pakete zu deinstallieren). Stellt dann eventuell in einem textbasierten Menüsystem Fragen zur Konfiguration.

Beispiel:

root@Debian-60-squeeze-64-minimal ~ # apt-get install screen
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  screen
0 upgraded, 1 newly installed, 0 to remove and 16 not upgraded.
Need to get 624 kB of archives.
After this operation, 975 kB of additional disk space will be used.
Get:1 http://mirror.hetzner.de/debian/packages/ squeeze/main screen amd64 4.0.3-14 [624 kB]
Fetched 624 kB in 0s (9,321 kB/s)
Selecting previously deselected package screen.
(Reading database ... 17705 files and directories currently installed.)
Unpacking screen (from .../screen_4.0.3-14_amd64.deb) ...
Processing triggers for man-db ...
Processing triggers for install-info ...
Setting up screen (4.0.3-14) ...
root@Debian-60-squeeze-64-minimal ~ #

So, dass musstet Ihr unbedingt noch wissen. Aber in der nächsten Folge konfigurieren wir wirklich was.

Kategorien
Blog

MES02: Willkommen bei Linux

Dieser Artikel gehört zur Serie Mein eigener Server.

Linux ist ein Unix

Jetzt habt Ihr Euren Server und sitzt vielleicht zum ersten mal vor Linux. Sehen wir uns also mal gemeinsam an, womit wir es hier zu tun haben. Dies ist ein Unix, eins aus einem langen Stammbaum miteinander verwandter Systeme, zu dem auch der erste Webserver und das iPhone gehören.

Linux selbst ist eigentlich „nur“ eine Neuimplementation des Kernels (also der Gerätetreiber, Netzwerktreiber, Prozessverwaltung und ähnlichem), die Linus Torvalds 1991 begonnen hat, und die seitdem von einer unvorstellbaren Anzahl an Entwicklern ständig weiterentwickelt wurde. Den Rest zum Unix-Erlebnis ergänzen die GNU-Tools, die eigentlich in einem ehrgeizigen Projekt entstanden, das Unix durch ein neues Betriebssystem ersetzen wollte (GNU ist eine rekursive Abkürzung und steht für GNU is not Unix). Während dieses Projekt also seine Tools (Befehle, die wir später noch sehen werden, einen C-Compiler,…) ziemlich weit fertiggestellt hatte, wurde der Betriebssystemkern „Hurd“ nicht fertig. Diese Lücke füllte Linux so gut aus, dass ich bezweifle, dass der Hurd-Kern jemals richtig fertig wird. Aufgrund dieser Geschichte bestehen auch einige Leute darauf, das komplette System für Arbeitsplatzrechner und Server „GNU/Linux“ zu nennen — schließlich besteht es ja nicht nur aus dem Kern (und es gibt tatsächlich jede Menge andere Einsatzmöglichkeiten für Linux ohne die komplette GNU-Umgebung).

Da Linux also nicht von einem einzelnen Hersteller stammt, müssen alle Teile des Systems aus verschiedenen Quellen zusammengestellt und erstmal kompiliert werden. Diese Arbeit übernehmen sogenannte Distributoren, von denen es auch eine unüberschaubare Anzahl für die verschiedensten Einsatzzwecke gibt. Für Server ist Debian GNU/Linux (da! da ist es wieder) gut geeignet, weil die Betreuer dieser Distribution großen Wert auf stabile Programmversionen legen.

Das Unix-Gefühl

Die Unix-Philosophie basiert auf nur wenigen Objekttypen. Der wichtigste davon ist die Datei. In Unix ist praktisch alles eine Datei (sogar die Interaktion mit Geräten wird darüber abgebildet). Dateien sind in einer Baumstruktur hierarchisch in Verzeichnissen angeordnet. Laufwerksbuchstaben wie unter Windows gibt es nicht, alle Dateisysteme hängen in einem gemeinsamen Baum, der Wurzelknoten heißt / und / ist auch der Trenner zwischen den Hierarchieebenen des Baums.
Der zweite wichtige Objekttyp ist der Prozess — also das laufende Programm. Prozesse können weitere Prozesse starten. Sowohl Dateien als auch Prozesse haben einen Besitzer. Die daraus entstehende Rechtestruktur sehen wir uns später noch an.

Ein weiterer wichtiger Teil der Unix-Philosophie lautet „Nur ein Zweck für ein Werkzeug“. Auch das wird erst später Sinn ergeben.

Als Beispiel dafür, wie sich das auf die Architektur auswirkt: auch Ihr redet mit Linux über einen Prozess, die sogenannte Shell. Wie von so vielen anderen Dingen gibt es auch davon mehrere zur Auswahl (niemand hat gesagt, dass es nicht mehrere Werkzeuge für den gleichen Zweck geben soll), aber für uns reicht erstmal die Betrachtung der üblichen Linux-Standardshell bash.

Die Shell liest Eure Eingaben aus einer Pseudodatei („Standard Input“), interpretiert sie als Programmtext und startet weitere Prozesse für Euch. Das klingt jetzt auch erstmal abgehoben, aber auch darauf werden wir später wieder zurückkommen. Die Kommandos, die in der Shell zur Verfügung stehen, sind (praktisch) alle einzelne Programme, die als Dateien an bestimmten Stellen des Dateisystems liegen.

Wichtige Kommandos

Jetzt sehen wir uns mal die wichtigsten Unix-Kommandos an:

Das allerwichtigste Kommando ist man. Es zeigt die Manual Pages des Systems an. Darin sind die Befehle, Dateiformate und sogar Programmierschnittstellen dokumentiert. Der Stil ist für Anfänger nicht leicht zu verstehen, aber nach einiger Eingewöhnung bieten sie eine wichtige Referenz. Seht Euch zur Einstimmung mal man man an.

Bevor wir uns an die Liste machen noch eine Anmerkung zu Programmoptionen: durch die bereits erwähnte Verzweigung des Unix-Stammbaums haben sich für einige grundlegende Kommandos zwei Sätze von gängigen Optionen herausgebildet. Die meisten Linux-Distributionen sind  im Laufe ihrer Entwicklung zwischen den beiden größten Lagern („BSD“ und „System V“) gependelt, und so beherrschen die mit Linux gelieferten Varianten oft beide Sätze. Die aus der BSD-Ecke stammenden werden dabei häufig ohne, die aus der System-V-Ecke stammenden mit vorangestelltem – angegeben. Weil das noch nicht verwirrend genug war, hat das GNU-Projekt  dann noch einen dritten Satz Optionen mit langen Namen und — (also zwei Strichen) eingeführt.

Navigieren durch den Verzeichnisbaum

Da wie gesagt alles im Verzeichnisbaum liegt, müssen wir uns durch den bewegen können. Jeder Prozess hat immer ein Arbeitsverzeichnis. Das gerade aktuelle Arbeitsverzeichnis gibt pwd (print working directory) aus. Mit cd [Verzeichnisname] (change directory) können wir in ein tieferes, mit cd .. wieder eine Ebene nach oben gehen. cd ohne Argumente wechselt in Deine digitale Heimat, das sogenannte Homeverzeichnis.
Übung:

root@Debian-60-squeeze-64-minimal ~ # pwd
/root
root@Debian-60-squeeze-64-minimal ~ # cd ..
root@Debian-60-squeeze-64-minimal / # cd root
root@Debian-60-squeeze-64-minimal ~ #

Ansehen der Inhalte der aktuellen Ebene

Um zu erfahren, was denn im aktuellen Verzeichnis so rumliegt (und wohin wir überhaupt wechseln könnten) gibt es das Kommando ls, mit der Option -l generiert es seine Liste mit ausführlichen Zusatzinformationen.
Übung:

root@Debian-60-squeeze-64-minimal /tmp # ls
a.txt  b  c
root@Debian-60-squeeze-64-minimal /tmp # ls -l
total 4.0K
-rw-r--r-- 1 root root    0 Apr 18 22:11 a.txt
-rw-r--r-- 1 root root    0 Apr 18 22:11 b
drwxr-xr-x 2 root root 4.0K Apr 18 22:11 c
root@Debian-60-squeeze-64-minimal /tmp #

Die Spalten des langen Listings müssen wir uns jetzt mal ansehen. Von Links nach rechts: Berechtigungen, Linkzahl, Benutzer, Gruppe, Größe, Datum, Name. Die erklärungsbedürftigen Felder im Einzelnen:

Eigentum

Dateien gehören immer einem Benutzer und einer Gruppe. Es ist nicht erforderlich, dass der Benutzer, dem eine Datei gehört, Mitglied der Gruppe ist, der die Datei gehört.

Berechtigungen

Benutzer und Gruppe bilden die Basis für ein einfaches aber effektives Berechtigungskonzept. Jeweils für den Eigentümer, die Gruppe und den Rest der Welt lassen sich die drei Operationen „lesen“ (r), „schreiben“ (w) und „ausführen“ (x, diese Dateien können als „Programme“ benutzt werden) bzw. „betreten“ (auch x, für Verzeichnisse) erlauben oder verbieten:

-rwxrwxrwx
^^^^^^^^^^
||||||||||  Rechte für alle Benutzer ("Welt"):
|||||||||+--- ausführen / betreten
||||||||+---- schreiben
|||||||+----- lesen
|||||||     Rechte für die Gruppe:
||||||+------ ausführen / betreten
|||||+------- schreiben
||||+-------- lesen
||||        Rechte für den Eigentümer:
|||+--------- ausführen / betreten
||+---------- schreiben
|+----------- lesen
+---------- Typmarkierung:
              - = normale Datei, d = Verzeichnis, l = Link

Das werden wir später noch öfter in der praktischen Anwendung sehen.

Linkzahl

Eine Datei kann in Unix an mehreren Stellen im Verzeichnisbaum eingehängt sein (bitte versucht nicht, Euch das bildlich vorzustellen). Die werden hier gezählt. Erst, wenn die Datei nirgendwo mehr referenziert wird (der Linkcounter also 0 ist), verschwindet sie von der Festplatte. In der täglichen Benutzung könnt Ihr das fast immer ignorieren.

Dateien ansehen und editieren

Um den Inhalt einer Textdatei anzuzeigen können wir less benutzen (scrollen mit den Cursortasten, verlassen mit q), zur Bearbeitung gibt es einen bunten Strauß an Editoren (Vorsicht! Die dazugehörigen Religionskriege sind schlimmer als jede Windows-oder-Mac-Diskussion.), von denen ich zum Einstieg nano empfehle, weil der die gerade möglichen Befehle immer anzeigt. Mit rm werden wir unliebsame Dateien wieder los.
Übung:

root@Debian-60-squeeze-64-minimal ~ # less test.txt 
Hallo Wult!
root@Debian-60-squeeze-64-minimal ~ # nano test.txt

nano

root@Debian-60-squeeze-64-minimal ~ # less test.txt 
Hallo Welt!
root@Debian-60-squeeze-64-minimal ~ # rm test.txt
root@Debian-60-squeeze-64-minimal ~ #

Prozesse

ps zeigt die gerade laufenden Prozesse an, ps x nimmt in die Liste auch die Prozesse auf, die gerade nicht mit einem Terminal verbunden sind (hier haben wir jetzt ein Programm, das aus historischen Gründen mit BSD-Style-Optionen gestartet wird). Die erste Spalte dieser Liste ist die Prozess-Id. Wenn wir später mit kill Prozesse abschießen werden, dann brauchen wir die.
Übung:

root@Debian-60-squeeze-64-minimal ~ # ps
  PID TTY          TIME CMD
 3067 pts/0    00:00:00 bash
 3102 pts/0    00:00:00 ps
root@Debian-60-squeeze-64-minimal ~ #

So, das war jetzt eine grobe Übersicht über das Wichtigste — aber alles noch sehr theoretisch. Auf vieles müssen wir deshalb später noch einmal vertiefend in der praktischen Anwendung zurückkommen. In der nächsten Folge reden wir über Netzwerke und fangen tatsächlich mal mit der Serverkonfiguration an.

Kategorien
Blog

MES01: Wir klicken uns einen Server

Dieser Artikel gehört zur Serie Mein eigener Server.

Hardware wählen

Aus naheliegenden Gründen brauchen wir für die weiteren Kapitel einen Server. Die gibt es bei ganz vielen Hostern und mit sehr unterschiedlichen Leistungsdaten zu sehr unterschiedlichen Preisen zu mieten. Ich gebe hier immer nur Beispiele, Ihr könnt das alles auch anders machen oder woanders Mieten, und das wird dann meistens auch nicht besser oder schlechter sein.

Für unseren Zweck mieten wir mal bei Hetzner einen Virtuellen Server „vServer VQ 12„. Der stellt einen ganz guten Kompromiss aus Kosten und Leistung dar. Der Virtuelle Server ist so etwas wie ein Anteil an einem größeren Server. Wir bekommen 1 GB RAM und 40 GB Plattenplatz zugeteilt, das sollte erstmal reichen.

Für ein großes Blog oder viel Mail oder eine große Menge Dateiablage müssten wir entsprechend höher zielen. Ich persönlich habe z.B. einen „dedizierten“ Server, der einiges mehr leistet und mir allein zur Verfügung steht — benutze den aber auch mit mehreren Leuten und noch einigen Projekten.

Darüberhinaus gibt es noch die sogenannten Managed Server, bei denen der Dienstleister einige der hier beschriebenen Tätigkeiten übernimmt. Das ist aber mit Einschränkungen bei der Softwareinstallation verbunden, und außerdem will er dann auch Geld dafür. Schließlich ist es auch noch möglich, nur Platz in einem Serverschrank zu mieten und dort eigene Hardware hineinzustellen. All das ist nichts für uns.

Software wählen

Als Betriebssystem bestellen wir Debian Linux — Minimal und ohne Plesk, ihr sollt ja schließlich lernen, was da im Hintergrund passiert.

Bestellformular

Nach der Bestellung dauert es einige Zeit (bei virtuellen Servern nur wenige Minuten bis Stunden), dann kommt eine Mail:

Der Server ist fertig.

Die erste Verbindung

Um jetzt irgendwas mit dem Server machen zu können, brauchen ein Terminalprogramm und einen ssh-Client. ssh ist ein Protokoll, mit dem verschlüsselt Tastatureingaben zum Server hin und die Textausgabe zum Client zurück übertragen werden (mehr dazu später). Das klingt erst einmal nach reinem Befehle tippen, aber schon seit der Zeit der Textterminals gibt es auch ausgeklügelte Benutzerinterfaces, die darauf basieren. Das werden wir später noch sehen.

Die Macuser unter Euch müssen nichts installieren, für die Windowsbenutzer empfehle ich PuTTY.

Log geht’s, wir verbinden uns jetzt zum ersten mal zu unserer nagelneuen Außenstelle: auf dem Mac öffnet das Programm „Terminal“ und gebt ein ssh root@[die Adresse aus der Mail], unter Windows öffnet PuTTY und verbindet Euch zu der Adresse aus der Mail:

PuTTY-Startfenster

Jeder der ssh-Clients wird beim ersten Kontakt zum neuen Server eine Sicherheitsfrage nach dem „RSA-Fingerabdruck“ stellen. Im Moment haben wir keinen Grund anzunehmen, dass es sich nicht um den richtigen Server handelt, drum sagen wir einfach ja. Es passiert jetzt etwa folgendes (keine Sorge wenn das Passwort beim Tippen nicht zu sehen ist, auch nicht als ******, das gehört so):

Mac:~ dentaku$ ssh root@78.47.144.44
The authenticity of host '78.47.144.44 (78.47.144.44)' can't be established.
RSA key fingerprint is 6e:8a:dc:13:63:6c:03:8e:5a:45:cb:3e:13:99:36:f6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '78.47.144.44' (RSA) to the list of known hosts.
root@78.47.144.44's password:
Linux Debian-60-squeeze-64-minimal 2.6.32-5-amd64 #1 SMP Mon Feb 25 00:26:11 UTC 2013 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
root@Debian-60-squeeze-64-minimal ~ #

So, jetzt seid Ihr auf einem Unix-System. Herzlich Willkommen! Ändert erstmal das Passwort durch Eingeben des Befehls passwd (mit der Return-Taste abschicken und den Anweisungen folgen, es sind wieder keine ****** für das Passwort zu sehen, gewöhnt Euch dran).

root@Debian-60-squeeze-64-minimal ~ # passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@Debian-60-squeeze-64-minimal ~ #

Im nächsten Kapitel folgt eine ausführliche Rundtour durch Unix bzw. Linux. Für heute verlassen wir den Server mit dem Befehl exit.

Kategorien
Blog

MES00: Mein eigener Server — für Anfänger

Willkommen bei unserer kleinen Systemadministrationsschulung. Warum machen wir das?

In letzter Zeit erscheinen viele Artikel mit dem Fazit, dass man seine Daten doch besser auf eigener Infrastruktur behalten sollte. Der Anlass ist mal die Abschaltung eines Dienstes mal seltsame Auslegungen der Nutzungsbedingungen und mal die Ankündigung, dass Behörden hier oder anderswo problemlos in die Daten Einsicht nehmen können.

Für uns Softwareentwickler und Systemadministratoren ist das kein Problem, für andere Webbenutzer ungleich schwieriger. Ich hatte deshalb mal versprochen, eine Anleitung zu schreiben

Die im Web zu findenden Tutorials sind meist für Administratoren mit erheblichem Grundwissen geschrieben und erklären selten die Motivation hinter bestimmten Konfigurationsschritten — oder auch nur ihre Bedeutung.

Die folgende Serie zeigt Schritt für Schritt, wie Ihr einen eigenen Server unter Debian Linux mit Mail, Blog und ein paar anderen nützlichen Dingen aufsetzen könnt. Die Anleitungen sollen sich an Anfänger richten, Ihr dürft Euch nur nicht scheuen, Texte ins Terminalprogramm zu tippen und Konfigurationsdateien zu editieren. Unix-Grundwissen wird nicht vorausgesetzt.

Spätere Kapitel gehen davon aus, dass vorherige Kapitel abgearbeitet worden sind.

Morgen folgt Kapitel 01: „Wir klicken uns einen Server

Alle Kapitel werden auf dieser Seite verlinkt.