• Keine Ergebnisse gefunden

ICT-Infrastruktur für Bildungsaufgaben

N/A
N/A
Protected

Academic year: 2021

Aktie "ICT-Infrastruktur für Bildungsaufgaben"

Copied!
83
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

ICT-Infrastruktur für Bildungsaufgaben

Thomas Leitner <thomas.leitner@univie.ac.at>

Fakultät für Mathematik, Universität Wien Sommersemester 2014

Letzte Änderung: 2014-05-22 12:03

(2)

Foliensatz 0

Organisatorisches

Organisatorisches

• VO und UE werden gemeinsam als VU angerechnet

• Kann auch für die „VU Technische Praxis der Computersysteme 2“ verwendet werden

• VO-Termine

• Geblockt 8 Termine jeweils am Donnerstag 12:15 bis 15:00 im HS02, OMP1

• 06.03.2014, 13.03.2014, 20.03.2014, 27.03.2014, 03.04.2014 08.05.2014, 15.05.2014, 22.05.2014

• Prüfung mündlich

Inhalte der Vorlesung

• Systemadministration allgemein

• Paketverwaltung

• Benutzerverwaltung

• TCP/IP Grundlagen und Netzwerkkonfiguration

• Speichermanagement

• Datei-, Web-, SSH-Server

• Dateisysteme, Backup

• Netzwerksicherheit und Firewalls

• Logging

• Security Ziel:

Die Studierenden sind in der Lage, linuxbasierte Systeme zu installieren, zu warten und fachgerecht einzusetzen sowie das didaktische Potential dieser auszuschöpfen.

(3)

Foliensatz 1

Wiederholung TPDCS1

Inhalt

• Betriebssystem Linux

• Bash

• Dateisystem

• Prozesse

• Speicher

• Reguläre Ausdrücke

• Befehle

Betriebssystem Linux

• Kernel (u.a. Prozessverwaltung, virtuelles Dateisystem, Speicher, Netzwerk)

• Shell (Bash)

• Systemprogramme (z.B. GNU coreutils)

• Multi-User (Benutzer, Gruppen, Rechte) und Multi-Tasking

Bash – Allgemeines

• Interaktiver Kommandozeileninterpreter

• Text wird vom Benutzer eingegeben, von der Shell interpretiert, die dann einen oder mehrere Befehle ausführt

• POSIX-kompatibel, einige nützliche Erweiterungen (z.B. [[ ... ]])

• Tips zur Bedienung:

• Befehls-History: Pfeiltaste rauf & runter

• History-Search: Strg-r sucht rückwärts in der History

• Navigation in der Zeile:

• Strg-Links / Alt-b → Cursor ein Wort nach links

• Strg-Rechts / Alt-f → Cursor ein Wort nach rechts

• Strg-a / Strg-e → Cursor zum Anfang/Ende der Zeile

• Tabulator-Taste zum Vervollständigen

• Hilfe zu Befehlen und Konfigurationsdateien in den Manpages!

• Umgebungsvariablen (PATH, HOME, USER, …)

(4)

Bash – Konstrukte

• Reihenfolge der Verarbeitung einer Eingabezeile

• Auswertungsunterdrückung (Maskierungszeichen Backslash – \ – bzw. einfache/doppelte Anführungszeichen)

• Pipes (befehl1 | befehl2)

• Listen (befehl1; befehl2 && befehl3 || befehl4 &)

• Verbundbefehle (Ausführung in Sub-Shell, arithmetischer/logischer Ausdruck)

• Klammernexpansion (echo a{d,b,{1..3}}c)

• Pfadexpansion (rm datei*.tx?)

• Variablenexpansion (echo ${PATH/:/ - })

• Befehlssubstitution (VAR=$(cut -d: -f1 /etc/passwd))

• Bash-History-Expansion (echo !-1:$)

• Eingabe-/Ausgabe-Umleitung (befehl1 <file.txt bzw. befehl_1 > file.txt)

Bash Programmierung

• Tests (test, [, [[ ... ]])

• Verzweigungen (if, case)

• Schleifen (for, while)

• Funktionen (function name () { do_something; })

• Stellungs- und spezielle Parameter ($1, $@, $#, $?)

Dateisystem

• Virtuelles Dateisystem VFS (Abstraktionsschicht im Kernel, eine Sicht auf verschiedene Dateisysteme bzw. allgemeine Schnittstelle für Ein- und Ausgabe)

• Dateiattribute (Änderungsdatum, Besitzer, Gruppe, Berechtigungen, …)

• Berechtigungen (RWX, Besitzer/Gruppe/Rest, SUID, SGID, Sticky-Bit)

• Harte und weiche Links

Prozesse

• Kernel kann ELF-Binärprogramme, Skripts (Shebang!) und andere Binärprogramme mittels binfmt_misc Kernelmodul direkt ausführen

• Prozess = laufende Instanz eines Programmes (PID, PPID, UID, EUID, …)

• fork-Modell:

• Prozess A ruft fork() auf → Kindprozess B entsteht als Kopie des Prozesses A

• (Optional) Im Kindprozess B mittels exec() anderen Programmcode ausführen

• Prozess A warte auf Kindprozess B mittels wait() → Rückgabewert! – oder Kindprozess wird zu Zombie und vom init-Prozess entsorgt

• Interrupts (von Hardware über CPU an Kernel oder weiter über Kernel an Prozess; Scheduling!)

• Signale (von Prozess an anderen Prozess; HUP, INT, KILL, TERM, …)

(5)

Speicher

• Virtueller Speicher für Prozess (vom Kernel verwaltet, Prozess kennt den tatsächlichen Ort von Daten im RAM nicht; erhöht Sicherheit und Flexibilität)

• Dynamisches Laden von Daten in den RAM mittels Page Fault Swap-Dateien bzw.

• Swap-Partitionen

Reguläre Ausdrücke

• Zeichenklassen (\d, \w, [a-z0-9])

• Quantoren (*, +, ?, {n,m})

• Gruppen und Referenzen ((?:...), \1)

• Alternativen (|)

• Anker (^, $, \b)

• Für Befehle wie sed und grep, Texteditoren, Programmiersprachen, …

Befehle

• whoami, who, w, last, id, script, less, which, locate, xargs

• pwd, cd, ls, mkdir, rmdir, rm, mv, cp, find, touch, stat, file, chmod, chown, chgrp, umask, ln, readlink

• ps, pstree, kill, pgrep, pkill, top, nice, renice, free, swapon, swapoff

• cat, split, head, tail, sort, cut, paste, uniq, nl, wc, expand, unexpand, tee

• echo, printf, read, alias, unalias, source, export, sleep, timeout, set, unset, shift, shopt, exec

• mount, umount, df, du

• su, sudo

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(6)

Foliensatz 2

Systemadministration allgemein

Inhalt

• Aufgaben eines Systemadministrators

• Arbeiten als root

• Wichtige Verzeichnisse

• Syntax von Konfigurationsdateien

• Systemservices/Dämonen

• Hilfsmittel für Systemadministration

• Puppet

Aufgaben eines Systemadministrators

• Installation und Konfiguration von Servern und Arbeitsplatzrechnern (möglichst automatisiert, ev.

über ein Netzwerk, wiederholbar)

• Benutzerverwaltung (Anlegen, modifizieren und löschen von Benutzern und Gruppen)

• Installation und Konfiguration von Software (Benutzerapplikationen, konfigurieren des automatischen Einspielens von Sicherheitsupdates, erstellen systemweiter Standardkonfigurationen)

• Tausch von fehlerhafter Hardware (einzelne Komponenten, ganzer Rechner, Peripheriegeräte)

• Behebung von Softwareproblemen

• Backups (einrichten, kontrollieren, wiederherstellen)

• Monitoring (überwachen von Serversoftware, Netzwerk, … auf Probleme bzw. Angriffe)

• Erstellen einer Benutzungsordnung („Policy“, politischer Aspekt)

Arbeiten als root

• Systemadministration muss als Benutzer root durchgeführt werden, da nur dieser die nötigen Berechtigungen hat → birgt großes Gefahrenpotential!

• Es ist empfehlenswert, nicht direkt als root einzuloggen, sondern über su oder sudo kurzfristig root zu werden (besser nachvollziehbar, wer wann etwas als root gemacht hat).

• Die einzelnen Rechte von root können nicht auf mehrere Benutzer aufgeteilt werden. Über den Befehl sudo kann man aber trotzdem relativ einfach andere Benutzer Systemadministrationsaufgaben durchführen lassen.

(7)

Wichtig Verzeichnisse

• Die Lage der Konfigurations-, Daten- und Systemdateien ist bei den meisten Linux-Distributionen FHS-konform.

• /etc/ → Systemkonfigurationsdateien

• /var/ → Veränderbare Datendateien:

• /var/cache/ → Cachedaten von Applikationen

• /var/log/ → Logdateien

• /var/run/ → Laufzeitdaten von Prozessen

• /var/spool/ → Spooling von Daten (Spool = Simultaneous Peripheral Operation On-Line und aufspulen/abspulen; Zwischenlagerung von Druckjobs, Mails, …)

• /proc/ → Datendateien des Kernels (auch Informationen zu Prozessen)

• /sys/ → Informationen über alle Geräte, die der Kernel kennt, und Möglichkeit, diese zu konfigurieren

Syntax von Konfigurationsdateien

• Die Konfigurationsdateien unter Linux (Unix) sind (fast) alles Textdateien. Daher braucht man nur einen Texteditor (z.B. Vim), um sie zu bearbeiten.

• Textdateien haben einige Vorteile:

• Wird die Datei korrupt, kann man den Großteil trotzdem richtig auslesen.

• Man braucht nur einen Texteditor.

• Man wird sie auf zukünftigen Computern ohne spezielle Hilfsmittel sicher lesen können.

• Ein großer Nachteil ist, dass es keinen Standard für die Syntax von Konfigurationsdateien gibt:

• Tabellenstruktur (z.B. /etc/passwd)

• Ausführbare Datei (z.B. /etc/bash.bashrc)

• XML (z.B. /etc/fonts/fonts.conf)

• Assoziation von Parametern mit Werten, eventuell unterteil in Sektionene (z.B.

/etc/X11/xorg.conf)

• Spezielles Format

Systemservices/Dämonen

• Beim Systemstart werden durch den init-Prozess die nötigen Systemservices/Dämonen (Disk and execution monitor) gestartet.

• Dabei gibt es 8 sogenannte Runlevels, Zustände, in denen sich ein System befinden kann. Runlevel 0 wird benutzt um das System herunterzufahren, Runlevel 6 für einen Reboot und Runlevel 1 für den Single-User-Modus (danach befindet sich das System im Runlevel S).

• Welche Init-Skripte beim Systemstart bzw. beim Wechsel in einen Runlevel automatisch gestartet bzw. gestoppt werden, wird durch das init-Programm und dessen Konfiguration vorgegeben.

• Es gibt mehrere verschiedene init-Programme, früher SysV-Init mit den Init-Skripten (Shell-Skripte).

Um den Start zu optimieren, verwenden moderne Distributionen andere init-Programme (bei Ubuntu

(8)

z.B. Upstart, bei Fedora z.B. systemd).

Systemservices/Dämonen - upstart

• Bei Upstart liegen die Konfigurationsdateien in /etc/init/, das Verzeichnis /etc/init.d/ gibt es aber weiterhin (Upstart ist kompatibel zu SysV). Es enthält SysV-Init-Skripte, die noch nicht auf Upstart konvertiert worden sind bzw. symbolische Links für alle Upstart-Konfigurationsdateien.

• Durch symbolische Links in den Verzeichnissen /etc/rc{0..6}.d/ (SysV-Init) bzw. direkt in den Upstart-Konfigurationsdateien wird angegeben, was bei welchem Runlevel gemacht werden soll.

• Services können bei SysV direkt durch Aufruf des Init-Skriptes gestartet oder gestoppt werden. Für Upstart gibt es die Befehle service, start, stop und restart.

• Im Verzeichnis /etc/default/ finden sich zu vielen Systemservices und Dämonen zusätzliche Konfigurationsdateien (Shell-Skripte, welche Variablen definieren), z.B. /etc/default/dbus.

• Dämonen laufen im Hintergrund und führen wichtige Systemaufgaben aus (z.B. udevd oder dbus) oder stellen bestimmte Services bereit (z.B. sshd oder atd).

• Kommuniziert wird mit Dämonen meist über Signale (z.B. wird HUP oft verwendet, um die Konfiguration neu zu laden).

Systemservices/Dämonen - udev, dbus

• Zwei wichtige Systemservices:

udev ist verantwortlich für die automatische Erstellung von Gerätedateien in /dev/.

D-Bus dient zur Interprozesskommunikation. Es stellt eine genormte Schnittstelle zur Verfügung, über die sich Prozesse gegenseitig Nachrichten schicken können. Zusätzlich wird auch die Möglichkeit geboten, dass sich ein Prozess für eine bestimmte Nachricht registriert und er dann automatisch benachrichtigt wird, sobald jemand die Nachricht schickt (z.B.

Netzwerkverbindung hergestellt/getrennt).

Systemservices/Dämonen - systemd

• Das init-Programm systemd hat in der jüngsten Vergangenheit an Popularität gewonnen. Es wurde schon länger z.B. in Fedora benutzt und wird nun bald auch das Standard-init-Programm in Debian und Ubuntu sein.

• systemd hat einige Vorteile, bringt aber auch einige tiefgreifende Änderungen mit sich:

• Der Start des Systems ist sehr schnell, er dauert meist nur wenige Sekunden.

• Abhängigkeiten zwischen Services werden automatisch aufgelöst.

• systemd ist nicht mehr portabel, da es viele Linux-spezifische Funktionalitäten braucht.

Siehe auch: Debatte über Systemd bei Debian

(9)

Hilfsmittel für Systemadministration 1

• Es gibt einige Programme, über die zentral ein Linuxsystem administriert werden kann (z.B.

Webmin).

• Die Benutzung von Webmin (oder anderer solcher Programme) hat Vor- aber auch Nachteile:

• Pro: Man muss die unterschiedlichen Konfigurationsdateien und deren Syntax nicht kennen, um Änderungen vorzunehmen.

• Pro: Einheitliche Oberfläche, gut aufbereitet, leicht verständlich.

• Contra: Die Version des Admin-Programms muss zu den Versionen der Programme passen, die man konfigurieren will. Ist ein Programm neuer und hat es Änderungen in der Syntax oder der Konfigurationsparameter gegeben, muss man warten, bis das Admin-Programm nachzieht.

• Contra: Automatisches Ändern von Konfigurationsdateien über Tools kann gefährlich sein.

• Contra: Man wird eventuell von „abhängig“ von dem Admin-Programm.

Hilfsmittel für Systemadministration 2

• Besser sind Konfigurationsmanagementprogramme (z.B. Puppet, Chef, CFEngine), die meist aus einer Server- und einer Client-Komponente bestehen. Auf Wikipedia gibt es einen Vergleich von mehreren dieser Programme).

• Diese erlauben es, einen Rechner reproduzierbar in einen bestimmten Zustand zu versetzen. Dazu wird der gewünschte Zustand mittels Konfigurationsdateien definiert und das Programm weiß, was es ändern muss, um diesen Zustand zu erreichen.

• Sobald man mehrere Server/Arbeitsplatzrechner verwalten muss, sollte man sich überlegen, ob man nicht so ein Programm einsetzen will.

• Einige der Programme (z.B. Puppet und Chef) erlauben auch die Ausführung ohne Serverdienst. Das ist z.B. sehr nützlich, um nach einer Neuinstallation des eigenen Rechners schnell wieder alles richtig konfiguriert zu haben.

Puppet

• Bei Puppet wird der gewünschte Zustand, in dem sich das System befinden soll, mit Hilfe einer deklarativen Sprache in Dateien mit der Endung .pp (sogenannten Manifesten) definiert.

Die Sprache erlaubt unter anderem die Definition von Ressourcen, die auf dem System (nicht) vorhanden sein sollen, wobei konditionelle Ausdrücke verwendet werden können.

• Die Client-Software von Puppet interpretiert das Manifest und erstellt daraus einen Katalog, der spezifisch für das System ist. Der Inhalt des Katalog wird dann mit dem aktuellen Zustand des Systems abgeglichen und nötige Änderungen werden durchgeführt.

• Die Dokumentation zu Puppet ist sehr ausführlich, beginnen sollte man mit Learning Puppet (erklärt grundlegenden Begriffe und Funktionsweisen).

(10)

Puppet - Nutzungsvarianten

• Puppet kann sowohl mit als auch ohne Server betrieben werden. Beide Varianten haben Vor- und Nachteile. Werden viele System mit Puppet verwaltet, sollte man die Server-Variante verwenden.

• Zum Betrieb ohne Server braucht man nur das Paket puppet-common installieren. Diese Variante ist zum Beispiel ideal für die Konfiguration eines oder weniger Systeme (z.B. zur Konfiguration des eigenen Rechners).

• Für den Server-Betrieb benötigt man das Paket puppetmaster für den Server und das Paket puppet für die Clients. Nach der Installation läuft der Server mit einer Standardkonfiguration.

• Das globale Konfigurationsverzeichnis /etc/puppet enthält folgende Dateien:

• auth.conf → Allgemeine Zugriffssteuerung für die Serverkomponente

• fileserver.conf → Zugriffssteuerung für die Dateiserverkomponente

• puppet.conf → Konfigurationsdatei

• Die Konfigurationsdatei enthält Blöcke für die verschiedenen Komponenten (agent, master, …), in denen die Konfigurationsoptionen gesetzt werden können.

Puppet - Facter

• Puppet benutzt das Programm Facter, um Informationen über ein System herauszufinden. Wie Puppet ist auch Facter in Ruby implementiert und kann um zusätzliche Informationsmodule erweitert werden.

• Die durch Facter gewonnen Informationen können in Manifesten als Variablen und somit auch in Bedingungen benutzt werden.

• Beispielausgabe:

$ facter | head -n 5 architecture => amd64 augeasversion => 0.10.0

boardmanufacturer => Oracle Corporation boardproductname => VirtualBox

boardserialnumber => 0

Puppet - Module

• Neben der Definition von Ressourcen in Manifesten können auch Dateien und Templates zur Verwendung hinterlegt werden.

• Um die Wiederverwendbarkeit zu erhöhen, können zusammengehörige Manifeste, Dateien und Templates in Module verpackt werden.

• Es gibt mittlerweile schon sehr viele vorgefertigte Module, die man einbinden kann. Die Webseite Puppet Forge wird von den Entwicklern von Puppet betreut und enthält eine Vielzahl an Modulen.

(11)

Puppet - Ressourcen

Ressourcen definieren über Attribute, wie das System auszusehen hat. Es müssen dabei nicht alle Attribute angegeben werden. Falls benötigte Attribute fehlen, benutzt Puppet, wenn möglich, die systemabhängigen Standardwerte dafür. Ansonsten wird eine Fehlermeldung produziert.

Wichtig: Nur wirklich in einer Ressource definierte Attribute werden über Puppet verwaltet, alle anderen Attribute bleiben unverändert!

• In Puppet sind schon die wichtigsten Ressourcetypen inkludiert, z.B. zur Paketverwaltung (package), Benutzer- und Gruppenverwaltung (user und group) und Dateiverwaltung (file).

• Für jede Plattform gibt es unterschiedliche Provider für einen Ressourcetyp. Puppet erkennt üblicherweise automatisch den zu benutzenden Provider, man kann aber auch einen spezifizieren.

Diese Provider sind unterschiedlich gut, d.h. manche unterstützen mehr Operationen als andere.

Puppet - Ressourcendeklarationen

• Jede Ressource besitzt immer einen Typ, einen Titel und optional ressourcespezifische Attribute.

• Der Titel muss innnerhalb eines Ressourcetyps eindeutig sein und über die Kombination Ressourcetyp/Titel kann man die Ressource später referenzieren.

• Die Syntax für eine Ressourcendeklaration sieht so aus:

type {'title':

  attribute => value, }

• Zusätzlich kann man bei jedem Ressourcetyp sogenannte Metaparameter (wie Attribute) verwenden, die es z.B. erlauben, Abhängigen zwischen Ressourcen zu definieren.

Puppet - Beispielmanifest

case $operatingsystem {

  centos, redhat: { $service_name = 'ntpd' }   debian, ubuntu: { $service_name = 'ntp' } }

package { 'ntp': ensure => installed } service { 'ntp':

  name => $service_name,   ensure => running,   enable => true,

  subscribe => File['ntp.conf'], }

file { 'ntp.conf':

  path => '/etc/ntp.conf',   ensure => file,

  require => Package['ntp'],

  source => "puppet:///modules/ntp/ntp.conf", }

(12)

Puppet - ohne Server

• Einzelne Änderungen an Ressourcen können über puppet resource gemacht werden bzw. kann über diesen Befehl der Zustand einer Ressource als Puppet-Manifest ausgegeben werden.

$ puppet resource user root shell=/bin/sh

notice: /User[root]/shell: shell changed '/bin/bash' to '/bin/sh' user { 'root':

  ensure => 'present',   shell => '/bin/sh', }

• Der Befehl puppet apply wird benutzt, um ein ganzes Manifest auf ein System anzuwenden. Dazu wird kein Server benötigt.

$ puppet apply manifest.pp

Puppet - mit Server

• Die Standardserverkonfiguration nach der Installation des Pakets reicht für wenige Clients aus (bei vielen Clients sollte man einen anderen als den eingebauten Webserver Webrick verwenden).

• Damit ein Client weiß, wie der zu nutzende Server heißt, muss man in der Hauptkonfigurationsdatei im Block agent die Variable server auf die IP-Adresse (oder den DNS-Namen) des Servers setzen.

• Die Kommunikation zwischen Client und Server wird über SSL verschlüsselt und jeder Client braucht ein gültiges, vom Server signiertes Zertifikat, um einen Katalog zu bekommen. Daher wird beim erstmaligen Aufruf von puppet agent ein Zertifikatsfehler ausgegebgen.

• Um diesen Fehler zu beheben, muss am Server die Zertifikatsanfrage bestätigt und das Client- Zertifikat mittels puppet cert sign HOSTNAME signiert werden. Danach sollte der Client ohne Problem auf den Server zugreifen können.

• Bei einer Anfrage des Clients interpretiert der Server das in /etc/puppet/manifests/site.pp definierte Manifest und erstellt daraus einen Katalog, der an den Client zurückgesandt und auf das System angewandt wird.

Puppet - Beispiele

Es werden in dieser Lehrveranstaltung immer wieder Beispielmanifeste verwendet, um zu zeigen, wie man mit Puppet Aufgabenstellung lösen könnte. Zum Beispiel:

• Anlegen eines lokalen Benutzers und einer lokalen Gruppe (Ressourcen user und group)

• Installation von Paketen, die verschiedene Namen unter verschiedenen Distributionen haben (Ressource package)

• Erstellen eines Moduls zur Einrichtung eines OpenSSH-Servers

• Ändern von Dateien mit Hilfe von augeas

(13)

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(14)

Foliensatz 3

Software/Paketverwaltung

Inhalt

• Software unter Linux

• Geschichtliches

• Softwarepaketverwaltung

• Repositories und Pakete

• Befehle

• Paketverwaltung mit Puppet

Software unter Linux 1

Unter Linux gibt es eine andere Herangehensweise an Software als unter Microsoft Windows oder Apple Mac OS X.

Während in den letzteren zwei Betriebssystem die Dateien einer Applikation zumeist in einem einzigen Verzeichnis zu finden sind, sind die Dateien einer Applikation unter Linux auf mehrere Verzeichnisse aufgeteilt:

• /bin/ → Hier liegen die ausführbaren Dateien, wenn sie für den Systembetrieb wichtig sind.

• /usr/bin/ → Hier liegen alle sonstigen ausführbaren Dateien.

• /usr/lib/ → Hier liegen die benötigten Bibliotheken.

• /usr/share/APP_NAME/ → Hier liegen Datendateien (z.B. Bilder).

• /usr/share/doc/PAKET_NAME → Hier findet man die Dokumentation zum Paket.

• /usr/share/man/ → In diesem Verzeichnisbaum werden die Manpages abgelegt.

• /sbin/ und /usr/sbin/ → Ausführbare Dateien für den Administrator

Software unter Linux 2

• Unter Windows installieren alle Applikationen alle benötigten Bibliotheken, die nicht auf dem System installiert sind, entweder in das System- oder das Applikationsverzeichnis.

• Im Gegensatz dazu wird unter Linux eine Bibliothek nur einmal separat von den Applikationen installiert (in /usr/lib/) und alle Applikationen können darauf zugreifen. Durch die standardisierten Bibliotheksnamen und die Verwendung symbolischer Links ist es auch möglich, mehrere Versionen ein und derselben Bibliothek auf einem System installiert zu haben.

• Das System von Linux hat mehrere Vorteile:

• Es ist bekannt, wo sich alle Bibliotheken befinden und welche installiert sind.

• Weniger Speicherplatz wird gebraucht.

• Bei Sicherheitsproblemen muss man die Bibliothek nur an einer Stelle austauschen.

• Das hat aber auch zur Folge, dass man sicherstellen muss, dass alle benötigten Komponenten für

(15)

eine Applikation installiert sind. Hier kommt die Softwarepaketverwaltung von Linux ins Spiel.

Geschichtliches

• Fast alle Softwarepakete, die für Linux verfügbar sind, können gratis benutzt werden (z.B. jede GNU Software). Alleine bei einer Basisinstallation werden hunderte wichtige Pakete installiert. Ohne diesen Grundgedanken der freien Software wäre Linux nicht das, was es jetzt ist!

• Als der Linux Kernel noch sehr jung war (Anfang der 90er Jahre), haben die Softwareentwickler in der Linux-Community rasch festgestellt, dass es zwar gut ist, frei verfügbare Software zu haben, aber dass man es den meisten Benutzern nicht zumuten kann, diese selbst zu kompilieren. Neben dem Kernel braucht man ja noch jede Menge anderer Software (Shell, C-Bibliothek, …), um ein funktionierendes System zu erhalten.

• Das Ergebnis war, dass man den Linux-Kernel und die nötige Software im Binärformat in Softwarepaketen in einer sogenannten Distribution zur Verfügung stellte. Gab es ganz am Anfang nur sehr primitive Mittel, um den Linux-Kernel und die Software mittels so einer Distributionen zu installieren, ging die Entwicklung rasch voran und schon 1993 gab es die ersten Distributionen auf Basis von dpkg (Debian) und rpm (Red Hat).

Softwareverzeichnisse

• Die meisten Open Source Projekte können nicht wie Firmen durch Marketing auf sich aufmerksam machen, da sie einfach nicht das Geld dafür haben. Viele Entwickler haben nicht einmal selbst einen Webserver, um die Software zu publizieren.

• Dadurch gab es schon sehr früh Dienste, die es Entwicklern ermöglichte, Softwareprojekte einfach durchzuführen. Dazu stellen diese Dienste Webspace, Issue Tracker, Versionskontrollsysteme und einiges mehr bereit.

• Das hat nicht nur für die Entwickler Vorteile, sondern auch Anwender haben eine (oder mehrere Anlaufstellen), wo sie nach Software suchen können.

• Einer der ältesten solcher Dienste ist SourceForge. Die Software dahinter kann man selbst kostenlos verwenden und es gibt einige Webseiten im Stil von Source Forge, die sich auf spezielle Software beschränken.

• Einige andere Dienste sind Github (derzeit der populärste), Google Code und Microsoft CodePlex.

Auf der Webseite FreeCode werden Neuigkeiten zu vielen Open Source Projekten zusätzlich bekanntgegeben.

Softwarepaketverwaltung - Repositories

• Einer der wichtigsten Unterschiede zwischen den verschiedenen Linux-Distribution ist diese Softwarepaketverwaltung.

• Die zwei verbreitetsten Paketformate sind deb („Debian package“; von Debian, Ubuntu und anderen Debian-Derivaten verwendet) und rpm („RPM Package Manager“; z.B. von Red Hat und openSUSE verwendet). In der Vorlesung werden wir nur Ubuntu und das deb-Format betrachten.

• Die Softwarepakete werden über ein sogenanntes Repository zur Verfügung gestellt, welches spezifisch für jede Distribution ist. Es umfasst jeden Typ von Software (Kernel, Administration, Anwendung) und zusätzlich auch Dokumentation sowie Default-Konfigurationen.

(16)

• Das Ubuntu Package Repository bietet einen Überblick über alle Pakete, die man in Ubuntu direkt über die eingebaute Paketverwaltung installieren kann.

Softwarepaketverwaltung - Pakete

• Die Softwarepakete unter Ubuntu beinhalten unter anderem folgende Komponenten (genaue Informationen dazu sind im Debian FAQ zu finden):

• Programmdateien, Konfigurationsdateien, sonstige Daten

• Skripte, die bei der (De)Installation benötigt werden

• Meta-Information (Name, Version, Beschreibung, Abhängigkeiten, …)

• Signatur (zur Sicherstellung, dass niemand das Paket verändert hat)

• Ein ganz wichtiger Punkt ist, dass zwischen diesen Paketen Abhängigkeiten definiert sind. Das heißt in der Praxis, dass ein Paket zusätzlich die Anwesenheit von weiteren Paketen benötigen kann.

So wird zum Beispiel sichergestellt, dass bei der Installation eines Audio-Players die nötigen Audio- Codecs installiert werden.

Abhängigkeiten des Pakets coreutils

Das Programm apt-rdepends erleichtert die Analyse von Paketabhängigkeiten, z.B. durch das Erstellen solcher Grafiken.

apt-rdepends -d coreutils | dot -Tpng >coreutils.png

Softwarepaketverwaltung - Werkzeuge

Unter Ubuntu gibt es zwei primäre Werkzeuge, die für die Verwaltung von Paketen und Repositories verwendet werden:

dpkg → Dieses Werkzeug arbeitet auf der untersten Ebene, also direkt mit den Paketen. Es wird

(17)

benutzt um einzelne Pakete zu installieren, zu entfernen bzw. um allgemein Pakete zu verwalten.

apt → Die Abkürzung für Advanced Packaging Tool bezeichnet eine Familie von Programmen, die auf dpkg aufbauen und für die eigentliche Paketverwaltung benutzt werden. Es besitzt unter anderem eingebaute Funktionalitäten zum Verwalten von Repositories, Herunterladen von Paketen und zum automatischen Installieren von Abhängigkeiten.

Paketverwaltung mit dpkg

dpkg - Verwaltet deb-Softwarepakete

» Optionen: -i Package.deb → installieren eines Pakets, -l → auflisten aller installierten Pakete, -r Paketname → entfernen eines Pakets, -L Paketname → Dateien des Pakets auflisten, -S Pfad → Paket suchen, in dem der Pfad vorkommt.

» $ dpkg -l | grep dpkg

ii dpkg 1.16.7ubuntu6 amd64 Debian package management system

ii dpkg-dev 1.16.7ubuntu6 all Debian package development tools

ii libdpkg-perl 1.16.7ubuntu6 all Dpkg perl modules

$ dpkg -S /usr/bin/dpkg dpkg: /usr/bin/dpkg

Paketintegrität mit debsums überprüfen

Für jede Datei in einem Paket wird ein kryptographischer Hashwert erstellt (ein MD5-Hashwert).

Dadurch kann man später überprüfen, ob eine Datei seit der Installation verändert worden ist.

Falls man ein verändertes Paket findet, kann man dieses mit apt-get install --reinstall Paket neu installieren.

debsums - Überprüft MD5-Werte von installierten Paketen

» Optionen: -s → Nur Fehler ausgeben, -c → Veränderte Dateien ausgeben.

» $ debsums -s curl

$ echo test > /usr/bin/curl

$ debsums curl

/usr/bin/curl FAILED /usr/share/doc/curl/MANUAL.gz OK /usr/share/doc/curl/TheArtOfHttpScripting.gz OK /usr/share/doc/curl/copyright OK /usr/share/man/man1/curl.1.gz OK

$ apt-get install --reinstall curl ...

$ debsums -s curl

$

Verwalten von Repositories

• Repositories werden über die APT-Familie von Werkzeugen verwaltet. Die Konfigurationsdateien liegen in /etc/apt/:

• sources.list → Definiert die Hauptrepositories, die das System verwenden soll.

• sources.list.d/*.list → Zusätzliche Repositories, die verwendet werden sollen.

• apt.conf.d/* → Konfigurationsdateien

• trusted.gpg → GnuPG Schlüsseldatei.

(18)

• Repositories sind über HTTP oder FTP freigegeben Verzeichnisse, die einer bestimmten Struktur folgen. In dieser Struktur gibt es neben den eigentlichen Paketdateien (mit der Endung .deb) auch Dateien mit Informationen über alle verfügbaren Pakete des Repositories.

• Die Liste der Paketdaten eines Repositories wird (ähnlich wie Pakete) mit Hilfe einer Signatur vor Fälschung geschützt. Die dafür benötigten Schlüssel werden in der oben angegeben Datei verwaltet.

Verwalten von Repositories - apt-key

apt-key - Verwaltet Repository-Schlüssel

» Befehle: list → Auflisten aller Schlüssel, add Datei → Hinzufügen eines Schlüssel aus einer Datei, del KeyID → Löschen eines Schlüssels.

» $ apt-key list | head -n 11 /etc/apt/trusted.gpg

---

pub 1024D/437D05B5 2004-09-12

uid Ubuntu Archive Automatic Signing Key <ftpmaster@ubuntu.com>

sub 2048g/79164387 2004-09-12 pub 1024D/FBB75451 2004-12-30

uid Ubuntu CD Image Automatic Signing Key <cdimage@ubuntu.com>

pub 1024D/3E5C1192 2010-09-20

uid Ubuntu Extras Archive Automatic Signing Key

<ftpmaster@ubuntu.com>

Verwalten von Repositories - apt-get

apt-get - APT Paketverwaltungstool

» Bietet extrem viele Unterbefehle und Optionen (und hat sogar Super-Kuh-Fähigkeiten…).

» Die wichtigsten Befehle:

• update → Paketquellen von Repositories herunterladen und überprüfen, ob Updates vorhanden sind

• upgrade → Alle Pakete auf den neuesten Stand bringen (zuvor ein update machen)

• install Paket... → Installiert die Pakete und eventuell benötigte Abhängigkeiten

• remove Paket/purge Paket → Entfernen das Paket (und im zweiten Fall auch die Konfigurationsdateien)

Verwalten von Repositories - apt-cache

apt-cache - Durchsucht den APT-Cache

» Nach einem apt-get update liegen die Paketquellen lokal am Rechner und können mit Hilfe dieses Programms durchsucht werden.

» Befehle: show → Informationen zu einem Paket anzeigen, search → Mit Hilfe eines Regexps die Paketquellen durchsuchen

» $ apt-cache search kramdown

ruby-kramdown - Fast, pure-Ruby Markdown-superset converter

$ apt-cache show kramdown | head -n 10 Package: ruby-kramdown

Priority: optional Section: universe/ruby Installed-Size: 1349

(19)

Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>

Original-Maintainer: Debian Ruby Extras Maintainers <pkg-ruby-extras- maintainers@lists.alioth.debian.org>

Architecture: all Version: 0.13.7-2

Depends: ruby | ruby-interpreter, ruby-coderay, libjs-jquery

Filename: pool/universe/r/ruby-kramdown/ruby-kramdown_0.13.7-2_all.deb

Automatisches Update - unattended-upgrades

Um Sicherheitsupdates automatisch einspielen zu lassen, gibt es einige Möglichkeiten (z.B. cron-apt und unattended-upgrades).

Für die Verwendung von unattended-upgrades das gleichnamige Paket installieren und die Konfiguration anpassen:

• Das Programm durch Setzen der folgenden Optionen in /etc/apt/apt.conf.d/10periodic aktiveren:

APT::Periodic::Update-Package-Lists "1";

APT::Periodic::Unattended-Upgrade "1";

Die erste Option stellt sicher, dass die Repository-Daten aktuell sind und die zweite aktiviert die automatischen Updates mittels unattended-upgrades.

• In der Datei /etc/apt/apt.conf.d/50unattended-upgrades sollte man zusätzlich zumindest noch einstellen, welche Repositories für Updates herangezogen werden sollen, wenn man mit den Standardeinstellungen nicht zufrieden ist (Option Unattended-Upgrade::Allowed-Origins).

Das Programm wird dann regelmäßig durch den Cron-Job /etc/cron.daily/apt ausgeführt.

Paketverwaltung mit Puppet

• Pakete werden in Puppet über die Ressource package verwaltet.

• Unter Ubuntu wird standardmäßig der Provider apt verwendet, alternativ dazu gäbe es noch aptitude und dpkg.

• Wichtige Attribute:

name: Der Name des Pakets (falls nicht angegeben, wird der Titel verwendet).

ensure: Der gewünschte Zustand (present oder installed, absent, purged, held, latest oder eine Versionsnummer; falls nicht angegeben wird der Wert installed genommen).

responsefile: Eine Datei mit den benötigten Antworten, die von dem Paket abgefragt werden.

Paketverwaltung mit Puppet - Beispiele

• Installation von OpenSSH-Server und -Client:

package {'openssh-client':

  ensure => latest }

package {'openssh-server': }

(20)

• Sicherstellen, dass das Paket ntp nicht installiert ist:

package {'ntp':

  ensure => purged }

Dateiverwaltung mit Puppet

• Dateien werden in Puppet über die Ressource file verwaltet.

• Unter Ubuntu wird standardmäßig der Provider posix verwendet.

• Wichtige Attribute:

path: Der absolute Pfad der Datei (falls nicht angegeben, wird der Titel verwendet).

ensure: Der gewünschte Zustand (present, absent, file, directory oder link)

backup: Spezifiziert, ob und wie ein Backup gemacht werden soll (false, Zeichenkette beginnend mit Punkt oder sonstige Zeichenkette)

content: Der Inhalt der Datei (nicht gleichzeitig mit source verwendbar).

source: Eine URI, deren Inhalt verwendet werden soll (lokale Datei oder vom Puppetserver).

target: Linkziel.

owner: Der Besitzer der Datei.

group: Der Gruppenbesitzer der Datei.

mode: Die Rechte der Datei.

Dateiverwaltung mit Puppet - Beispiele

• Anlegen eines Verzeichnisses:

file {'/var/local': ensure => directory}

• Erstellen eines symbolischen Links:

file {'/var/local/test':

  ensure => link,

  target => '/etc/modules' }

• Erstellen einer Datei mit einem bestimmten Inhalt:

file {'/etc/my.secret':

  owner => root,   group => root,   mode => 600,

  content => 'My secret secret' }

• Kopieren einer Datei von der Dateisektion ‚common‘ vom Puppetserver:

file {'/etc/ssh/sshd_config':

  ensure => present,   owner => root,   group => root,   mode => 644,

  source => ["puppet:///common/sshd_config.$fqdn", 'puppet:///common/sshd_config'] }

(21)

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(22)

Foliensatz 4

Benutzerverwaltung

Inhalt

• Allgemeines

• Merkmale von Benutzer und Gruppen

• Lokale Benutzer und Gruppen

• PAM und NSS

• Befehle für die Benutzer- und Gruppenverwaltung

• Benutzer- und Gruppenverwaltung mit Puppet

Allgemeines 1

Unter Linux gibt es ein einfaches Benutzer(account)- bzw. Berechtigungskonzept:

• Es gibt einen speziellen Benutzer, üblicherweise root genannt, der alles darf.

• Daneben gibt es noch viele „normale“ Benutzer, die grundsätzlich die gleichen Rechte haben.

• Ein Benutzer ist auch immer einer oder mehreren Gruppen zugeordnet, die bestimmte Rechte haben.

Allerdings gibt es eine Vielzahl an Möglichkeiten, wie man bestimmten Benutzern mehr erlauben kann:

• durch Zuordnung zu bestimmten Gruppen

• über den sudo-Befehl

• durch Zuordnung sogenannter Fähigkeiten (Capabilities; seit Linux 2.2)

Wichtig ist auch immer der Unterschied Authentifikation (Bin ich wirklich der, der ich vorgebe zu sein?) und Autorisation (Was darf ich?)!

Allgemeines 2

Wie generell bei der Systemadministration ist es auch bei der Benutzerverwaltung wichtig, möglichst alles zu automatisieren:

• Anlegen von Benutzern (kann in manchen Umgebungen aus vielen Schritten bestehen, z.B. Anlegen eines Benutzerkontos in einem LDAP-Verzeichnis, Erstellen des Home-Verzeichnisses und eines Windows-Profil-Verzeichnisses auf einem Dateiserver, Eintragen des Benutzers in Mailing-Listen, …)

• Löschen von Benutzern (Benutzerkonto und sämtliche Daten löschen; zur Sicherheit ein Backup der Daten machen)

• Regelmäßiges Entfernen von „Karteileichen“ aus dem System

Damit können Benutzerfehler vermieden und alle Schritte auch ohne Zusatzaufwand dokumentiert werden.

(23)

Benutzer - Merkmale

Jeder Benutzer besitzt unter Linux bestimmte Merkmale:

Name: Ein eindeutiger Loginname für den Benutzer.

UID (User ID): Eine eindeutige Nummer für den Benutzer (>=0).

GID (Group ID): Die Nummer der primären Gruppe des Benutzers.

GECOS-Feld: Enthält den realen Namen sowie eventuell zusätzliche Informationen über den Benutzer (z.B. Raumnummer und Telefonnummer). Der Name stammt von frühen Unix-Maschinen mit dem Namen GECOS (General Comprehensive Operating System), die dieses Feld für zusätzliche Informationen nutzten.

Home-Verzeichnis: Das Verzeichnis, in dem der Benutzer alle seine Daten abspeichern kann bzw. in dem seine Konfigurationsdateien liegen (üblicherweise /home/BENUTZER_NAME).

Login-Shell: Der Pfad des Programms, das beim Einloggen des Benutzers ausgeführt werden soll.

Benutzer - Details zu Merkmalen

• Der Loginname sollte nur aus Kleinbuchstaben, Ziffern und dem Unterstrich bestehen und mit einem Buchstaben beginnen (siehe auch Sektion CAVEATS in useradd(8)).

• Die Loginnamen dienen lediglich der Darstellung gegenüber Benutzern des Systems, intern (z.B. auf Prozess- und Dateisystemebene) werden immer die numerischen Werte (UID, GID) verwendet.

• Die Anzahl der möglichen UIDs/GIDs seit Linux 2.6 ist 4294967296 (i.e. 2^32).

• Der spezielle Benutzer, root, muss die UID 0 haben (ist natürlich standardmäßig der Fall).

• Das Home-Verzeichnis eines Benutzers muss nicht unbedingt existieren. Als Ersatz wird dann das Root-Verzeichnis (/) verwendet. Da ein normaler Benutzer nicht die Berechtigung hat, im Root- Verzeichnis Dateien anzulegen/zu verändern, funktionieren dann aber einige Sachen nicht richtig (z.B. funktioniert das Einloggen auf der graphischen Oberfläche nicht).

• Die Informationen im GECOS-Feld werden von einigen Applikationen ausgewertet (z.B. vom Programm finger), sind aber nicht direkt für das System wichtig.

Gruppen

• Wie Benutzer haben auch Gruppen bestimmte Merkmale:

Name: Ein eindeutiger Gruppenname.

GID: Eine eindeutige Nummer für die Gruppe.

Gruppenmitglieder: Eine Liste der Benutzer, die in dieser Gruppe Mitglied sein sollen.

• Jeder Benutzer hat eine primäre Gruppe: Das ist die Gruppe, die direkt bei den Merkmalen des Benutzers angegeben ist.

• Die primäre Gruppe wird z.B. beim Anlegen von neuen Dateien oder beim Starten von Prozessen verwendet (jeder Datei/jedem Prozess ist ja sowohl eine UID als auch eine GID zugeordnet, um Berechtigungen zu prüfen).

• Zusätzlich kann ein Benutzer Mitglied in beliebigen anderen Gruppen sein, das sind dann die sekundären Gruppen des Benutzers. Temporär kann ein Benutzer mittels des Befehls newgrp seine primäre Gruppe ändern.

(24)

Lokale Benutzer/Gruppen

• Standardmäßig werden Benutzer und Gruppen lokal am System definiert. Dazu werden die folgenden Dateien verwendet:

• /etc/passwd: Benutzerdaten

• /etc/group: Gruppendaten

• /etc/shadow: Passwörter und Passwortrichtlinien für Benutzer

• /etc/gshadow: Passwörter für Gruppen

• Wichtig: Diese Dateien sollten nur mit den Befehlen vipw bzw. vigr editiert werden, um Datenkorruption vorzubeugen. Schleicht sich nämlich ein Fehler ein, so kann es sein, dass man nicht mehr einloggen kann!

Lokale Benutzer - /etc/passwd 1

• In der Passwortdatei /etc/passwd sind die Benutzer mit ihren Merkmalen gespeichert. Diese Datei muss von allen Benutzer gelesen werden können. Im Gegensatz zu ihrem Namen sollte das Passwort in der Passwortdatei nicht gespeichert werden!

• Jede Zeile beschreibt einen Benutzter, die einzelnen Werte sind mit Doppelpunkten von einander getrennt.

• Eine typische Zeile sieht zum Beispiel so aus (man 5 passwd):

      root:x:0:0:root:/root:/bin/bash       / | \ \ \ \ \

   Benutzername | \ GID GECOS \ Login-Shell        Passwort UID Home-Verzeichnis

Lokale Benutzer - /etc/passwd 2

• Es sind also alle zuvor genannten Merkmale eines Benutzers vorhanden und zusätzlich noch ein Passwort-Feld. Folgende Werte darf das Passwort-Feld besitzen:

• Kein Wert: Der Benutzer kann sich ohne Passwort einloggen. Allerdings kann es sein, dass manche Applikationen dann den Zugriff vollständig verbieten. D.h. man sollte hier immer etwas eintragen!

• x: Steht im Passwort-Feld ein kleines „x“, dann bedeutet das, dass das verschlüsselte Passwort in der Datei /etc/shadow zu finden ist. In diesem Fall muss es eine entsprechende Zeile in dieser Datei geben!

• Jeder andere Wert wird als verschlüsseltes Passwort interpretiert.

Lokale Passwörter - /etc/shadow 1

• Da die Passwortdatei /etc/passwd von allen Benutzer gelesen werden können soll, ist es nicht ratsam, darin die Passwörter zu speichern. Daher gibt es die Möglichkeit, beim Passwort-Feld ein „x“

einzugeben, was für das System bedeutet, dass das eigentlich Passwort in der Shadowdatei /etc/shadow gespeichert ist.

(25)

• Diese Datei hat die gleiche Syntax wie /etc/passwd, die Felder haben aber eine andere Bedeutung.

Hier wieder eine typische Zeile (siehe auch man 5 shadow):

 root:*:15779:0:99999:7: : :   | | | | | | | | \

  | | | | | | | \ Reserviertes Feld   | | | | | | \ Ablaufdatum des Kontos

  | | | | | \ Passwortänderungszeitraum nach Passwortablauf (Tage)   | | | | \ Warnzeitraum vor Passwortablauf (Tage)

  | | | \ Maximales Passwortalter (Tage)   | | \ Minimales Passwortalter (Tage)   | \ Datum der letzten Passwortänderung    \ verschlüsseltes Passwort

    Benutzername

Lokale Passwörter - /etc/shadow 2

• Die Datumsangaben erfolgen immer als Anzahl der Tage seit 1. Jänner 1970.

• Das Feld für das verschlüsselte Passwort kann folgende Werte enthalten:

• Kein Wert: Gleicher Effekt wie leeres Passwort-Feld in /etc/passwd.

• Verschlüsseltes Passwort: Erkennt man daran, dass der Wert mit $ID$ anfängt (ID gibt den Verschlüsselungsalgorithmus an).

• !...: Fängt das Passwort-Feld mit einem Rufzeichen an, so ist das Konto gesperrt.

• Andere Werte (z.B. *) zeigen ein ungültiges Passwort an; der Benutzer kann also nicht mit einem Passwort einloggen (aber eventuell mit anderen Methoden).

Lokale Gruppen - /etc/group

• In dieser Datei sind die Gruppen mit ihren Merkmalen gespeichert. Wie in /etc/passwd wird pro Zeile eine Gruppe definiert.

• Eine typische Zeile sieht so aus:

       adm:x:4:thomas,admin        / | | \

  Gruppenname / \ Liste von Gruppenmitgliedern         Passwort GID

• In der Datei /etc/gshadow könnten verschlüsselte Passwörter für Gruppen gesetzt werden. Es ist allerdings sehr unüblich, Passwörter für Gruppen zu vergeben.

Authentifikation/Autorisation mit PAM 1

• Die Authentifikation (und ein Teil der Autorisation) erfolgt unter Linux fast immer über PAM (Pluggable Authentication Modules for Linux, siehe auch man 7 pam).

• Es gibt vier unterschiedliche Bereiche innerhalb vom PAM:

account: Methoden zur Überprüfung des Kontos (Ist das Passwort abgelaufen? Darf der Benutzer

(26)

auf das Service zugreifen?)

auth: Methoden zur Authentifizierung des Benutzer (z.B. über ein Passwort, eine ID-Karte oder einen Fingerabdruckscanner)

password: Methoden zur Änderung der Authentifikation (z.B. ändern des Passworts)

session: Methoden, die es erlauben, vor und nach Erteilung des Zugriffs bestimmte Dinge zu tun (z.B. Loggen, wenn sich ein Benutzer an- bzw. abmeldet)

• Die Konfiguration erfolgt durch Dateien im Verzeichnis /etc/pam.d/. Unter Ubuntu sind die Standardeinstellungen in den Dateien common-account, common-auth, common-password und common-session zu finden.

Authentifikation/Autorisation mit PAM 2

Einige PAM-Module kurz im Überblick (eine Liste aller Module bekommt man über apt-cache search libpam):

pam_unix: Das Standard-Unix-Modul. Es erlaubt die Authentifikation und Autorisation über die Passwort- und über die Shadowdatei.

pam_env: Setzen/Löschen von Umgebungsvariablen (verwendet die Datei /etc/security/pam_env.conf zur Konfiguration).

pam_limits: Aktiviert Beschränkungen in Bezug auf Systemressourcen (z.B. CPU-Zeit; verwendet die Datei /etc/security/limits.conf zur Konfiguration).

pam_group: Dynamisches Zuweisung von Gruppen zu Benutzern (verwendet die Datei /etc/security/group.conf zur Konfiguration).

pam_cap: Zuweisen von „Fähigkeiten“ (verwendet die Datei /etc/security/capabilities.conf zur Konfiguration).

pam_ldap: Authentifikation über einen LDAP-Verzeichnis-Server (z.B. OpenLDAP oder Microsoft Active Directory). Dieses Modul sollte man immer gemeinsam mit dem nss_ldap-Modul für den Name Service Switch verwenden.

Name Service Switch (NSS)

• Der Name Service Switch (NSS) dient unter Linux dazu, verschiedene Quellen für Namensdienste zu konfigurieren. Unter Namensdienste fallen zum Beispiel Benutzerdaten, Gruppendaten, Passwortdaten und Host-Namen.

• Konfiguriert wird der NSS über die Datei /etc/nsswitch.conf. Hier ein Ausschnitt aus dieser:

passwd: compat group: compat shadow: compat

hosts: files dns mdns4

• In den ersten drei Zeilen wird für die Dienste passwd, group und shadow (i.e. Benutzer-, Gruppen- und Passwortdaten) das compat-Modul verwendet (d.h. die Daten werden von den oben besprochenen Dateien gelesen werden).

• Die Auflösung der Host-Namen erfolgt zuerst durch die lokale Datei /etc/hosts, dann über das DNS-System und zum Schluss über einen Multicast DNS-Klienten.

(27)

• Eine Auflistung aller vorhandenen Module bekommt man über apt-cache search libnss.

Allgemeine Befehle - getent

getent - Zeigt Datensätze aus einer Administrationsdatenbank an.

» Die folgenden, über NSS konfigurierbaren Datenbanken können ausgelesen werden: passwd, group, hosts, services, protocols und networks.

» Der Befehl ist besonders nützlich, wenn nicht nur lokale (d.h. am System definierte) Daten vorhanden sind, sondern auch externe Daten (z.B. aus einem LDAP-Verzeichnis).

» $ getent passwd | head -n 3 root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh

$ getent group root root:x:0:

$ getent hosts

127.0.0.1 localhost 127.0.1.1 praxis

127.0.0.1 ip6-localhost ip6-loopback

Allgemeine Befehle - id, groups

id - Zeigt Benutzer- und Gruppeninformationen an.

» Verwendet den aktuellen Benutzer oder den via Parameter angegebenen.

» $ id

uid=1000(praxis) gid=1000(praxis) Gruppen=1000(praxis),4(adm),24(cdrom),27(sudo), 30(dip),46(plugdev),111(lpadmin),112(sambashare)

$ id root

uid=0(root) gid=0(root) Gruppen=0(root) groups - Zeigt die Gruppen eines Benutzers an.

» Verwendet den aktuellen Benutzer oder die via Parameter angegebenen.

» $ groups

praxis adm cdrom sudo dip plugdev lpadmin sambashare

$ groups root praxis root : root

praxis : praxis adm cdrom sudo dip plugdev lpadmin sambashare

Befehle für Benutzerverwaltung - useradd

useradd - Legt ein neues Benutzerkonto an.

» Standardwerte für einige Optionen sind in /etc/default/useradd und /etc/login.defs hinterlegt.

» Optionen:

• -d Home-Verzeichnis → Home-Verzeichnis

• -m → Home-Verzeichnis anlegen, Daten von Skeleton-Verzeichnis kopieren

• -k Verzeichnis → Verzeichnis als Skeleton-Verzeichnis verwenden

• -g GID → primäre Gruppe (GID oder Name)

• -G Gruppe[,Gruppe...] → sekundäre Gruppen

• -e Ablaufdatum → Ablaufdatum des Kontos

• -s Shell → Login-Shell

(28)

» $ useradd -d /home/leitnert -k /etc/skel_lehrer -m -g lehrer leitnert

$ getent passwd leitnert

leitnert:x:1001:1002::/home/leitnert:/bin/sh

Unter Ubuntu (Debian) gibt es auch das Programm adduser, das ein freundlicheres Frontend für useradd und verwandte Befehle ist.

Befehle für Benutzerverwaltung - usermod

usermod - Modifiziert ein Benutzerkonto.

» Optionen:

• -L → Benutzerpasswort sperren

• -U → Benutzerpasswort entsperren

• -g GID → primäre Gruppe ändern

• -G Gruppe[,Gruppe...] → sekundäre Gruppen setzen

• -l NeuerName → Benutzernamen ändern

• -u UID → UID ändern (Dateien im Home-Verzeichnis bekommen die neue UID automatisch gesetzt)

• -s Shell → Login-Shell ändern.

» Aufpassen beim Ändern des Namens und der UID: Der Benutzer sollte nicht eingeloggt sein!

» $ getent passwd leitnert

leitnert:x:1001:1002::/home/leitnert:/bin/sh

$ usermod -s /bin/bash -g adm leitnert

$ getent passwd leitnert

leitnert:x:1001:4::/home/leitnert:/bin/bash

Befehle für Benutzerverwaltung - userdel

userdel - Löscht ein Benutzerkonto.

» Optionen: -r → lösche das Home-Verzeichnis des Benutzers.

» $ find /home/leitnert /home/leitnert

$ userdel -r leitnert

$ getent passwd leitnert

$ find /home/leitnert

find: "/home/leitnert": Datei oder Verzeichnis nicht gefunden

Befehle für Benutzerverwaltung - chsh, chfn

chsh - Ändert die Login-Shell.

» Kann ein Benutzer selbst ausführen.

» Die Datei /etc/shells wird konsultiert und nur die darin aufgelisteten Programme kann ein Benutzer als Login-Shell setzen.

» Vor dem Ändern muss man sich authentifizieren.

chfn - Ändert die Informationen im GECOS-Feld.

» Kann ein Benutzer selbst ausführen.

» Vor dem Ändern muss man sich authentifizieren.

» Was genau der Benutzer ändern darf, ist über den Schlüssel CHFN_RESTRICT in der Datei /etc/login.defs festgelegt.

(29)

Befehle für Benutzerverwaltung - chage

chage - Ändert Passwortablaufinformation oder zeigt sie an.

» Alle zusätzlichen Informationen, die in der Shadowdatei gespeichert werden, können geändert werden.

» Optionen (Auszug):

• -d Datum → Ändert das Datum der letzten Passwortänderung

• -E Datum → Ändert das Ablaufdatum

• -l → Zeigt die Passwortablaufinformationen an

» Normale Benutzer können nur die Option -l verwenden.

» $ chage -l praxis

Last password change : Mär 17, 2013 Password expires : never

Password inactive : never

Account expires : Mär 20, 2013 Minimum number of days between password change : 0

Maximum number of days between password change : 99999 Number of days of warning before password expires : 7

$ chage -d 2013-03-01 praxis

$ chage -l praxis | head -n 1

Last password change : Mär 01, 2013

Befehle für Benutzerverwaltung - passwd

passwd - Ändert das Passwort eines Benutzers.

» Der Administrator kann ohne Wissen des Passworts das Passwort eines Benutzers ändern. Er muss sich auch nicht an die Passwortrichtlinien halten.

» Ähnlich zum Befehl chage können auch Passwortablaufinformationen geändert werden.

» $ passwd praxis

Ändern des Passworts für praxis.

(aktuelles) UNIX-Passwort: --&gt;<b>Aktuelles Passwort eingeben</b>&lt;--

Geben Sie ein neues UNIX-Passwort ein: --&gt;<b>Kurzes Passwort eingeben</b>&lt;-- Geben Sie das neue UNIX-Passwort erneut ein: --&gt;<b>Kurzes Passwort eingeben</b>&lt;--

Sie müssen ein längeres Passwort auswählen.

Geben Sie ein neues UNIX-Passwort ein: --&gt;<b>Langes Passwort eingeben</b>&lt;-- Geben Sie das neue UNIX-Passwort erneut ein: --&gt;<b>Langes Passwort eingeben</b>&lt;--

passwd: password updated successfully

$ passwd -l praxis

passwd: password expiry information changed.

$ passwd -S praxis

praxis L 03/01/2013 0 99999 7 -1

$ passwd -u praxis

passwd: password expiry information changed.

$ passwd -S praxis

praxis P 03/01/2013 0 99999 7 -1

(30)

Befehle für Gruppenverwaltung - groupadd, groupmod, groupdel

groupadd - Legt eine neue Gruppe an.

» Optionen: -g GID → die GID der Gruppe.

» $ groupadd lehrer

$ getent group lehrer lehrer:x:1002:

groupmod - Ändert Gruppeninformationen.

» Optionen: -g GID → ändert die GID, -n Name → ändert den Gruppennamen.

» $ groupmod -g 1515 -n teachers lehrer

$ getent group teachers teachers:x:1515:

groupdel - Löscht eine Gruppe.

» $ groupdel teachers

$ groupdel praxis

groupdel: cannot remove the primary group of user 'praxis'

Benutzerverwaltung mit Puppet

• Benutzer werden in Puppet über die Ressource user verwaltet.

• Unter Ubuntu wird standardmäßig der Provider useradd verwendet.

• Wichtige Attribute:

name: Der Name des Benutzers (falls nicht angegeben, wird der Titel verwendet).

ensure: Der gewünschte Zustand (present, absent, role)

allowdupe: Spezifiziert, ob doppelte UIDs erlaubt sind.

comment: Beschreibung des Benutzers (i.e. GECOS-Informationen).

expiry: Ablaufdatum (absent oder ein Datum im Format YYYY-mm-dd)

gid: Die primäre Gruppe (mittels Zahl oder Name).

groups: Sekundäre Gruppen (als Namen).

home: Das Home-Verzeichnis.

password: Das verschlüsselte (!) Passwort.

shell: Die Login-Shell.

uid: Die UID.

Benutzerverwaltung mit Puppet - Beispiele

• Anlegen oder Modifizieren eines Benutzers:

user {'test':

  ensure => present,   uid => 1234,   gid => 100,

  groups => ['adm', 'sudo'],   home => '/home/praxis',   shell => '/bin/bash',

  password => '$1$lj/Uyf9q$omFP02phveFcFZ63UF4jt/' # test

(31)

}

Das verschlüsselte Passwort kann z.B. mit openssl passwd -1 erstellt werden.

• Löschen eines Benutzer:

user {'test': ensure => absent}

Gruppenverwaltung mit Puppet

• Gruppen werden in Puppet über die Ressource group verwaltet.

• Unter Ubuntu wird standardmäßig der Provider groupadd verwendet.

• Wichtige Attribute:

name: Der Name der Gruppe (falls nicht angegeben, wird der Titel verwendet).

ensure: Der gewünschte Zustand (present oder absent)

allowdupe: Spezifiziert, ob doppelte GIDs erlaubt sind.

gid: Die primäre Gruppe (mittels Zahl oder Name).

Gruppenverwaltung mit Puppet - Beispiele

• Anlegen oder Modifizieren einer Gruppe:

group {'test':

  ensure => present,   gid => 1515

}

• Löschen einer Gruppe:

group {'test': ensure => absent}

Copyright und Lizenz

• Copyright: Thomas Leitner thomas.leitner@univie.ac.at

• Lizenz: Creative Commons CC BY-NC-SA

„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/

(32)

Foliensatz 5

Netzwerk - Grundlagen

Inhalt

• Netzwerke

• TCP/IP-Schichtenmodell

• DHCP und DNS

• Netzwerkkonfiguration

• Netzwerkbefehle

• Netzwerkkonfiguration mit Puppet

Netzwerke

• Computernetzwerke dienen dem Austausch von Daten zwischen Computern. Die Daten können dabei über Kabel, Glasfaser, durch elektromagnetische Strahlung, … übertragen werden (es gibt auch etwas unüblichere Übertragungsmedien - siehe RFC 1149).

• Eines der ersten großen Netzwerke war das ARPANET, der Vorläufer des heutigen Internets. Die US- Regierung (genauer, DARPA) wollte ein dezentrales und fehlertolerantes Netzwerk für die militärische Forschung schaffen.

• Anfang der 1970er Jahre wurde von Vint Cerf und Robert Kahn schließlich die Grundlage für das heutige Internet geschaffen und Anfang der 1980er Jahre löste dann das neue Internet das alte ARPANET ab.

Links: Wired - Vint Cerf: We Knew What We Were Unleashing on the World, Internet Hall of Fame

Netzwerke - Abkürzungen

• Wichtige Abkürzungen:

Request For Comments (RFC)

Öffentliche Dokumente, die Internetstandards und -protokolle beschreiben. Einmal veröffentlicht, werden sie nicht mehr verändert (siehe auch Ubuntu-Pakete doc-rfc*).

Internet Engineering Task Force (IETF)

Organisation, die sich mit der technische Weiterentwicklung des Internet befasst. Gibt die RFCs heraus.

Internet Corporation for Assigned Names and Numbers (ICANN)

Zuständig z.B. für die Vergabe von Namen (z.B. DNS-Namen) und Adressen (z.B. IP-Adressen).

Internet Assigned Numbers Authority (IANA)

Abteilung von ICANN, der die Vergabe von Nummern (z.B. Protokollnummern oder Port- Nummern) und Namen übernimmt.

(33)

Logische Karte von ARPANET, März 1977

Netzwerkmodelle

• Damit Computer über ein Netzwerk kommunizieren können, müssen sie sich auf eine gemeinsame Sprache einigen, d.h. es müssen Protokolle definiert sein, an die sich alle Beteiligten halten.

• Das OSI-Modell (Open Systems Interconnection Model) ist ein Referenzmodell für Netzwerkprotokolle. Es umfasst sieben Schichten und beschreibt, wie Geräte miteinandern kommunizieren können. Jede dieser Schichten erfüllt eine andere Aufgabe.

• Im OSI-Modell kommunizieren immer die Instanzen der selben Schicht über ein Protokoll miteinander, z.B. Schicht 3 auf dem ersten Gerät mit Schicht 3 auf dem zweiten Gerät.

• Die Daten werden von der obersten Schicht bis zur untersten Schicht auf dem sendenden Gerät durchgereicht (und ev. mit Meta-Informationen versehen), übertragen und auf der Empfangsseite von der untersten Schicht bis zur obersten Schicht durchgereicht (wobei die Meta-Informationen ausgelesen und entfernt werden).

TCP/IP-Modell

• Für das Internet wird ein einfacheres Netzwerkmodell verwendet, nämlich das vier Schichten umfassende TCP/IP-Modell (beschrieben im RFC 1122):

Netzzugangsschicht: Beschreibt die physische Kommunikation von Geräten (z.B. über Kabel, Glasfaser oder Funk)

Internetschicht: Beschreibt die Übermittlung von Datenpaketen über mehrere Netzwerkgrenzen hinweg.

(34)

Transportschicht: Beschreibt Ende-zu-Ende-Verbindungen, also wie zwei Applikationen miteinander kommunizieren können.

Anwendungsschicht: Umfasst alle Protokolle, die Anwendungen für die Kommunikation miteinander verwenden.

In jeder Schicht können verschiedene Protokolle benutzt werden.

• Wir betrachten von jetzt an das TCP/IP-Modell, da andere Netzwerkmodelle auf Basis des OSI- Modells in der Praxis nur selten vorkommen.

Datenverschachtelung

• Beim Verschicken von Daten werden diese in ein Paket verpackt, in der nächsten Schicht wird das gesamte Paket in ein anderes Paket verpackt und so weiter bis zur untersten Schicht. Am Zielgerät wird in umgekehrter Reihenfolge wieder ausgepackt.

• Beispiel für die Datenverschachtelung:

Netzzugangsschicht (Link Layer)

(35)

• Die Netzzugangsschicht ist die unterste Schicht im TCP/IP-Modell und für die physische Übertragung der Daten zuständig.

• Die zuständige Hardware in einem Computer ist z.B. die Netzwerkkarte für kabelgebundene Verbindungen oder die WLAN-Karte für Funkverbindungen.

Standardprotokoll für kabelgebundene Datenübertragung ist Ethernet (weitgehend ident zur IEEE 802.3 Norm). Für die Verbindung von Geräten werden bestimmte Kabel (CAT-5/CAT-6) und Stecker benutzt.

Für die Übertragung von Daten via Funk über ein WLAN wird meist ein Standard aus der IEEE 802.11-Familie benutzt.

Netzzugangsschicht - MAC-Addresse

• Jeder Netzwerkkarte ist eine eindeutige Nummer zur Identifikation, die MAC-Adresse (Media Access Control Address), fix zugeordnet. Diese sollte weltweit eindeutig sein, aber es reicht, wenn sie lokal (i.e. im gleichen Netz) eindeutig ist.

Eine MAC-Adresse besteht aus sechs Bytes, die hexadezimal und mit Doppelpunkten getrennt geschrieben werden (z.B. 3C:97:0E:79:B8:0A).

Die spezielle MAC-Adresse FF:FF:FF:FF:FF:FF heißt Broadcast-Adresse, Pakete an diese Adresse werden von allen Geräten im Netzwerk verarbeitet.

MAC-Adressen können nicht beliebig von Herstellern vergeben werden. Jeder Hersteller bekommt einen oder mehrere 3-Byte-Prefixe zugeordnet (siehe die OUI-Liste der IEEE), die restliche drei

(36)

Bytes kann der Hersteller dann beliebig vergeben.

• Ethernet und WLAN verwenden die gleiche Art von MAC-Adressen.

Netzzugangsschicht - Ethernet-Frame

• Die zu sendenden Daten werden gemeinsam mit den nötigen Informationen (unter anderem die Quell- und Ziel-MAC-Adresse) in ein Paket (genannt Ethernet-Frame) verpackt und dann über die physische Verbindung verschickt.

• Müssen mehr Daten verschickt werden, als in ein Paket passen (bei Ethernet z.B. 1500 Byte), so müssen mehrere Pakete verschickt werden.

• Die Technologie VLAN (Virtual Local Area Network) ermöglicht es, mehrere logische Netze über ein physisches Netz zu betreiben, ohne dass die logischen Netze sich stören.

Siehe auch Ethernet Theory of Operation.

Internetschicht (Internet Layer)

• Die Internetschicht erlaubt den Transport von Paketen über mehrere physischen Netze und unterschiedliche Netzzugangsschichtprotokolle (z.B. Ethernet und WLAN) hinweg.

• Es werden dabei keine Garantien abgegeben, ob die Pakete in der richtigen Reihenfolge bzw.

überhaupt am Zielgerät ankommen.

• Ein Gerät, das in zwei oder mehr logischen Netzen hängt, heißt Router. Dieses leitet Pakete von einem Netz in ein anderes weiter.

• Das Hauptprotokoll in dieser Schicht ist IP (Internet Protokoll, definiert in RFC 771). Dieses braucht, so wie das Ethernet-Protokoll, wieder Adressen, die sogenannten IP-Adressen. Jedes Gerät, das über das Internet mit anderen Geräten kommunizieren will, braucht eine eindeutige IP-Adressen (Notiz

(37)

am Rande: Es gibt auch Möglichkeiten, das zu umgehen, z.B. durch NAT bei IPv4).

Internetschicht - IP

• Es gibt zwei Arten des IP-Protokolls: IPv4 und IPv6. Einer der wichtigsten Unterschiede zwischen diesen beiden Protokollen ist die Größe des Adressraumes:

• Bei IPv4 gibt es 2^32 IP-Adressen, also 4.294.967.296!

• Bei IPv6 gibt es 2^128 IP-Adressen, also

340.282.366.920.938.463.463.374.607.431.768.211.456!

• IPv4-Adressen werden üblicherweise dezimal in vier Blöcken geschrieben, z.B. 131.130.16.250.

IPv6-Adressen werden hexadezimal in acht Blöcken zu zwei Bytes geschrieben, z.B.

2001:62a:4:2f00::22:250 (genau eine durchgehende Reihe von Blöcken mit Nullen kann durch zwei Doppelpunkte ersetzt werden).

• Derzeit wird fast ausschließlich IPv4 verwendet, aber IPv6 nimmt stetig an Bedeutung zu, da immer mehr Geräte eine IP-Adresse brauchen. Von Vorteil dabei ist, dass IPv6 gleichzeitig zu IPv4 betrieben werden kann.

Internetschicht - IPv4

• Wir werden nur IPv4 näher behandeln. IPv6 ist zwar ähnlich aufgebaut, aber doch in ein paar grundlegenden Gebieten anders.

• In dem Header eines IP-Pakets sind neben Quell- und Zieladresse auch verschiedene andere Felder vorhanden, z.B. das TTL-Feld (time to live), das angibt, wie viele Zwischenstationen das Paket passieren darf.

Internetschicht - IPv4-Netze 1

• Früher wurden IPv4-Adressen in Netzklassen (z.B. Klassen A, B und C) eingeteilt. Da diese Einteilung aber sehr unflexibel ist, kommt heutzutage fast ausschließlich das Classless Inter-Domain Routing-Verfahren (CIDR, definiert in RFC 1518 und RFC 4632) zum Einsatz.

• Bei den privaten Netzen (IPs daraus werden von Routern nicht weitergeleitet) hat sich die ursprünglichen Einteilung der Netzklassen gehalten, d.h. die Netze 10.0.0.0/8, 172.16.0.0/12 und 192.168.0.0/16 sind weiterhin als private Netze deklariert.

(38)

• Beim CIDR wird durch die Angabe einer Netzwerkmaske die IP-Adresse in einen Netzwerk- und einen Hostteil aufgeteilt. Die Netzwerkmaske gibt an, wie viele Bits vom Anfang der IP-Adresse den Netzpräfix ausmachen.

Beispiel: IP-Adresse 131.130.16.33 und Netzwerkmaske 255.255.252.0 (entspricht 22 Bits), d.h.

das Netzwerk hat die IP-Adressen von 131.130.16.0 bis 131.130.19.255.

Internetschicht - IPv4-Netze 2

• Jedes IP-Netzwerk hat zwei spezielle Adressen: die Netzwerkadresse (die erste Adresse; im Beispiel 131.130.16.0) und die Broadcastadresse (die letzte Adresse, im Beispiel 131.130.19.255).

Die Netzwerkadresse zusammen mit der Netzwerkmaske bestimmt ein IP-Netzwerk eindeutig. Die Broadcastadresse kann benutzt werden, um Daten an alle Geräte des Netzes zu schicken.

• Damit ein Gerät Datenpakete an den richtigen Empfänger schicken kann, gibt es eine sogenannte Routing-Tabelle:

• Pakete für das selbe logische Netz werden direkt an den Empfänger zugestellt

• Pakete für andere Netze werden an einen Router geschickt, der sie weiterleitet

• Zusammen bedeutet das, dass man die IP-Adresse, die Netzwerkmaske als auch den Standardrouter (Default-Gateway) wissen muss, damit ein Gerät in einem IP-Netzwerk richtig funktioniert.

Netzzugangs-/Internetschicht - ARP

• Damit man Geräten im selben logischen Netz IP-Pakete schicken kann, muss deren MAC-Adresse bekannt sein, da diese ja für die Ethernet-Frames auf der Netzzugangsschicht gebraucht werden.

• Zum Zuordnen von IP- zu MAC-Adressen wird das Address Resolution Protocol (ARP, definiert in RFC 826) benutzt. Das Protokoll gehört technisch gesehen zur Netzzugangsschicht.

IPv6 verwendet nicht ARP, sondern das Neighbor Discovery Protocol (NDP).

• Ist für eine bestimmte IP-Adresse im gleichen Netz die MAC-Adresse noch nicht bekannt, so wird ein ARP-Request mit der Bitte um Bekanntgabe der zur IP-Adresse gehörigen MAC-Adresse an die Broadcastadresse der Netzzugangsschicht gesendet. Das Gerät mit der zugehörigen IP-Adresse antwortet mit einem ARP-Reply, der die Zuordnung MAC-Adresse zu IP-Adresse enthält, direkt an die MAC-Adresse des ersten Geräts.

• Diese Zuordnungen von IP- zu MAC-Adressen werden üblicherweise lokal in einem ARP-Cache gespeichert.

Internetschicht - ICMP

• Das Internet Control Message Protocol (ICMP, definiert in RFC 792) dient zum Austausch von Informationen und Fehlermeldungen. Es gehört zur Internetschicht, benutzt aber IP zur Datenübertragung (d.h. es repräsentiert sich selbst als Protokoll einer höheren Schicht).

• Eine typische Verwendung von ICMP ist das Pingen von Geräten um herauszufinden, ob ein bestimmtes Gerät verfügbar ist und wie groß die Paketumlaufzeit (round trip time, RTT) ist. Dazu werden ICMP-Pakete vom Typ Echo Request bzw. Echo Reply und das TTL-Feld des IP-Headers benutzt.

• Eine weitere, für normale Benutzer nützliche Anwendung von ICMP ist Traceroute, mit der man den

Referenzen

ÄHNLICHE DOKUMENTE

Weitere H¨aufunspunkte gibt es nicht, denn zu jedem anderen Punkt kann man eine so kleine Umgebung w¨ahlen, dass nur endlich viele (a n ) in ihr liegen.. Offenbar ist a n+1 &gt; 0

datAusgabe.open(„c:\\hallo.txt“, ios::out); (Vorhandene Datei wird überschrieben) datAusgabe.open(„c:\\hallo.txt“, ios::app); (anhängen an

Password: leer: kein Pw, x: Pw steht in etc/shadow, sonst: verschlüsseltes Pw UID: Benutzernummer(Nichtnegative Zahl &lt; 64000, für normale Benutzer &gt; 100)

The CPC-code table (for the Set Cursor Address command) is changed as shoirtn betcw. Accent capability is reduced to blink only, to provide for the increased

These include the compact E-Case (standard) which may be rack-mounted using an optional panel, the larger and more streamlined D-Case, and C-Case and R-Case

[r]

a) Diskutiere die Ergebnisse anhand deskriptiver Statistiken und Abbildungen, die für die einzelnen Sprecher erstellt werden sollen. b) Verwende den Befehl par(mfcol=c(3,2)), um

Damit ein Client weiß, wie der zu nutzende Server heißt, muss man in der Hauptkonfigurationsdatei im Block agent die Variable server auf die IP-Adresse (oder den DNS-Namen)