Index: head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 48897)
+++ head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 48898)
@@ -1,5877 +1,5877 @@
NetzwerkserverÜbersichtDieses Kapitel beschreibt einige der häufiger verwendeten
Netzwerkdienste auf &unix;-Systemen. Dazu zählen
Installation und Konfiguration sowie Test und Wartung
verschiedener Netzwerkdienste. Zusätzlich sind im ganzen
Kapitel Beispielkonfigurationen als Referenz enthalten.Nachdem Sie dieses Kapitel gelesen haben, werden SieDen inetd-Daemon konfigurieren
können.Wissen, wie das Network File
System (NFS)
eingerichtet wird.Einen Network Information
Server (NIS) einrichten
können, um damit Benutzerkonten im Netzwerk zu
verteilen.Wissen, wie Sie &os; einrichten, um als
LDAP-Server oder -Client zu
agieren.Rechner durch Nutzung von DHCP
automatisch für ein Netzwerk konfigurieren können.In der Lage sein, einen Domain Name
Server (DNS)
einzurichten.Den Apache
HTTP-Server konfigurieren können.Wissen, wie man einen File Transfer
Protocol (FTP)-Server
einrichtet.Mit Samba einen Datei- und
Druckserver für &windows;-Clients konfigurieren
können.Unter Nutzung des NTP-Protokolls
Datum und Uhrzeit synchronisieren sowie einen Zeitserver
installieren können.Wissen, wie iSCSI eingerichtet
wird.Dieses Kapitel setzt folgende Grundkenntnisse voraus:/etc/rc-Skripte.NetzwerkterminologieInstallation zusätzlicher Software von Drittanbietern
().Der inetdSuper-ServerDer &man.inetd.8;-Daemon wird manchmal auch als
Internet Super-Server bezeichnet, weil er
Verbindungen für viele Dienste verwaltet. Anstatt mehrere
Anwendungen zu starten, muss nur der
inetd-Dienst gestartet werden.
Wenn eine Verbindung für einen Dienst eintrifft, der von
inetd verwaltet wird, bestimmt
inetd, welches Programm für die
eingetroffene Verbindung zuständig ist, aktiviert den
entsprechenden Prozess und reicht den Socket an ihn weiter.
Der Einsatz von inetd an Stelle
viele einzelner Daemonen kann auf nicht komplett ausgelasteten
Servern zu einer Verringerung der Systemlast führen.inetd wird vor allem dazu
verwendet, andere Daemonen zu aktivieren, einige Protokolle
werden aber auch intern verwaltet. Dazu gehören
chargen,
auth,
time,
echo,
discard sowie
daytime.Dieser Abschnitt beschreibt die Konfiguration von
inetd.KonfigurationsdateiDie Konfiguration von inetd
erfolgt über /etc/inetd.conf Jede Zeile
dieser Datei repräsentiert eine Anwendung, die von
inetd gestartet werden kann. In
der Voreinstellung beginnt jede Zeile mit einem Kommentar
(#), was bedeutet dass
inetd keine Verbindungen für
Anwendungen akzeptiert. Entfernen Sie den Kommentar am Anfang
der Zeile, damit inetd Verbindungen
für diese Anwendung entgegennimmt.Nachdem Sie die Änderungen gespeichert haben, fügen Sie
folgende Zeile in /etc/rc.conf ein, damit
inetd bei Booten automatisch
gestartet wird:inetd_enable="YES"Starten Sie jetzt inetd, so
dass er Verbindungen für die von Ihnen konfigurierten Dienste
entgegennimmt:&prompt.root; service inetd startSobald inetd gestartet ist,
muss der Dienst benachrichtigt werden, wenn eine Änderung in
/etc/inetd.conf gemacht wird:Die Konfigurationsdatei von
inetd neu einlesen&prompt.root; service inetd reloadNormalerweise müssen Sie lediglich den Kommentar vor der
Anwendung entfernen. In einigen Situationen kann es jedoch
sinnvoll sein, den Eintrag weiter zu bearbeiten.Als Beispiel dient hier der Standardeintrag für
&man.ftpd.8; über IPv4:ftp stream tcp nowait root /usr/libexec/ftpd ftpd -lDie sieben Spalten in diesem Eintrag haben folgende
Bedeutung:service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-argumentsservice-nameDer Dienstname eines bestimmten Daemons. Er muss
einem in /etc/services aufgelisteten
Dienst entsprechen. Hier wird festgelegt, auf
welchen Port inetd
eingehende Verbindungen für diesen Dienst entgegennimmt.
Wenn ein neuer Dienst benutzt wird, muss er zuerst
in /etc/services
eingetragen werden.socket-typeEntweder stream,
dgram, raw, oder
seqpacket. Nutzen Sie
stream für
TCP-Verbindungen und
dgram für
UDP-Dienste.protocolBenutzen Sie eines der folgenden Protokolle:ProtokollBedeutungtcp oder tcp4TCP (IPv4)udp oder udp4UDP (IPv4)tcp6TCP (IPv6)udp6UDP (IPv6)tcp46TCP sowohl unter IPv4 als auch unter IPv6udp46UDP sowohl unter IPv4
als auch unter IPv6{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]In diesem Feld muss oder
angegeben werden.
,
sowie
sind optional. gibt an, ob der Dienst
seinen eigenen Socket verwalten kann oder nicht.
-Sockets müssen
verwenden, während Daemonen mit
-Sockets, die normalerweise auch
aus mehreren Threads bestehen,
verwenden sollten.
gibt in der Regel mehrere Sockets an einen einzelnen
Daemon weiter, während
für jeden neuen Socket einen Childdaemon erzeugt.Die maximale Anzahl an Child-Daemonen, die
inetd erzeugen kann, wird durch
die Option festgelegt. Wenn
ein bestimmter Daemon 10 Instanzen benötigt, wird
der Wert /10 hinter die Option
gesetzt. Der Wert
/0 gibt an, das es keine
Beschränkung gibt.
legt die maximale Anzahl von Verbindungsversuchen pro
Minute fest,
die von einer bestimmten IP-Adresse aus unternommen werden
können. Sobald das Limit erreicht ist, werden weitere
Verbindungen von dieser IP-Adresse
geblockt, bis die Minute vorüber ist. Ein Wert von
/10 würde die maximale Anzahl der
Verindungsversuche einer bestimmten
IP-Adresse auf zehn Versuche in der
Minute beschränken.
legt fest, wie viele Child-Daemonen von einer bestimmten
IP-Adresse aus gestartet werden
können. Durch diese Optionen lassen sich
Ressourcenverbrauch sowie die Auswirkungen eines
Denial of Service (DoS)-Angriffs
begrenzen.Ein Beispiel finden Sie in den Voreinstellungen für
&man.fingerd.8;:finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -k -suserDer Benutzername, unter dem der jeweilige Daemon
laufen soll. Meistens laufen Daemonen als
root,
daemon oder
nobody.server-programDer vollständige Pfad des Daemons.
Wird der Daemon von inetd
intern bereitgestellt, verwenden Sie
.server-program-argumentsDieser Eintrag legt die Argumente fest, die bei
der Aktivierung an den Daemon übergeben werden. Wenn es
sich beim Daemon um einen internen Dienst handelt,
verwenden Sie wiederum
.KommandozeilenoptionenWie die meisten anderen Server-Daemonen lässt sich auch
inetd über verschiedene Optionen
steuern. In der Voreinstellung wird
inetd mit
-wW -C 60 gestartet. Durch das Setzen
dieser Werte wird das TCP-Wrapping für alle
inetd-Dienste aktiviert.
Zudem wird verhindert, dass eine IP-Adresse
eine Dienst öfter als 60 Mal pro Minute anfordern kann.Um die Voreinstellungen für
inetd zu ändern, fügen Sie einen
Eintrag für inetd_flags in
/etc/rc.conf hinzu. Wenn
inetd bereits ausgeführt wird,
starten Sie ihn mit service inetd restart
neu.Die verfügbaren Optionen sind:-c maximumLegt die maximale Anzahl von parallelen Aufrufen
eines Dienstes fest; in der Voreinstellung gibt es keine
Einschränkung. Diese Einstellung kann für jeden Dienst
durch Setzen des Parameters
in /etc/inetd.conf festgelegt
werden.-C rateLegt fest, wie oft ein Dienst von einer einzelnen
IP-Adresse in einer Minute aufgerufen
werden kann; in der Voreinstellung gibt es keine
Einschränkung. Dieser Wert kann für jeden Dienst durch
das Setzen des Parameters
in /etc/inetd.conf festgelegt
werden.-R rateLegt fest, wie oft ein Dienst in der Minute
aktiviert werden kann; in der Voreinstellung sind dies
256 Aktivierungen pro Minute. Ein
Wert von 0 erlaubt unbegrenzt viele
Aktivierungen.-s maximumLegt fest, wie oft ein Dienst in der Minute von
einer einzelnen IP-Adresse aus
aktiviert werden kann; in der Voreinstellung gibt es
hier keine Beschränkung. Diese Einstellung kann für
jeden Dienst durch die Angabe von
in
/etc/inetd.conf angepasst
werden.Es sind noch weitere Optionen verfügbar. Eine
vollständige Liste der Optionen finden Sie in
&man.inetd.8;.SicherheitsbedenkenViele Daemonen, die von inetd
verwaltet werden, sind nicht auf Sicherheit bedacht. Einige
Damonen, wie beispielsweise
fingerd, liefern Informationen, die
für einen Angreifer nützlich sein könnten. Aktivieren Sie nur
erforderliche Dienste und überwachen Sie das System auf
übermäßige Verbindungsversuche.
max-connections-per-ip-per-minute,
max-child und
max-child-per-ip können verwendet werden,
um solche Angriffe zu begrenzen.TCP-Wrapper ist in der
Voreinstellung aktiviert. Lesen Sie
&man.hosts.access.5;, wenn Sie weitere Informationen zum
Setzen von TCP-Beschränkungen für verschiedene von
inetd aktivierte Daemonen
benötigen.Network File System (NFS)TomRhodesReorganisiert und erweitert von BillSwingleGeschrieben von NFS&os; unterstützt das Netzwerkdateisystem
NFS, das es einem Server erlaubt, Dateien
und Verzeichnisse über ein Netzwerk mit Clients zu teilen. Mit
NFS können Benutzer und Programme auf Daten
entfernter Systeme zugreifen, und zwar so, als ob es sich
um lokal gespeicherte Daten handeln würde.Die wichtigsten Vorteile von NFS
sind:Daten, die sonst auf jeden Client dupliziert würden,
können an einem zentralen Ort aufbewahrt, und von den Clients
über das Netzwerk aufgerufen werden.Verschiedene Clients können auf ein gemeinsames
Verzeichnis /usr/ports/distfiles
zugreifen. Die gemeinsame Nutzung dieses Verzeichnisses
ermöglicht einen schnellen Zugriff auf die Quelldateien,
ohne sie auf jede Maschine zu kopieren zu müssen.In größeren Netzwerken ist es praktisch, einen
zentralen NFS-Server einzurichten, auf
dem die Heimatverzeichnisse der Benutzer gespeichert
werden. Dadurch steht den Benutzern immer das gleiche
Heimatverzeichnis zur Verfügung, unabhängig davon, an
welchem Client im Netzwerk sie sich anmelden.Die Verwaltung der NFS-Exporte wird
vereinfacht. Zum Beispiel gibt es dann nur noch ein
Dateisystem, für das Sicherheits- oder Backup-Richtlinien
festgelegt werden müssen.Wechselmedien können von anderen Maschinen im Netzwerk
verwendet werden. Dies reduziert die Anzahl von Geräten im
Netzwerk und bietet einen zentralen Ort für die Verwaltung.
Oft ist es einfacher, über ein zentrales Installationsmedium
Software auf mehreren Computern zu installieren.NFS besteht aus einem
Server und einem oder mehreren Clients. Der Client greift
über das Netzwerk auf die Daten zu, die auf dem Server
gespeichert sind. Damit dies korrekt funktioniert, müssen
einige Prozesse konfiguriert und gestartet werden:Folgende Daemonen müssen auf dem Server ausgeführt
werden:NFSServerDateiserverUnix-ClientsrpcbindmountdnfsdDaemonBeschreibungnfsdDer NFS-Daemon. Er bearbeitet
Anfragen der NFS-Clients.mountdDer NFS-Mount-Daemon. Er
bearbeitet die Anfragen von
nfsd.rpcbindDer Portmapper-Daemon. Durch ihn erkennen die
NFS-Clients, welchen Port der
NFS-Server verwendet.Der Einsatz von &man.nfsiod.8; ist nicht zwingend
erforderlich, kann aber die Leistung auf dem Client
verbessern.Konfiguration des ServersNFSeinrichtenDie Dateisysteme, die der NFS-Server
exportieren soll, werden in /etc/exports
festgelegt. Jede Zeile in dieser Datei beschreibt ein zu
exportierendes Dateisystem, Clients, die darauf
Zugriff haben sowie alle Zugriffsoptionen. Die Optionen
eines auf einen anderen Rechner exportierten Dateisystems
müssen alle in einer Zeile stehen. Wird in einer Zeile kein
Rechner festgelegt, dürfen alle Clients im Netzwerk das
exportierte Dateisystem einhängen.NFSExport von DateisystemenWie Dateisysteme exportiert werden, ist in der folgenden
/etc/exports zu sehen. Diese Beispiele
müssen natürlich an die Arbeitsumgebung und die
Netzwerkkonfiguration angepasst werden. Es existieren viele
verschiedene Optionen, allerdings werden hier nur wenige von
ihnen erwähnt. Eine vollständige Liste der Optionen findne
Sie in &man.exports.5;.Dieses Beispiel exportiert /cdrom für
drei Clients, alpha,
bravo und
charlie:/cdrom -ro alphabravocharlieDie Option kennzeichnet das
exportierte Dateisystem als schreibgeschützt. Dadurch sind
Clients nicht in der Lage, das exportierte Dateisystem zu
verändern. Dieses Beispiel geht davon aus, dass die Hostnamen
entweder über DNS oder über
/etc/hosts aufgelöst werden können.
Lesen Sie &man.hosts.5; falls das Netzwerk über keinen
DNS-Server verfügt.Das nächste Beispiel exportiert /home
auf drei durch IP-Adressen bestimmte
Clients. Diese Einstellung kann für Netzwerke ohne
DNS-Server und
/etc/hosts nützlich sein. Die Option
ermöglicht es, auch
Unterverzeichnisse als Mountpunkte festzulegen. Dies bedeutet
aber nicht, dass alle Unterverzeichnisse eingehängt werden,
vielmehr wird es dem Client ermöglicht, nur diejenigen
Verzeichnisse einzuhängen, die auch benötigt werden./home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4Das nächste Beispiel exportiert /a,
damit Clients von verschiedenen Domänen auf das Dateisystem
zugreifen können. Die Option
erlaubt es dem Benutzer root des Clients, als
root auf das
exportierte Dateisystem zu schreiben. Wenn diese Option nicht
gesetzt ist, wird der
root-Benutzer des Clients dem nobody-Konto des Servers
zugeordnet und unterliegt somit den Zugriffsbeschränkungen
dieses Kontos./a -maproot=root host.example.com box.example.orgEin Client kann für jedes Dateisystem nur einmal definiert
werden. Wenn beispielsweise /usr ein
gesondertes Dateisystem ist, dann wären die folgenden Einträge
falsch, da in beiden Einträgen der gleiche Rechner angegeben
wird:#Nicht erlaubt, wenn /usr ein einziges Dateisystem ist
/usr/src client
/usr/ports clientDas richtige Format für eine solche Situation ist:/usr/src /usr/ports clientDas Folgende ist ein Beispiel für eine gültige
Exportliste, in der /usr und
/exports lokale Dateisysteme sind:# Export src and ports to client01 and client02, but only
# client01 has root privileges on it
/usr/src /usr/ports -maproot=root client01
/usr/src /usr/ports client02
# The client machines have root and can mount anywhere
# on /exports. Anyone in the world can mount /exports/obj read-only
/exports -alldirs -maproot=root client01 client02
/exports/obj -roDamit die vom NFS-Server benötigen
Prozesse beim Booten gestartet werden, fügen Sie folgende
Optionen in /etc/rc.conf hinzu:rpcbind_enable="YES"
nfs_server_enable="YES"
mountd_flags="-r"Der Server kann jetzt mit diesem Kommando gestartet
werden:&prompt.root; service nfsd startWenn der NFS-Server startet, wird
auch mountd automatisch gestartet.
Allerdings liest mountd/etc/exports nur, wenn der Server
gestartet wird. Um nachfolgende Änderungen an
/etc/exports wirksam werden zu lassen,
kann mountd angewiesen werden, die
Datei neu einzulesen:&prompt.root; service mountd reloadKonfiguration des ClientsUm den NFS-Client zu aktivieren, setzen
Sie folgende Option in /etc/rc.conf auf
jedem Client:nfs_client_enable="YES"Der Client ist nun in der Lage, ein entferntes Dateisystem
einzuhängen. In diesen Beispielen ist der Name des Servers
server und der Name des Clients
client. Fügen Sie folgenden Befehl
aus, um das Verzeichnis /home vom
server auf dem
client ins Verzeichnis
/mnt einzuhängen:NFSDateisysteme einhängen&prompt.root; mount server:/home /mntDie Dateien und Verzeichnisse in
/home stehen dem Rechner
client nun im Verzeichnis
/mnt zur Verfügung.Um ein entferntes Dateisystem bei jedem Systemstart
automatisch einzuhängen, fügen Sie das Dateisystem in
/etc/fstab ein:server:/home /mnt nfs rw 0 0&man.fstab.5; enthält eine Beschreibung aller
Optionen.Dateien sperren (Locking)Einige Anwendungen erfordern die Sperrung von Dateien,
damit sie korrekt arbeiten. Um diese Sperre zu aktivieren,
müssen diese Zeilen in /etc/rc.conf
sowohl auf dem Client als auch auf dem Server hinzugefügt
werden:rpc_lockd_enable="YES"
rpc_statd_enable="YES"Danach starten Sie die beiden Anwendungen:&prompt.root; service lockd start
&prompt.root; service statd startWenn keine Dateisperren zwischen den
NFS-Clients und dem
NFS-Server benötigt werden, können Sie den
NFS-Client durch die Übergabe der
Option an mount
zu einer lokalen Sperrung von Dateien zwingen. Weitere
Details finden Sie in &man.mount.nfs.8;.Automatisches Einhängen mit &man.amd.8;WylieStilwellBeigetragen von ChernLeeÜberarbeitet von amdAutomatic Mounter Daemon&man.amd.8; (Automatic Mounter Daemon) hängt ein
entferntes Dateisystem automatisch ein,
wenn auf eine Datei oder ein Verzeichnis in diesem Dateisystem
zugegriffen wird. Dateisysteme, die über einen gewissen
Zeitraum inaktiv sind, werden von amd
automatisch abgehängt.Dieser Damon ist eine Alternative zum dauerhaften
Einhängen von Dateisystemen in
/etc/fstab. In der Voreinstellung stellt
amd die Verzeichnisse
/host und /net als
NFS-Server bereit. Wenn auf eine
Datei in diesen Verzeichnissen zugegriffen wird, sucht
amd den entsprechenden Mountpunkt
und hängt das Dateisystem automatisch ein.
/net wird zum Einhängen von
exportierten Dateisystemen von einer
IP-Adresse verwendet, während
/host zum Einhängen von exportierten
Dateisystemen eines durch seinen Namen festgelegten Rechners
dient. Ein Zugriff auf eine Datei in
/host/foobar/usr würde
amd veranlassen,
das von foobar exportierte
Dateisystem /usr einzuhängen.Ein exportiertes Dateisystem mit
amd in den Verzeichnisbaum
einhängenshowmount -e zeigt in diesem Beispiel
die exportierten Dateisysteme des
NFS-Servers
foobar an:&prompt.user; showmount -e foobar
Exports list on foobar:
/usr 10.10.10.0
/a 10.10.10.0
&prompt.user; cd /host/foobar/usrDie Ausgabe von showmount zeigt
/usr als exportiertes Dateisystem an.
Wenn man in das Verzeichnis
/host/foobar/usr wechselt, fängt
amd die Anfrage ab und versucht
den Rechnernamen foobar aufzulösen.
Wenn dies gelingt, wird amd
automatisch den gewünschten Export in den Verzeichnisbaum
einhängen.Um amd beim Booten zu
aktivieren, fügen Sie folgende Zeile in
/etc/rc.conf ein:amd_enable="YES"Um amd direkt zu
starten:&prompt.root; service amd startIndividuelle Optionen können über die Umgebungsvariable
amd_flags an amd
übergeben werden. In der Voreinstellung ist
amd_flags eingestellt auf:amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map"Die Standardoptionen, mit denen exportierte Dateisysteme
in den Verzeichnisbaum eingehängt werden, werden in
/etc/amd.map festgelegt. Einige der
erweiterten Optionen von amd
werden in /etc/amd.conf definiert.Weitere Informationen finden Sie in &man.amd.8; und
&man.amd.conf.5;.Network Information System (NIS)NISSolarisHP-UXAIXLinuxNetBSDOpenBSDyellow pagesNISDas Network Information System (NIS)
wurde entwickelt, um &unix;-Systeme zentral verwalten zu
können. Dazu zählen beispielsweise &solaris;, HP-UX, &aix;,
Linux, NetBSD, OpenBSD und &os;. NIS war
ursprünglich als Yellow Pages bekannt,
aus markenrechtlichen Gründen wurde der Name aber
geändert. Dies ist der Grund, warum
NIS-Kommandos mit yp
beginnen.NISDomänenBei NIS handelt es sich um ein
RPC-basiertes Client/Server-System. Eine
Gruppe von Rechnern greift dabei innerhalb einer
NIS-Domäne auf gemeinsame
Konfigurationsdateien zu. Dies erlaubt es einem
Systemadministrator, NIS-Clients mit
minimalem Aufwand einzurichten, sowie Änderungen an der
Systemkonfiguration von einem zentralen Ort aus
durchzuführen.&os; verwendet die Version 2 des
NIS-Protokolls.NIS-Begriffe und -ProzesseTabelle 30.1 fasst die Begriffe und Anwenderprozesse
zusammen, die von NIS verwendet
werden:rpcbind
NIS BegriffeBegriffBeschreibungNIS-DomänennameNIS-Masterserver und Clients
benutzen einen gemeinsamen
NIS-Domänennamen. In der Regel hat
dieser Name nichts mit DNS zu
tun.&man.rpcbind.8;Dieser Dienst aktiviert RPC
und muss gestartet sein, damit ein
NIS-Server oder -Client ausgeführt
werden kann.&man.ypbind.8;Dieser Dienst bindet einen
NIS-Client an seinen
NIS-Server. Der Client bezieht den
NIS-Domänennamen vom System und
stellt über das RPC-Protokoll eine
Verbindung zum NIS-Server her.
ypbind ist der zentrale
Bestandteil der Client-Server-Kommunikation in einer
NIS-Umgebung. Wird der Dienst
auf einem Client beendet, ist dieser nicht mehr in der
Lage, auf den NIS-Server
zuzugreifen.&man.ypserv.8;Dies ist der Prozess für den
NIS-Server. Wenn dieser Dienst
nicht mehr läuft, kann der Server nicht mehr auf
NIS-Anforderungen reagieren. Wenn
ein Slaveserver existiert, kann dieser als Ersatz
fungieren. Einige NIS-Systeme (allerdings nicht das
von &os;) versuchen allerdings erst gar nicht, sich
mit einem anderen Server zu verbinden, wenn der
Masterserver nicht mehr reagiert. Die einzige Lösung
besteht darin, den Serverprozess oder den
ypbind-Prozess auf dem
Client neu zu starten.&man.rpc.yppasswdd.8;Dieser Prozess läuft nur auf dem
NIS-Masterserver. Es handelt sich
um einen Daemonprozess, der es
NIS-Clients ermöglicht, ihre
NIS-Passwörter zu ändern. Wenn
dieser Daemon nicht läuft, müssen sich die Benutzer am
NIS-Masterserver anmelden und ihre
Passwörter dort ändern.
Arten von NIS-RechnernNISMasterserverNISSlaveserverNISClientNIS-MasterserverDieser Server dient als zentraler Speicherort für
Rechnerkonfigurationen. Zudem verwaltet er die
maßgebliche Kopie, der von den
NIS-Clients gemeinsam verwendeten
Dateien. passwd,
group, sowie verschiedene andere von
den Clients verwendete Dateien existieren auf dem
Masterserver. Obwohl ein Rechner auch für mehrere
NIS-Domänen als Masterserver fungieren
kann, wird diese Art von Konfiguration nicht behandelt, da
sich dieser Abschnitt auf eine relativ kleine
NIS-Umgebung konzentriert.NIS-SlaveserverNIS-Slaveserver verwalten Kopien
der Daten des NIS-Masterservers um
Redundanz zu bieten. Zudem entlasten Slaveserver den
Masterserver: NIS-Clients verbinden
sich immer mit dem NIS-Server, welcher
zuerst reagiert. Dieser Server kann auch ein Slaveserver
sein.NIS-ClientsNIS-Clients identifizieren sich
gegenüber dem NIS-Server während der
Anmeldung.Mit NIS können Informationen aus
verschiedenen Dateien von mehreren Rechnern gemeinsam
verwendet werden. master.passwd,
group, und hosts
werden oft gemeinsam über NIS verwendet.
Immer, wenn ein Prozess auf einem Client auf Informationen
zugreifen will, die normalerweise in lokalen Dateien vorhanden
wären, wird stattdessen eine Anfrage an den
NIS-Server gestellt, an den der Client
gebunden ist.PlanungDieser Abschnitt beschreibt eine einfache
NIS-Umgebung, welche aus 15 &os;-Maschinen
besteht, für die keine zentrale Verwaltung existiert. Jeder
Rechner hat also eine eigene Version von
/etc/passwd und
/etc/master.passwd. Diese Dateien werden
manuell synchron gehalten; wird ein neuer Benutzer
angelegt, so muss dies auf allen fünfzehn Rechnern manuell
erledigt werden.In Zukunft soll die Konfiguration wie folgt
aussehen:RechnernameIP-AdresseRechneraufgabeellington10.0.0.2NIS-Mastercoltrane10.0.0.3NIS-Slavebasie10.0.0.4Workstation der Fakultätbird10.0.0.5Clientrechnercli[1-11]10.0.0.[6-17]Verschiedene andere ClientsWenn erstmalig ein NIS-Schema eingerichtet wird, sollte
es im Voraus sorgfältig geplant werden. Unabhängig von der
Größe des Netzwerks müssen einige Entscheidungen im Rahmen
des Planungsprozesses getroffen werden.Einen NIS-Domänennamen
wählenNISDomänennameWenn ein Client Informationen anfordert, ist in dieser
Anforderung der Name der NIS-Domäne
enthalten. Dadurch weiß jeder Server im Netzwerk, auf
welche Anforderung er antworten muss. Stellen Sie sich
den NIS-Domänennamen als einen Namen
einer Gruppe von Rechnern vor.Manchmal wird der Name der Internetdomäne auch
für die NIS-Domäne verwendet. Dies ist
allerdings nicht empfehlenswert, da es bei der Behebung
von Problemen verwirrend sein kann. Der Name der
NIS-Domäne sollte innerhalb des
Netzwerks eindeutig sein. Hilfreich ist es, wenn der
Name die Gruppe der in ihr zusammengefassten Rechner
beschreibt. Die Kunstabteilung von Acme Inc. hätte daher
vielleicht die NIS-Domäne
acme-art. Für dieses Beispiel wird der
Name test-domain verwendet.Es gibt jedoch auch Betriebssysteme, die als
NIS-Domänennamen den Namen der
Internetdomäne verwenden. Wenn dies für einen oder
mehrere Rechner des Netzwerks zutrifft,
muss der Name der Internetdomäne als
NIS-Domänennamen verwendet
werden.Anforderungen an den ServerBei der Wahl des NIS-Servers müssen
einige Dinge beachtet werden. Da die
NIS-Clients auf die Verfügbarkeit des
Servers angewiesen sind, sollten Sie einen Rechner wählen,
der nicht regelmäßig neu gestartet werden muss. Der
NIS-Server sollte idealerweise ein
alleinstehender Rechner sein, dessen einzige Aufgabe es
ist, als NIS-Server zu dienen. Wenn
das Netzwerk nicht zu stark ausgelastet ist, ist es auch
möglich, den NIS-Server als weiteren
Dienst auf einem anderen Rechner laufen zu lassen. Wenn
jedoch ein NIS-Server ausfällt, wirkt
sich dies negativ auf alle
NIS-Clients aus.Einen NIS-Masterserver
konfigurierenDie verbindlichen Kopien aller
NIS-Dateien befinden sich auf dem
Masterserver. Die Datenbanken, in denen die Informationen
gespeichert sind, bezeichnet man als
NIS-Maps. Unter &os; werden diese Maps
unter /var/yp/[domainname] gespeichert,
wobei [domainname] der Name der
NIS-Domäne ist. Da ein
NIS-Server mehrere Domänen verwalten
kann, können auch mehrere Verzeichnisse vorhanden sein.
Jede Domäne verfügt über ein eigenes Verzeichnis sowie einen
eigenen, von anderen Domänen unabhängigen Satz von
NIS-Maps.NIS-Master- und Slaveserver
verwenden &man.ypserv.8;, um NIS-Anfragen
zu bearbeiten. Dieser Daemon ist für eingehende Anfragen
der NIS-Clients verantwortlich. Er ermittelt aus der
angeforderten Domäne und Map einen Pfad zur entsprechenden
Datenbank, und sendet die angeforderten Daten von der
Datenbank zum Client.NISServerkonfigurationAbhängig von den Anforderungen ist die Einrichtung
eines NIS-Masterservers relativ
einfach, da NIS von &os; bereits in der
Standardkonfiguration unterstützt wird. Es kann durch
folgende Zeilen in /etc/rc.conf
aktiviert werden:nisdomainname="test-domain"Diese Zeile setzt den
NIS-Domänennamen auf
test-domain.nis_server_enable="YES"Dadurch werden die
NIS-Serverprozesse beim Systemstart
automatisch ausgeführt.nis_yppasswdd_enable="YES"Durch diese Zeile wird der
&man.rpc.yppasswdd.8;-Daemon aktiviert,
der die Änderung von
NIS-Passwörtern von einem Client
aus ermöglicht.Wird ypserv in einer
Multi-Serverdomäne verwendet, in der
NIS-Server gleichzeitig als
NIS-Clients arbeiten, ist es eine gute Idee,
diese Server zu zwingen, sich an sich selbst zu binden. Damit
wird verhindert, dass Bindeanforderungen gesendet werden und
sich die Server gegenseitig binden. Sonst könnten seltsame
Fehler auftreten, wenn ein Server ausfällt, auf den andere
Server angewiesen sind. Letztlich werden alle Clients einen
Timeout melden, und versuchen, sich an andere Server zu binden.
Die dadurch entstehende Verzögerung kann beträchtlich
sein. Außerdem kann der Fehler erneut auftreten, da sich
die Server wiederum aneinander binden könnten.Server, die auch als Client arbeiten, können durch das
Hinzufügen der folgenden Zeilen in
/etc/rc.conf zu gezwungen werden, sich an
einen bestimmten Server zu binden:nis_client_enable="YES" # run client stuff as well
nis_client_flags="-S NIS domain,server"Nachdem die Parameter konfiguriert wurden, muss noch
/etc/netstart ausgeführt werden, um
alles entsprechend den Vorgaben in
/etc/rc.conf einzurichten.
Bevor die NIS-Maps einrichtet werden
können, muss der &man.ypserv.8;-Daemon manuell gestartet
werden:&prompt.root; service ypserv startDie NIS-Maps
initialisierenNISmapsNIS-Maps Sie werden am
NIS-Masterserver aus den
Konfigurationsdateien unter /etc
erzeugt. Einzige Ausnahme:
/etc/master.passwd. Dies verhindert,
dass die Passwörter für
root- oder
andere Administratorkonten an alle Server in der
NIS-Domäne verteilt werden.
Deshalb werden die primären Passwort-Dateien konfiguriert,
bevor die NIS-Maps initialisiert
werden:&prompt.root; cp /etc/master.passwd /var/yp/master.passwd
&prompt.root; cd /var/yp
&prompt.root; vi master.passwdEs ist ratsam, alle Einträge für Systemkonten sowie
Benutzerkonten, die nicht an die
NIS-Clients weitergegeben werden
sollen, wie beispielsweise root und weitere
administrative Konten, zu entfernen.Stellen Sie sicher, dass
/var/yp/master.passwd weder von der
Gruppe noch von der Welt gelesen werden kann, indem Sie
Zugriffsmodus auf 600
einstellen.Nun können die NIS-Maps
initialisiert werden. &os; verwendet dafür das Skript
&man.ypinit.8;. Geben Sie und den
NIS-Domänennamen an, wenn Sie
NIS-Maps für den Masterserver
erzeugen:ellington&prompt.root; ypinit -m test-domain
Server Type: MASTER Domain: test-domain
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
At this point, we have to construct a list of this domains YP servers.
rod.darktech.org is already known as master server.
Please continue to add any slave servers, one per line. When you are
done with the list, type a <control D>.
master server : ellington
next host to add: coltrane
next host to add: ^D
The current list of NIS servers looks like this:
ellington
coltrane
Is this correct? [y/n: y] y
[..output from map generation..]
NIS Map update completed.
ellington has been setup as an YP master server without any errors.Dadurch erzeugt ypinit/var/yp/Makefile aus
/var/yp/Makefile.dist. Diese Datei
geht in der Voreinstellung davon aus, dass in einer
NIS-Umgebung mit nur einem Server
gearbeitet wird und dass
alle Clients unter &os; laufen. Da
test-domain aber auch über einen
Slaveserver verfügt, muss
/var/yp/Makefile entsprechend
angepasst werden, sodass es mit einem Kommentar
(#) beginnt:
NOPUSH = "True"Neue Benutzer hinzufügenJedes Mal, wenn ein neuer Benutzer angelegt wird,
muss er am NIS-Masterserver hinzugefügt
und die NIS-Maps anschließend neu
erzeugt werden. Wird dieser Punkt vergessen, kann sich
der neue Benutzer nur am
NIS-Masterserver anmelden. Um
beispielsweise den neuen Benutzer
jsmith zur
Domäne test-domain hinzufügen wollen,
müssen folgende Kommandos auf dem Masterserver ausgeführt
werden:&prompt.root; pw useradd jsmith
&prompt.root; cd /var/yp
&prompt.root; make test-domainStatt pw useradd jsmith kann
auch adduser jsmith verwendet
werden.Einen NIS-Slaveserver
einrichtenNISSlaveserverUm einen NIS-Slaveserver
einzurichten, melden Sie sich am Slaveserver an und
bearbeiten Sie /etc/rc.conf analog
zum Masterserver. Erzeugen Sie aber keine
NIS-Maps, da diese bereits auf dem
Server vorhanden sind. Wenn ypinit
auf dem Slaveserver ausgeführt wird, benutzen Sie
(Slave) statt
(Master). Diese Option benötigt den Namen des
NIS-Masterservers und den Domänennamen,
wie in diesem Beispiel zu sehen:coltrane&prompt.root; ypinit -s ellington test-domain
Server Type: SLAVE Domain: test-domain Master: ellington
Creating an YP server will require that you answer a few questions.
Questions will all be asked at the beginning of the procedure.
Do you want this procedure to quit on non-fatal errors? [y/n: n] n
Ok, please remember to go back and redo manually whatever fails.
If not, something might not work.
There will be no further questions. The remainder of the procedure
should take a few minutes, to copy the databases from ellington.
Transferring netgroup...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byuser...
ypxfr: Exiting: Map successfully transferred
Transferring netgroup.byhost...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byuid...
ypxfr: Exiting: Map successfully transferred
Transferring passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring group.bygid...
ypxfr: Exiting: Map successfully transferred
Transferring group.byname...
ypxfr: Exiting: Map successfully transferred
Transferring services.byname...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring rpc.byname...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.byname...
ypxfr: Exiting: Map successfully transferred
Transferring master.passwd.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byname...
ypxfr: Exiting: Map successfully transferred
Transferring networks.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring netid.byname...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byaddr...
ypxfr: Exiting: Map successfully transferred
Transferring protocols.bynumber...
ypxfr: Exiting: Map successfully transferred
Transferring ypservers...
ypxfr: Exiting: Map successfully transferred
Transferring hosts.byname...
ypxfr: Exiting: Map successfully transferred
coltrane has been setup as an YP slave server without any errors.
Remember to update map ypservers on ellington.Hierbei wird auf dem Slaveserver ein Verzeichnis
namens /var/yp/test-domain erstellt,
welches Kopien der
NIS-Masterserver-Maps enthält. Durch
hinzufügen der folgenden Zeilen in
/etc/crontab wird der Slaveserver
angewiesen, seine Maps mit den Maps des Masterservers zu
synchronisieren:20 * * * * root /usr/libexec/ypxfr passwd.byname
21 * * * * root /usr/libexec/ypxfr passwd.byuidDiese Einträge sind nicht zwingend notwendig,
da der Masterserver automatisch versucht, alle Änderungen
seiner NIS-Maps an seine Slaveserver
weiterzugeben. Da Passwortinformationen aber auch für nur
vom Slaveserver abhängige Systeme vital sind, ist es eine
gute Idee, diese Aktualisierungen zu erzwingen. Besonders
wichtig ist dies in stark ausgelasteten Netzen, in denen
Map-Aktualisierungen unvollständig sein könnten.Um die Konfiguration abzuschließen, führen Sie
/etc/netstart auf dem Slaveserver aus,
um die NIS-Dienste erneut zu
starten.Einen NIS-Client einrichtenEin NIS-Client
bindet sich unter Verwendung von
ypbind an einen
NIS-Server. Dieser Daemon sendet
RPC-Anfragen auf dem lokalen Netzwerk. Diese Anfragen legen
den Namen der Domäne fest, die auf dem Client konfiguriert
ist. Wenn der Server der entsprechenden Domäne eine solche
Anforderung erhält, schickt er eine Antwort an
ypbind, das wiederum die Adresse des
Servers speichert. Wenn mehrere Server verfügbar sind,
verwendet der Client die erste erhaltene Adresse und richtet
alle Anfragen an genau diesen Server.
ypbindpingt den Server
gelegentlich an, um sicherzustellen, dass der Server
funktioniert. Antwortet der Server innerhalb eines
bestimmten Zeitraums nicht (Timeout), markiert
ypbind die Domäne als ungebunden und
beginnt erneut, RPCs über das Netzwerk zu
verteilen, um einen anderen Server zu finden.NISClient konfigurierenEinen &os;-Rechner als NIS-Client
einrichten:Fügen Sie folgende Zeilen in
/etc/rc.conf ein, um den
NIS-Domänennamen festzulegen, und
um &man.ypbind.8; bei der Initialisierung
des Netzwerks zu starten:nisdomainname="test-domain"
nis_client_enable="YES"Um alle Passworteinträge des
NIS-Servers zu
importieren, löschen Sie alle Benutzerkonten in
/etc/master.passwd mit
vipw. Denken Sie daran, zumindest
ein lokales Benutzerkonto zu behalten. Dieses Konto
sollte außerdem Mitglied der Gruppe wheel sein. Wenn es
mit NIS Probleme gibt, können Sie
diesen Zugang verwenden, um sich als Superuser
anzumelden und das Problem zu beheben. Bevor Sie die
Änderungen speichern, fügen Sie folgende Zeile am Ende
der Datei hinzu:+:::::::::Diese Zeile legt für alle gültigen Benutzerkonten
der NIS-Server-Maps einen Zugang
an. Es gibt verschiedene Wege, den
NIS-Client durch Änderung dieser
Zeile zu konfigurieren. Eine Methode wird in
beschrieben.
Weitere detaillierte Informationen finden Sie im Buch
Managing NFS and NIS vom O'Reilly
Verlag.Um alle möglichen Gruppeneinträge vom
NIS-Server zu importieren, fügen
Sie folgende Zeile in /etc/group
ein:+:*::Um den NIS-Client direkt zu
starten, führen Sie als Superuser die folgenden Befehle
aus:&prompt.root; /etc/netstart
&prompt.root; service ypbind startDanach sollte bei der Eingabe von
ypcat passwd auf dem Client die
passwd-Map des
NIS-Servers angezeigt werden.Sicherheit unter NISDa RPC ein Broadcast-basierter Dienst
ist, kann jedes System innerhalb der Domäne mittels
ypbind den Inhalt der
NIS-Maps abrufen. Um nicht autorisierte
Transaktionen zu verhindern, unterstützt &man.ypserv.8; eine
Funktion namens securenets, durch die der
Zugriff auf bestimmte Rechner beschränkt werden kann. In der
Voreinstellung sind diese Informationen in
/var/yp/securenets gespeichert, es sei
denn, &man.ypserv.8; wurde mit der Option
und einem alternativen Pfad gestartet. Diese Datei enthält
Einträge, die aus einer Netzwerkadresse und einer Netzmaske
bestehen. Kommentarzeilen beginnen mit #.
/var/yp/securnets könnte beispielsweise
so aussehen:# allow connections from local host -- mandatory
127.0.0.1 255.255.255.255
# allow connections from any host
# on the 192.168.128.0 network
192.168.128.0 255.255.255.0
# allow connections from any host
# between 10.0.0.0 to 10.0.15.255
# this includes the machines in the testlab
10.0.0.0 255.255.240.0Wenn &man.ypserv.8; eine Anforderung von einer zu diesen
Regeln passenden Adresse erhält, wird die Anforderung
bearbeitet. Gibt es keine passende Regel, wird die
Anforderung ignoriert und eine Warnmeldung aufgezeichnet.
Wenn securenets nicht existiert, erlaubt
ypserv Verbindungen von jedem
Rechner. beschreibt eine
alternative Methode zur Zugriffskontrolle. Obwohl beide
Methoden einige Sicherheit gewähren, sind sie anfällig
für IP-Spoofing-Angriffe. Der
NIS-Verkehr sollte daher von einer Firewall
blockiert werden.Server, die securenets
verwenden, können Schwierigkeiten bei der Anmeldung von
NIS-Clients haben, die ein veraltetes TCP/IP-Subsystem
besitzen. Einige dieser TCP/IP-Subsysteme setzen alle
Rechnerbits auf Null, wenn sie einen
Broadcast durchführen oder
können die Subnetzmaske nicht auslesen, wenn sie die
Broadcast-Adresse berechnen. Einige Probleme können
durch Änderungen der Clientkonfiguration behoben werden.
Andere hingegen lassen sich nur durch das Entfernen des
betreffenden Rechners aus dem Netzwerk oder den Verzicht auf
securenets umgehen.TCP-WrapperDie Verwendung der
TCP-Wrapper verlangsamt die
Reaktion des NIS-Servers. Diese zusätzliche Reaktionszeit
kann in Clientprogrammen zu Timeouts führen. Dies vor allem
in Netzwerken, die stark ausgelastet sind, oder nur über
langsame NIS-Server verfügen. Wenn ein
oder mehrere Clients dieses Problem aufweisen, sollten Sie die
betreffenden Clients in NIS-Slaveserver umwandeln, und diese
an sich selbst binden.Bestimmte Benutzer an der Anmeldung hindernIn diesem Beispiel gibt es innerhalb der
NIS-Domäne den Rechner
basie, der nur für Mitarbeiter der
Fakultät bestimmt ist. Die passwd
Datenbank des NIS-Masterservers enthält
Benutzerkonten sowohl für Fakultätsmitarbeiter als auch für
Studenten. Dieser Abschnitt beschreibt, wie Sie den
Mitarbeitern der Fakultät die Anmeldung am System
ermöglichen, während den Studenten die Anmeldung verweigert
wird.Es gibt eine Möglichkeit, bestimmte Benutzer an der
Anmeldung an einem bestimmten Rechner zu hindern, selbst wenn
diese in der NIS-Datenbank vorhanden sind.
Dazu kann mit vipw der Eintrag
-Benutzername und
die richtige Anzahl von Doppelpunkten an das Ende von
/etc/master.passwd gesetzt werden, wobei
Benutzername der zu blockierende
Benutzername ist. Die Zeile mit dem geblockten Benutzer muss
dabei vor der + Zeile, für zugelassene
Benutzer stehen. In diesem Beispiel wird die Anmeldung für
den Benutzer
bill am Rechner
basie blockiert:basie&prompt.root; cat /etc/master.passwd
root:[password]:0:0::0:0:The super-user:/root:/bin/csh
toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh
daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5::0:0:System &:/:/sbin/nologin
bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin
tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin
games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8::0:0:News Subsystem:/:/sbin/nologin
man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin
bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin
pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin
-bill:::::::::
+:::::::::
basie&prompt.root;Netzgruppen verwendenNetzgruppenBestimmten Benutzern die Anmeldung an einzelnen Systemen
zu verweigern, kann in großen Netzwerken schnell
unübersichtlich werden. Dadurch verlieren Sie den
Hauptvorteil von NIS: die
zentrale Verwaltung.Netzgruppen wurden entwickelt, um große, komplexe
Netzwerke mit Hunderten Benutzern und Rechnern zu verwalten.
Ihre Aufgabe ist vergleichbar mit &unix; Gruppen. Die
Hauptunterschiede sind das Fehlen einer numerischen ID sowie
die Möglichkeit, Netzgruppen zu definieren, die sowohl
Benutzer als auch andere Netzgruppen enthalten.Um das Beispiel in diesem Kapitel fortzuführen, wird die
NIS-Domäne um zusätzliche Benutzer und
Rechner erweitert:
Zusätzliche BenutzerBenutzername(n)Beschreibungalpha,
betaMitarbeiter der IT-Abteilungcharlie,
deltaLehrlinge der IT-Abteilungecho,
foxtrott,
golf, ...Mitarbeiterable,
baker, ...Praktikanten
Zusätzliche RechnerRechnername(n)Beschreibungwar, death,
famine, pollutionNur Mitarbeiter der IT-Abteilung dürfen sich an
diesen Rechnern anmelden.pride, greed,
envy, wrath,
lust, slothNur Mitarbeiter und Lehrlinge der IT-Abteilung
dürfen sich auf diesen Rechnern anmelden.one, two,
three, four, ...Gewöhnliche Arbeitsrechner für
Mitarbeiter.trashcanEin sehr alter Rechner ohne kritische Daten.
Sogar Praktikanten dürfen diesen Rechner
verwenden.
Bei der Verwendung von Netzgruppen wird jeder Benutzer
einer oder mehreren Netzgruppen zugewiesen und die Anmeldung
wird dann für die Netzgruppe erlaubt oder verwehrt. Wenn ein
neuer Rechner hinzugefügt wird, müssen die
Zugangsbeschränkungen nur für die Netzgruppen festgelegt
werden. Wird ein neuer Benutzer angelegt, muss er einer oder
mehreren Netzgruppen zugewiesen werden. Wenn die Einrichtung
von NIS sorgfältig geplant wurde, muss nur
noch eine zentrale Konfigurationsdatei bearbeitet werden, um
den Zugriff auf bestimmte Rechner zu erlauben oder zu
verbieten.Dieses Beispiel erstellt vier Netzgruppen:
IT-Mitarbeiter, IT-Lehrlinge, normale Mitarbeiter
sowie Praktikanten:IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
USERS (,echo,test-domain) (,foxtrott,test-domain) \
(,golf,test-domain)
INTERNS (,able,test-domain) (,baker,test-domain)Jede Zeile konfiguriert eine Netzgruppe. Die erste Spalte
der Zeile bezeichnet den Namen der Netzgruppe. Die Einträge
in den Klammern stehen entweder für eine Gruppe von einem oder
mehreren Benutzern, oder für den Namen einer weiteren
Netzgruppe. Wenn ein Benutzer angegeben wird, haben die drei
Felder in der Klammer folgende Bedeutung:Der Name des Rechner(s), auf dem die weiteren Felder
für den Benutzer gültig sind. Wird kein Rechnername
festgelegt, ist der Eintrag auf allen Rechnern
gültig.Der Name des Benutzerkontos, der zu dieser Netzgruppe
gehört.Die NIS-Domäne für das Benutzerkonto. Benutzerkonten
können von anderen NIS-Domänen in eine Netzgruppe
importiert werden.Wenn eine Gruppe mehrere Benutzer enthält, müssen diese
durch Leerzeichen getrennt werden. Darüber hinaus kann jedes
Feld Wildcards enthalten. Weitere Einzelheiten finden Sie in
&man.netgroup.5;.NetzgruppenNetzgruppennamen sollten nicht länger als 8 Zeichen
sein. Es wird zwischen Groß- und Kleinschreibung
unterschieden. Die Verwendung von Großbuchstaben für
Netzgruppennamen ermöglicht eine leichte Unterscheidung
zwischen Benutzern, Rechnern und Netzgruppen.Einige NIS-Clients (dies gilt nicht
für &os;) können keine Netzgruppen mit mehr als 15 Einträgen
verwalten. Diese Grenze kann umgangen werden, indem mehrere
Subnetzgruppen mit weniger als fünfzehn Benutzern angelegt
werden und diese Subnetzgruppen wiederum in einer Netzgruppe
zusammengefasst wird, wie in diesem Beispiel zu
sehen:BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...]
BIGGRP2 (,joe16,domain) (,joe17,domain) [...]
BIGGRP3 (,joe31,domain) (,joe32,domain)
BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3Wiederholen Sie diesen Vorgang, wenn mehr als 225
(15*15) Benutzer in einer einzigen Netzgruppe
existieren.Die neue NIS-Map aktivieren und
verteilen:ellington&prompt.root; cd /var/yp
ellington&prompt.root; makeDadurch werden die NIS-Maps netgroup,
netgroup.byhost und
netgroup.byuser erzeugt. Prüfen Sie
die Verfügbarkeit der neuen NIS-Maps mit
&man.ypcat.1;:ellington&prompt.user; ypcat -k netgroup
ellington&prompt.user; ypcat -k netgroup.byhost
ellington&prompt.user; ypcat -k netgroup.byuserDie Ausgabe des ersten Befehls gibt den Inhalt von
/var/yp/netgroup wieder. Der zweite
Befehl erzeugt nur dann eine Ausgabe, wenn rechnerspezifische
Netzgruppen erzeugt wurden. Der dritte Befehl gibt die
Netzgruppen nach Benutzern sortiert aus.Wenn Sie einen Client einrichten, verwenden Sie
&man.vipw.8; um den Namen der Netzgruppe anzugeben. Ersetzen
Sie beispielsweise auf dem Server namens
war die folgende Zeile:+:::::::::durch+@IT_EMP:::::::::ersetzt werden.Diese Zeile legt fest, dass nur noch Benutzer der
Netzgruppe IT_EMP in die Passwortdatenbank
dieses Systems importiert werden. Nur diese Benutzer dürfen
sich an diesem Server anmelden.Diese Konfiguration gilt auch für die
~-Funktion der Shell und für alle Routinen,
die auf Benutzernamen und numerische Benutzer-IDs zugreifen.
Oder anders formuliert,
cd ~Benutzer ist
nicht möglich, ls -l zeigt die numerische
Benutzer-ID statt dem Benutzernamen und
find . -user joe -print erzeugt die
Fehlermeldung No such user. Um dieses
Problem zu beheben, müssen alle Benutzereinträge importiert
werden, ohne ihnen jedoch zu erlauben, sich am Server
anzumelden. Dies kann durch das Hinzufügen einer zusätzlichen
Zeile erreicht werden:+:::::::::/sbin/nologinDiese Zeile weist den Client an, alle Einträge zu
importieren, aber die Shell in diesen Einträgen durch
/sbin/nologin zu ersetzen.Stellen Sie sicher, dass die zusätzliche Zeile
nach der Zeile
+@IT_EMP::::::::: eingetragen ist.
Andernfalls haben alle via NIS
importierten Benutzerkonten /sbin/nologin
als Loginshell und niemand wird sich mehr am System anmelden
können.Um die weniger wichtigen Server zu konfigurieren, ersetzen
Sie den alten Eintrag +::::::::: auf den
Servern mit diesen Zeilen:+@IT_EMP:::::::::
+@IT_APP:::::::::
+:::::::::/sbin/nologinDie entsprechenden Zeilen für Arbeitsplätze lauten:+@IT_EMP:::::::::
+@USERS:::::::::
+:::::::::/sbin/nologinNIS ist in der Lage, Netzgruppen aus
anderen Netzgruppen zu bilden. Dies kann nützlich sein, wenn
sich die Firmenpolitik ändert. Eine Möglichkeit ist die
Erzeugung rollenbasierter Netzgruppen. Sie könnten eine
Netzgruppe BIGSRV erzeugen, um den Zugang
zu den wichtigsten Servern zu beschränken, eine weitere Gruppe
SMALLSRV für die weniger wichtigen Server
und eine dritte Netzgruppe USERBOX für die
Arbeitsplatzrechner. Jede dieser Netzgruppen enthält die
Netzgruppen, die sich auf diesen Rechnern anmelden dürfen.
Die Einträge der Netzgruppen in der NIS-Map
sollten ähnlich den folgenden aussehen:BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERSDiese Methode funktioniert besonders gut, wenn
Rechner in Gruppen mit identischen Beschränkungen eingeteilt
werden können. Unglücklicherweise ist dies die Ausnahme und
nicht die Regel. Meistens wird die Möglichkeit zur
rechnerspezischen Zugangsbeschränkung benötigt.
Rechnerspezifische Netzgruppen sind eine weitere
Möglichkeit, um mit den oben beschriebenen Änderungen
umzugehen. In diesem Szenario enthält
/etc/master.passwd auf jedem Rechner zwei
mit + beginnende Zeilen. Die erste Zeile
legt die Netzgruppe mit den Benutzern fest, die sich auf diesem
Rechner anmelden dürfen. Die zweite Zeile weist allen
anderen Benutzern /sbin/nologin als Shell
zu. Verwenden Sie auch hier (analog zu den Netzgruppen)
Großbuchstaben für die Rechnernamen:+@BOXNAME:::::::::
+:::::::::/sbin/nologinSobald dies für alle Rechner erledigt ist, müssen die
lokalen Versionen von /etc/master.passwd
nie mehr verändert werden. Alle weiteren Änderungen geschehen
über die NIS-Maps. Nachfolgend ein
Beispiel für eine mögliche Netzgruppen-Map:# Define groups of users first
IT_EMP (,alpha,test-domain) (,beta,test-domain)
IT_APP (,charlie,test-domain) (,delta,test-domain)
DEPT1 (,echo,test-domain) (,foxtrott,test-domain)
DEPT2 (,golf,test-domain) (,hotel,test-domain)
DEPT3 (,india,test-domain) (,juliet,test-domain)
ITINTERN (,kilo,test-domain) (,lima,test-domain)
D_INTERNS (,able,test-domain) (,baker,test-domain)
#
# Now, define some groups based on roles
USERS DEPT1 DEPT2 DEPT3
BIGSRV IT_EMP IT_APP
SMALLSRV IT_EMP IT_APP ITINTERN
USERBOX IT_EMP ITINTERN USERS
#
# And a groups for a special tasks
# Allow echo and golf to access our anti-virus-machine
SECURITY IT_EMP (,echo,test-domain) (,golf,test-domain)
#
# machine-based netgroups
# Our main servers
WAR BIGSRV
FAMINE BIGSRV
# User india needs access to this server
POLLUTION BIGSRV (,india,test-domain)
#
# This one is really important and needs more access restrictions
DEATH IT_EMP
#
# The anti-virus-machine mentioned above
ONE SECURITY
#
# Restrict a machine to a single user
TWO (,hotel,test-domain)
# [...more groups to follow]
Es ist nicht immer ratsam, rechnerbasierte Netzgruppen zu
verwenden. Wenn Dutzende oder Hunderte identische Rechner
eingerichtet werden müssen, sollten rollenbasierte Netzgruppen
verwendet werden, um die Größe der NIS-Maps
in Grenzen zu halten.PasswortformateNISPasswortformateAlle Rechner innerhalb der NIS-Domäne
müssen für die Verschlüsselung von Passwörtern das gleiche
Format benutzen. Wenn Benutzer Schwierigkeiten bei der
Authentifizierung auf einem NIS-Client
haben, liegt dies möglicherweise an einem anderen
Passwort-Format. In einem heterogenen Netzwerk muss das
verwendete Format von allen Betriebssystemen unterstützt
werden, wobei DES der kleinste gemeinsame
Standard ist.Welches Format die Server und Clients verwenden,
steht in /etc/login.conf:default:\
:passwd_format=des:\
:copyright=/etc/COPYRIGHT:\
[weitere Einträge]In diesem Beispiel verwendet das System das Format
DES. Weitere mögliche Werte sind unter
anderem blf und md5 (mit
Blowfish und MD5 verschlüsselte Passwörter).Wird auf einem Rechner das Format entsprechend der
NIS-Domäne geändert, muss anschließend die
Login-Capability Datenbank neu erstellt werden:&prompt.root; cap_mkdb /etc/login.confDas Format der schon bestehenden Passwörter wird erst
aktualisiert, wenn ein Benutzer sein Passwort ändert,
nachdem die Datenbank neu erstellt
wurde.Lightweight Access Directory Protocol
(LDAP)TomRhodesGeschrieben von LDAPDas Lightweight Directory Access Protocol
(LDAP) ist ein Protokoll der
Anwendungsschicht, das verwendet wird um Objekte mithilfe eines
verteilten Verzeichnisdienstes abzurufen, zu verändern und zu
authentifizieren. Betrachten Sie es als ein Telefonbuch, das
homogene Informationen in mehreren hierarchischen Ebenen
speichert. Es wird in Active Directory und
OpenLDAP-Netzwerken eingesetzt, in
denen Benutzer unter Verwendung eines einzigen Kontos auf
diverse interne Informationen zugreifen. Beispielsweise kann
E-Mail-Authentifizierung, Abfrage von Kontaktinformationen
und Website-Authentifizierung über ein einzelnes Benutzerkonto
aus der Datenbank des LDAP-Servers
erfolgen.Dieser Abschnitt enthält eine kompakte Anleitung, um einen
LDAP-Server auf einem &os;-System zu
konfigurieren. Es wird vorausgesetzt, dass der Administrator
bereits einen Plan erarbeitet hat, der verschiedene Punkte
umfasst, unter anderem die Art der zu speichernden
Informationen, für was die Informationen verwendet
werden, welche Benutzer Zugriff auf die Informationen haben und
wie die Informationen vor unbefugtem Zugriff geschützt
werden.LDAP Terminologie und StrukturLDAP verwendet mehrere Begriffe die
Sie verstehen sollten bevor Sie die Konfiguration beginnen.
Alle Verzeichniseinträge bestehen aus einer Gruppe von
Attributen. Jede
Attributgruppe enthält einen eindeutigen Bezeichner, der als
distinguished name
(DN) bekannt ist. Dieser setzt sich
normalerweise aus mehreren anderen Attributen, wie dem
Relative Distinguished Name
(RDN) zusammen. Wie bei Verzeichnissen
gibt es auch hier absolute und relative Pfade. Betrachten Sie
DN als absoluten Pfad und
RDN als relativen Pfad.Beispielsweise könnte ein LDAP-Eintrag
wie folgt aussehen. Dieses Beispiel sucht nach dem Eintrag
für das angegebene Benutzerkonto (uid),
Organisationseinheit (ou und Organisation
(o):&prompt.user; ldapsearch -xb "uid=trhodes,ou=users,o=example.com"
# extended LDIF
#
# LDAPv3
# base <uid=trhodes,ou=users,o=example.com> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# trhodes, users, example.com
dn: uid=trhodes,ou=users,o=example.com
mail: trhodes@example.com
cn: Tom Rhodes
uid: trhodes
telephoneNumber: (123) 456-7890
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries:1Die Einträge in diesem Beispiel zeigen die Werte für die
Attribute dn, mail,
cn, uid und
telephoneNumber. Das Attribut
cn ist der RDN.Weitere Informationen über LDAP und
dessen Terminologie finden Sie unter
http://www.openldap.org/doc/admin24/intro.html.
-
+ Konfiguration eines
LDAP-ServersLDAP Server&os; integriert keinen LDAP-Server.
Beginnen Sie die Konfiguration durch die Installation des
Ports oder Pakets net/openldap24-server.
Da der Port viele konfigurierbare Optionen hat, ist es
empfehlenswert zu prüfen, ob die Installation des Pakets
ausreichend ist. Wenn Sie irgendwelche Optionen ändern
möchten, ist es besser den Port zu übersetzen. In den meisten
Fällen sollten die Standardwerte ausreichend sein. Wenn
Sie jedoch SQL-Unterstützung benötigen, muss diese Option
aktiviert und der Port nach den Anweisungen in übersetzt werden.Als nächstes muss ein Verzeichnis für Daten sowie ein
Verzeichnis für die Zertifikate erstellt werden:&prompt.root; mkdir /var/db/openldap-data
&prompt.root; mkdir /usr/local/etc/openldap/privateKopieren Sie die Konfigurationsdatei der Datenbank:&prompt.root; cp /usr/local/etc/openldap/DB_CONFIG.example /var/db/openldap-data/DB_CONFIGIm nächsten Schritt wird die Zertifizierungsstelle
konfiguriert. Die folgenden Befehle müssen in
/usr/local/etc/openldap/private
ausgeführt werden. Dies ist wichtig, da die
Dateiberechtigungen restriktiv gesetzt werden und Benutzer
keinen direkten Zugriff auf diese Daten haben sollten. Geben
Sie folgenden Befehl ein, um die Zertifizierungsstelle zu
erstellen und folgen Sie den Anweisungen:&prompt.root; openssl req -days 365 -nodes -new -x509 -keyout ca.key -out ../ca.crtDiese Einträge sind frei wählbar,
mit Ausnahme von
Common Name. Hier muss etwas anderes als
der Hostname des Systems eingetragen werden. Wenn ein
selbstsigniertes Zertifikat verwendet wird, stellen Sie dem
Hostnamen einfach das Präfix CA für die
Zertifizierungsstelle voran.Die nächste Aufgabe besteht darin, einen
Zertifikatsregistrierungsanforderung (CSR)
sowie einen privaten Schlüssel zu erstellen. Geben Sie
folgenden Befehl ein und folgen Sie den Anweisungen:&prompt.root; openssl req -days 365 -nodes -new -keyout server.key -out server.csrStellen Sie hierbei sicher, dass
Common Name richtig eingetragen wird.
Anschließend muss der Schlüssel signiert werden:&prompt.root; openssl x509 -req -days 365 -in server.csr -out ../server.crt -CA ../ca.crt -CAkey ca.key -CAcreateserialDer letzte Schritt für die Erstellung der Zertifikate
besteht darin, die Client-Zertifikate zu erstellen und zu
signieren:&prompt.root; openssl req -days 365 -nodes -new -keyout client.key -out client.csr
&prompt.root; openssl x509 -req -days 3650 -in client.csr -out ../client.crt -CAkey ca.keyAchten Sie wieder auf das Attribut
Common name. Stellen Sie außerdem sicher,
dass bei diesem Verfahren acht (8) neue Dateien erzeugt worden
sind. Der nächste Schritt besteht darin,
/usr/local/etc/openldap/slapd.conf zu
editieren und folgende Optionen hinzuzufügen:TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crtDanach bearbeiten Sie
/usr/local/etc/openldap/ldap.conf und
fügen folgende Zeilen hinzu:TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3Kommentieren Sie die folgenden Einträge aus und setzen Sie
sie auf die gewünschten Werte: ,
, und
. Setzen Sie bei
und
ein. Fügen Sie danach zwei Einträge
ein, die auf die Zertifizierungsstelle verweisen. Wenn Sie
fertig sind, sollten die Einträge wie folgt aussehen:BASE dc=example,dc=com
URI ldap:// ldaps://
SIZELIMIT 12
TIMELIMIT 15
TLS_CACERT /usr/local/etc/openldap/ca.crt
TLS_CIPHER_SUITE HIGH:MEDIUM:+SSLv3Anschließend sollte das Standardpasswort für den Server
geändert werden:&prompt.root; slappasswd -h "{SHA}" >> /usr/local/etc/openldap/slapd.confDieser Befehl wird nach einem Passwort fragen und, wenn
der Prozess nicht fehlschlägt, ein Passwort-Hash an das
Ende von slapd.conf hinzufügen. Es
werden verschiedene Hash-Formate unterstützt. Weitere
Informationen hierzu finden Sie in der Manualpage von
slappasswd.Als nächstes bearbeiten Sie
/usr/local/etc/openldap/slapd.conf und
fügen folgende Zeilen hinzu:password-hash {sha}
allow bind_v2Das Suffix in dieser Datei muss aus
/usr/local/etc/openldap/ldap.conf
entsprechen. Zudem sollte die Option
ebenfalls gesetzt werden. Ein guter Wert ist beispielsweise
. Bevor die Datei gespeichert
wird, setzen Sie die Passwortausgabe von
slappasswd hinter die Option
. Das Endergebnis sollte in etwa wie
folgt aussehen:TLSCipherSuite HIGH:MEDIUM:+SSLv3
TLSCertificateFile /usr/local/etc/openldap/server.crt
TLSCertificateKeyFile /usr/local/etc/openldap/private/server.key
TLSCACertificateFile /usr/local/etc/openldap/ca.crt
rootpw {SHA}W6ph5Mm5Pz8GgiULbPgzG37mj9g=Aktivieren Sie abschließend
OpenLDAP in
/etc/rc.conf und setzen Sie die
URI:slapd_enable="YES"
slapd_flags="-4 -h ldaps:///"An dieser Stelle kann der Server gestartet und getestet
werden:&prompt.root; service slapd startWenn alles richtig konfiguriert ist, sollte eine Suche im
Verzeichnis, wie in diesem Beispiel, eine erfolgreiche
Verbindung mit einer Antwort liefern:&prompt.root; ldapsearch -Z
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# search result
search: 3
result: 32 No such object
# numResponses: 1Wenn der Befehl fehlschlägt, aber die Konfiguration
richtig aussieht, stoppen Sie den
slapd-Dienst. Starten Sie anschließend
den Dienst mit
Debugging-Optionen:&prompt.root; service slapd stop
&prompt.root; /usr/local/libexec/slapd -d -1Sobald der Dienst antwortet, kann das Verzeichnis mit dem
Befehl ldapadd bestückt werden. In diesem
Beispiel gibt es eine Datei mit einer Liste von Benutzern, die
diesem Verzeichnis hinzugefügt werden. Die Einträge sollten
das folgende Format haben:dn: dc=example,dc=com
objectclass: dcObject
objectclass: organization
o: Example
dc: Example
dn: cn=Manager,dc=example,dc=com
objectclass: organizationalRole
cn: ManagerUm diese Datei zu importieren, geben Sie den Dateinamen
an. Bei dem folgenden Befehl werden Sie wieder zur Eingabe
des Passworts aufgefordert, das Sie zuvor eingegeben haben.
Die Ausgabe sollte wie folgt aussehen:&prompt.root; ldapadd -Z -D "cn=Manager,dc=example,dc=com" -W -f import.ldif
Enter LDAP Password:
adding new entry "dc=example,dc=com"
adding new entry "cn=Manager,dc=example,dc=com"Stellen Sie mit einer Suche auf dem Server sicher, dass
die Daten importiert wurden. Nutzen Sie dazu
ldapsearch:&prompt.user; ldapsearch -Z
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=com> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# example.com
dn: dc=example,dc=com
objectClass: dcObject
objectClass: organization
o: Example
dc: Example
# Manager, example.com
dn: cn=Manager,dc=example,dc=com
objectClass: organizationalRole
cn: Manager
# search result
search: 3
result: 0 Success
# numResponses: 3
# numEntries: 2An dieser Stelle sollte der Server konfiguriert sein und
ordnungsgemäß funktionieren.Dynamic Host Configuration Protocol
(DHCP)Dynamic Host Configuration ProtocolDHCPInternet Systems Consortium (ISC)Das Dynamic Host Configuration Protocol
(DHCP) ermöglicht es einem System, sich mit
einem Netzwerk zu verbinden und die für die Kommunikation mit
diesem Netzwerk nötigen Informationen zu beziehen. &os;
verwendet den von OpenBSD stammenden
dhclient, um die Adressinformationen
zu beziehen. &os; installiert keinen
DHCP-Server, aber es stehen einige Server
in der &os; Ports-Sammlung zu Verfügung. Das
DHCP-Protokoll wird vollständig im
RFC 2131 beschrieben. Eine weitere, lehrreiche
Informationsquelle existiert unter
isc.org/downloads/dhcp/.In diesem Abschnitt wird beschrieben, wie der integrierte
DHCP-Client verwendet wird. Anschließend
wird erklärt, wie ein DHCP-Server zu
installieren und konfigurieren ist.Unter &os; wird das Gerät &man.bpf.4; für den
DHCP-Server und den
DHCP-Client benötigt. Das Gerät ist
bereits im GENERIC-Kernel enthalten.
Benutzer, die es vorziehen einen angepassten Kernel zu
erstellen, müssen dieses Gerät behalten, wenn
DHCP verwendet wird.Es sei darauf hingewiesen, dass bpf
es priviligierten Benutzern ermöglicht einen Paket-Sniffer
auf dem System auszuführen.Einen DHCP-Client
konfigurierenDie Unterstützung für den DHCP-Client
ist im Installationsprogramm von &os; enthalten, sodass ein
neu installiertes System automatisch die Adressinformationen
des Netzwerks vom DHCP-Server
erhält. In finden Sie
Beispiele für eine Netzwerkkonfiguration.UDPdhclient beginnt von einem
Clientrechner aus über den UDP-Port 68
Konfigurationsinformationen anzufordern. Der Server antwortet
auf dem UDP-Port 67, indem er dem Client
eine IP-Adresse zuweist und ihm weitere
relevante Informationen über das Netzwerk, wie Netzmasken,
Router und DNS-Server mitteilt. Diese
Informationen werden als
DHCP-Lease bezeichnet und sind
nur für bestimmte Zeit, die vom Administrator des
DHCP-Servers vorgegeben wird, gültig.
Dadurch fallen verwaiste IP-Adressen, deren
Clients nicht mehr mit dem Netzwerk verbunden sind,
automatisch an den Server zurück.
DHCP-Clients können sehr viele
Informationen von einem DHCP-Server
erhalten. Eine ausführliche Liste finden Sie in
&man.dhcp-options.5;.Das Gerät bpf ist im
GENERIC-Kernel bereits enthalten.
Für die Nutzung von DHCP muss also kein angepasster
Kernel erzeugt werden. In einer angepassten
Kernelkonfigurationsdatei muss das Gerät enthalten sein,
damit DHCP ordnungsgemäß
funktioniert.Standardmässig läuft die DHCP-Konfiguration
bei &os; im Hintergrund oder auch
asynchron. Andere Startskripte laufen
weiter, während DHCP fertig abgearbeitet wird, was den
Systemstart beschleunigt.DHCP im Hintergrund funktioniert
gut, wenn der DHCP-Server schnell auf
Anfragen der Clients antwortet. Jedoch kann
DHCP eine lange Zeit benötigen, um auf
manchen Systemen fertig zu werden. Falls Netzwerkdienste
gestartet werden, bevor DHCP die
Informationen und Netzwerkadressen gesetzt hat, werden
diese fehlschlagen. Durch die Verwendung von
DHCP im
asynchronen Modus wird das Problem
verhindert, so dass die Startskripte pausiert werden, bis
die DHCP-Konfiguration abgeschlossen
ist.Diese Zeile wird in /etc/rc.conf
verwendet, um den asynchronen Modus zu aktivieren:ifconfig_fxp0="DHCP"Die Zeile kann bereits vorhanden sein, wenn bei der
Installation des Systems DHCP
konfiguriert wurde. Ersetzen Sie
fxp0 durch die entsprechende
Schnittstelle. Die dynamische Konfiguration von
Netzwerkkarten wird in beschrieben.Um stattdessen den synchronen Modus zu verwenden, der
während des Systemstarts pausiert bis die
DHCP-Konfiguration abgeschlossen ist,
benutzen Sie SYNCDHCP:ifconfig_fxp0="SYNCDHCP"Es stehen weitere Optionen für den Client zur
Verfügung. Suchen Sie in &man.rc.conf.5; nach
dhclient, wenn Sie an Einzelheiten
interessiert sind.DHCPKonfigurationsdateienDer DHCP-Client verwendet die folgenden
Dateien:/etc/dhclient.confDie Konfigurationsdatei von
dhclient. Diese Datei enthält
normalerweise nur Kommentare, da die Vorgabewerte zumeist
ausreichend sind. Diese Konfigurationsdatei wird in
&man.dhclient.conf.5; beschrieben./sbin/dhclientWeitere Informationen über dieses Kommando
finden Sie in &man.dhclient.8;./sbin/dhclient-scriptDas &os;-spezifische Konfigurationsskript des
DHCP-Clients. Es wird in &man.dhclient-script.8;
beschrieben und kann meist unverändert übernommen
werden./var/db/dhclient.leases.interfaceDer DHCP-Client verfügt über eine
Datenbank, die alle derzeit gültigen Leases enthält und
als Logdatei erzeugt wird. Diese Datei wird in
&man.dhclient.leases.5; beschrieben.Einen DHCP-Server installieren und
einrichtenDieser Abschnitt beschreibt die Einrichtung eines
&os;-Systems als DHCP-Server. Dazu wird
die DHCP-Implementation von ISC (Internet
Systems Consortium) verwendet. Diese Implementation und die
Dokumentation können als Port oder Paket
net/isc-dhcp42-server installiert
werden.DHCPServerDHCPinstallierenDer Port net/isc-dhcp42-server
installiert eine Beispiel-Konfigurationsdatei. Kopieren
Sie /usr/local/etc/dhcpd.conf.example
nach /usr/local/etc/dhcpd.conf und
nehmen Sie die Änderungen an der neuen Datei vor.DHCPdhcpd.confDiese Konfigurationsdatei umfasst Deklarationen für
Subnetze und Rechner, die den
DHCP-Cleints zur Verfügung gestellt wird.
Die folgenden Zeilen konfigurieren Folgendes:option domain-name "example.org";
option domain-name-servers ns1.example.org;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 72400;
ddns-update-style none;
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org;
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;
fixed-address fantasia.fugue.com;
}Diese Option beschreibt die Standardsuchdomäne,
die den Clients zugewiesen wird. Weitere
Informationen finden Sie in
&man.resolv.conf.5;.Diese Option legt eine, durch Kommata getrennte
Liste von DNS-Servern fest, die von
den Clients verwendet werden sollen. Die Server
können über den Namen (FQDN) oder
die IP-Adresse spezifiziert
werden.Die den Clients zugewiesene Subnetzmaske.Die Voreinstellung für die Ablaufzeit des Lease in
Sekunden. Ein Client kann diesen Wert in der
Konfiguration überschreiben.Die maximale Zeitdauer, für die der Server Leases
vergibt. Sollte ein Client eine längere Zeitspanne
anfordern, wird dennoch nur der Wert
max-lease-time zugewiesen.Die Voreinstellung
deaktiviert dynamische DNS-Updates.
Bei der Einstellung
aktualisiert der DHCP-Server den
DNS-Server, wenn ein Lease vergeben
oder zurückgezogen wurde. Ändern Sie die
Voreinstellung nicht, wenn der Server so konfiguriert
wurde, dynamische DNS-Updates zu
unterstützen.Diese Zeile erstellt einen Pool der verfügbaren
IP-Adressen, die für die Zuweisung
der DHCP-Clients reserviert sind.
Der Bereich muss für das angegebene Netz oder Subnetz
aus der vorherigen Zeile gültig sein.Legt das Standard-Gateway für das Netz oder
Subnetz fest, das nach der öffnenden Klammer
{ gültig ist.Bestimmt die
Hardware-MAC-Adresse eines Clients,
durch die der DHCP-Server den
Client erkennt, der eine Anforderung an ihn
stellt.Einem Rechner soll immer die gleiche
IP-Adresse zugewiesen werden. Hier
ist auch ein Rechnername gültig, da der
DHCP-Server den Rechnernamen
auflöst, bevor er das Lease zuweist.Die Konfigurationsdatei unterstützt viele weitere
Optionen. Lesen Sie &man.dhcpd.conf.5;, die mit dem Server
installiert wird, für Details und Beispiele.Nachdem dhcpd.conf
konfiguriert ist, aktivieren Sie den
DHCP-Server
/etc/rc.conf:dhcpd_enable="YES"
dhcpd_ifaces="dc0"Dabei müssen Sie dc0 durch die
Gerätedatei (mehrere Gerätedateien müssen durch Leerzeichen
getrennt werden) ersetzen, die der
DHCP-Server auf Anfragen von
DHCP-Clients hin überwachen soll.Starten Sie den Server mit folgenden Befehl:&prompt.root; service isc-dhcpd startKünftige Änderungen an der Konfiguration des Servers
erfordern, dass der Dienst dhcpd gestoppt
und anschließend mit &man.service.8; gestartet wird.DHCPKonfigurationsdateien/usr/local/sbin/dhcpdWeitere Informationen zu
dhcpd finden Sie in
&man.dhcpd.8;./usr/local/etc/dhcpd.confDie Konfigurationsdatei des Servers muss alle
Informationen enthalten, die an
die Clients weitergegeben werden soll. Außerdem
sind hier Informationen zur Konfiguration des Servers
enthalten. Diese Konfigurationsdatei wird in
&man.dhcpd.conf.5; beschrieben./var/db/dhcpd.leasesDer DHCP-Server hat eine Datenbank, die alle
vergebenen Leases enthält. Diese wird als Logdatei
erzeugt. &man.dhcpd.leases.5; enthält eine ausführliche
Beschreibung./usr/local/sbin/dhcrelayDieser Daemon wird in
komplexen Umgebungen verwendet, in denen ein
DHCP-Server eine Anfrage eines
Clients an einen DHCP-Server in einem
separaten Netzwerk weiterleitet. Wenn Sie diese
Funktion benötigen, müssen Sie
net/isc-dhcp42-relay installieren.
Weitere Informationen zu diesem Thema finden Sie in
&man.dhcrelay.8;.Domain Name System (DNS)DNSDNS ist das für die Umwandlung von
Rechnernamen in IP-Adressen zuständige
Protokoll. Im Internet wird DNS durch ein
komplexes System von autoritativen Root-Nameservern, Top Level
Domain-Servern (TLD) sowie anderen
kleineren Nameservern verwaltet, die individuelle
Domaininformationen speichern und untereinander abgleichen.
Für einfache DNS-Anfragen wird auf dem
lokalen System kein Nameserver benötigt.BINDIn &os; 10 wurde Berkeley Internet Name Domain
(BIND) aus dem Basissystem entfernt und
durch Unbound ersetzt. Unbound ist für die lokale
Namensauflösung zuständig. In der Ports-Sammlung ist
BIND immer noch als
dns/bind99 und
dns/bind98 verfügbar und in &os; 9 und
älteren Versionen ist BIND im Basissystem
enthalten. Die Version in &os; bietet erweiterte
Sicherheitsfunktionen, ein neues Dateisystem-Layout und eine
automatisierte &man.chroot.8; Konfiguration.
BIND wird betreut vom
Internet Systems Consortium.ResolverReverse-DNSRoot-ZoneDie folgende Tabelle beschreibt einige mit
DNS verbundenen Begriffe:
DNS-BegriffeBegriffBedeutungForward-DNSRechnernamen in IP-Adressen
umwandeln.Origin (Ursprung)Die in einer bestimmten Zonendatei beschriebene
Domäne.named, BINDGebräuchliche Namen für das unter &os;
verwendete BIND-Nameserverpaket.ResolverEin Systemprozess, durch den ein Rechner
Zoneninformationen von einem Nameserver anfordert.Reverse-DNSdie Umwandlung von IP-Adressen in
RechnernamenRoot-ZoneDer Beginn der Internet-Zonenhierarchie. Alle
Zonen befinden sich innerhalb der Root-Zone. Dies ist
analog zu einem Dateisystem, in dem sich alle Dateien
und Verzeichnisse innerhalb des Wurzelverzeichnisses
befinden.ZoneEine individuelle Domäne, Unterdomäne,
oder ein Teil von DNS, der von der
gleichen Autorität verwaltet wird.
ZonenBeispieleEs folgen nun einige Zonenbeispiele:Innerhalb der Dokumentation wird die Root-Zone in der
Regel mit . bezeichnet.org. ist eine Top level Domain
(TLD) innerhalb der Root-Zone.example.org.
ist eine Zone innerhalb der
org.-TLD.1.168.192.in-addr.arpa. ist die Zone mit
allen IP-Adressen des 192.168.1.*-IP-Bereichs.Wie man an diesen Beispielen erkennen kann, befindet sich
der spezifischere Teil eines Rechnernamens auf der linken Seite
der Adresse. example.org.
beschreibt einen Rechner also genauer als org.,
während org. genauer als die Root-Zone
ist. Jeder Teil des Rechnernamens hat Ähnlichkeiten mit
einem Dateisystem, in dem etwa /dev dem
Wurzelverzeichnis untergeordnet ist.Gründe für die Verwendung eines
NameserversEs gibt zwei Arten von Nameservern: Autoritative Nameserver
sowie zwischenspeichernde (cachende, auch bekannt als
auflösende) Nameserver.Ein autoritativer Nameserver ist notwendig, wennSie anderen verbindliche
DNS-Auskünfte erteilen wollen.eine Domain, beispielsweise
example.org, registriert
wird, und den zu dieser Domain gehörenden Rechnern
IP-Adressen zugewiesen werden
müssen.ein IP-Adressblock
reverse-DNS-Einträge benötigt,
um IP-Adressen in Rechnernamen
auflösen zu können.ein Backup-Nameserver (auch Slaveserver genannt) oder
ein zweiter Nameserver auf Anfragen antworten soll.Ein cachender Nameserver ist notwendig, weilein lokaler DNS-Server Daten zwischenspeichern und daher
schneller auf Anfragen reagieren kann als ein entfernter
Server.Wird nach www.FreeBSD.org
gesucht, leitet der Resolver diese Anfrage an den Nameserver des
ISPs weiter und nimmt danach das Ergebnis der
Abfrage entgegen. Existiert ein lokaler, zwischenspeichernder
DNS-Server, muss dieser die Anfrage nur einmal
nach außen weitergeben. Für alle weiteren Anfragen
ist dies nicht mehr nötig, da diese Information nun lokal
gespeichert ist.Wie funktioniert DNS?Unter &os; wird der BIND-Daemon als
named bezeichnet.DateiBeschreibungnamedDer BIND-Daemon.&man.rndc.8;Das Steuerprogramm für
named./etc/namedbDas Verzeichnis, in dem sich die Zoneninformationen
für BIND befinden./etc/namedb/named.confDie Konfigurationsdatei für
named.Je nachdem, wie eine Zone auf dem Server konfiguriert wurde,
finden sich die zur Zone gehörendenden Dateien in den
Unterverzeichnissen master, slave, oder dynamic des Verzeichnisses
/etc/namedb. Diese
Dateien enthalten die DNS-Informationen,
die der Nameserver für die Beantwortung von Anfragen
benötigt.BIND startenBINDStartDa BIND automatisch installiert wird, ist die Konfiguration
relativ einfach.In der Voreinstellung wird ein in einer &man.chroot.8;-Umgebung
betriebener named-Server zur einfachen
Namensauflösung eingerichtet, der nur im lokalen
IPv4-Loopback-Adressbereich (127.0.0.1) lauscht. Um den Server
manuell zu starten, verwenden Sie den folgenden Befehl:&prompt.root; service named onestartUm den named-Daemon beim
Systemstart automatisch zu starten, fügen Sie folgende
Zeile in /etc/rc.conf ein:named_enable="YES"/etc/namedb/named.conf bietet
zahlreiche Konfigurationsoptionen, die in diesem Dokument
nicht alle beschrieben werden können. Weitere Startoptionen
von named unter &os; finden Sie in
den
named_*-Flags in
/etc/defaults/rc.conf sowie in
&man.rc.conf.5;. Zusätzliche Informationen finden Sie im
.KonfigurationsdateienBINDKonfigurationsdateienDie Konfigurationsdateien von
named finden sich unter
/etc/namedb und müssen
in der Regel an Ihre Bedürfnisse angepasst werden. Es sei
denn, Sie benötigen nur einen einfachen Resolver. Ein
Großteil der Konfigurationsarbeiten erfolgt dabei in
diesem Verzeichnis./etc/namedb/named.conf// $FreeBSD$
//
// Refer to the named.conf(5) and named(8) man pages, and the documentation
// in /usr/share/doc/bind9 for more details.
//
// If you are going to set up an authoritative server, make sure you
// understand the hairy details of how DNS works. Even with
// simple mistakes, you can break connectivity for affected parties,
// or cause huge amounts of useless Internet traffic.
options {
// All file and path names are relative to the chroot directory,
// if any, and should be fully qualified.
directory "/etc/namedb/working";
pid-file "/var/run/named/pid";
dump-file "/var/dump/named_dump.db";
statistics-file "/var/stats/named.stats";
// If named is being used only as a local resolver, this is a safe default.
// For named to be accessible to the network, comment this option, specify
// the proper IP address, or delete this option.
listen-on { 127.0.0.1; };
// If you have IPv6 enabled on this system, uncomment this option for
// use as a local resolver. To give access to the network, specify
// an IPv6 address, or the keyword "any".
// listen-on-v6 { ::1; };
// These zones are already covered by the empty zones listed below.
// If you remove the related empty zones below, comment these lines out.
disable-empty-zone "255.255.255.255.IN-ADDR.ARPA";
disable-empty-zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
disable-empty-zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.ARPA";
// If you've got a DNS server around at your upstream provider, enter
// its IP address here, and enable the line below. This will make you
// benefit from its cache, thus reduce overall DNS traffic in the Internet.
/*
forwarders {
127.0.0.1;
};
*/
// If the 'forwarders' clause is not empty the default is to 'forward first'
// which will fall back to sending a query from your local server if the name
// servers in 'forwarders' do not have the answer. Alternatively you can
// force your name server to never initiate queries of its own by enabling the
// following line:
// forward only;
// If you wish to have forwarding configured automatically based on
// the entries in /etc/resolv.conf, uncomment the following line and
// set named_auto_forward=yes in /etc/rc.conf. You can also enable
// named_auto_forward_only (the effect of which is described above).
// include "/etc/namedb/auto_forward.conf";
Um vom Cache Ihres Internetproviders zu profitieren,
können hier forwarders aktiviert
werden. Normalerweise sucht ein Nameserver das Internet
rekursiv ab, bis er die gesuchte Antwort findet. Durch
diese Option wird stets der Nameserver Ihres
Internetproviders zuerst abgefragt, um von dessen
Cache zu profitieren. Wenn es sich um einen schnellen,
viel benutzten Nameserver handelt, kann dies zu einer
Geschwindigkeitssteigerung führen.127.0.0.1 funktioniert
hier nicht. Ändern Sie diese
Adresse in einen Nameserver des Einwahlproviders. /*
Modern versions of BIND use a random UDP port for each outgoing
query by default in order to dramatically reduce the possibility
of cache poisoning. All users are strongly encouraged to utilize
this feature, and to configure their firewalls to accommodate it.
AS A LAST RESORT in order to get around a restrictive firewall
policy you can try enabling the option below. Use of this option
will significantly reduce your ability to withstand cache poisoning
attacks, and should be avoided if at all possible.
Replace NNNNN in the example with a number between 49160 and 65530.
*/
// query-source address * port NNNNN;
};
// If you enable a local name server, don't forget to enter 127.0.0.1
// first in your /etc/resolv.conf so this server will be queried.
// Also, make sure to enable it in /etc/rc.conf.
// The traditional root hints mechanism. Use this, OR the slave zones below.
zone "." { type hint; file "/etc/namedb/named.root"; };
/* Slaving the following zones from the root name servers has some
significant advantages:
1. Faster local resolution for your users
2. No spurious traffic will be sent from your network to the roots
3. Greater resilience to any potential root server failure/DDoS
On the other hand, this method requires more monitoring than the
hints file to be sure that an unexpected failure mode has not
incapacitated your server. Name servers that are serving a lot
of clients will benefit more from this approach than individual
hosts. Use with caution.
To use this mechanism, uncomment the entries below, and comment
the hint zone above.
As documented at http://dns.icann.org/services/axfr/ these zones:
"." (the root), ARPA, IN-ADDR.ARPA, IP6.ARPA, and ROOT-SERVERS.NET
are availble for AXFR from these servers on IPv4 and IPv6:
xfr.lax.dns.icann.org, xfr.cjr.dns.icann.org
*/
/*
zone "." {
type slave;
file "/etc/namedb/slave/root.slave";
masters {
192.5.5.241; // F.ROOT-SERVERS.NET.
};
notify no;
};
zone "arpa" {
type slave;
file "/etc/namedb/slave/arpa.slave";
masters {
192.5.5.241; // F.ROOT-SERVERS.NET.
};
notify no;
};
*/
/* Serving the following zones locally will prevent any queries
for these zones leaving your network and going to the root
name servers. This has two significant advantages:
1. Faster local resolution for your users
2. No spurious traffic will be sent from your network to the roots
*/
// RFCs 1912 and 5735 (and BCP 32 for localhost)
zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; };
zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; };
zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// RFC 1912-style zone for IPv6 localhost address
zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; };
// "This" Network (RFCs 1912 and 5735)
zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Private Use Networks (RFCs 1918 and 5735)
zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Link-local/APIPA (RFCs 3927 and 5735)
zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IETF protocol assignments (RFCs 5735 and 5736)
zone "0.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// TEST-NET-[1-3] for Documentation (RFCs 5735 and 5737)
zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "100.51.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "113.0.203.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Range for Documentation (RFC 3849)
zone "8.b.d.0.1.0.0.2.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// Domain Names for Documentation and Testing (BCP 32)
zone "test" { type master; file "/etc/namedb/master/empty.db"; };
zone "example" { type master; file "/etc/namedb/master/empty.db"; };
zone "invalid" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.net" { type master; file "/etc/namedb/master/empty.db"; };
zone "example.org" { type master; file "/etc/namedb/master/empty.db"; };
// Router Benchmark Testing (RFCs 2544 and 5735)
zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IANA Reserved - Old Class E Space (RFC 5735)
zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Unassigned Addresses (RFC 4291)
zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 ULA (RFC 4193)
zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Link Local (RFC 4291)
zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IPv6 Deprecated Site-Local Addresses (RFC 3879)
zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; };
// IP6.INT is Deprecated (RFC 4159)
zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; };
// NB: Do not use the IP addresses below, they are faked, and only
// serve demonstration/documentation purposes!
//
// Example slave zone config entries. It can be convenient to become
// a slave at least for the zone your own domain is in. Ask
// your network administrator for the IP address of the responsible
// master name server.
//
// Do not forget to include the reverse lookup zone!
// This is named after the first bytes of the IP address, in reverse
// order, with ".IN-ADDR.ARPA" appended, or ".IP6.ARPA" for IPv6.
//
// Before starting to set up a master zone, make sure you fully
// understand how DNS and BIND work. There are sometimes
// non-obvious pitfalls. Setting up a slave zone is usually simpler.
//
// NB: Don't blindly enable the examples below. :-) Use actual names
// and addresses instead.
/* An example dynamic zone
key "exampleorgkey" {
algorithm hmac-md5;
secret "sf87HJqjkqh8ac87a02lla==";
};
zone "example.org" {
type master;
allow-update {
key "exampleorgkey";
};
file "/etc/named/dynamic/example.org";
};
*/
/* Example of a slave reverse zone
zone "1.168.192.in-addr.arpa" {
type slave;
file "/etc/namedb/slave/1.168.192.in-addr.arpa";
masters {
192.168.1.1;
};
};
*/Hierbei handelt es sich um Slave-Einträge für
eine Reverse- und Forward-DNS-Zone, die in der Datei
named.conf definiert sind.Für jede neue Zone muss ein zusätzlicher Eintrag
in named.conf erstellt werden.Ein einfacher Eintrag für eine Zone
example.org könnte
beispielsweise so aussehen:zone "example.org" {
type master;
file "master/example.org";
}; Die Option legt fest, dass es sich
um eine Master-Zone handelt, deren Zoneninformationen sich in
der Datei /etc/namedb/master/example.org
befinden. Diese Datei wird durch die Option
festgelegt.zone "example.org" {
type slave;
file "slave/example.org";
}; Hier handelt es sich um einen Slaveserver, der seine
Informationen vom Masterserver der betreffenden Zone bezieht
und diese in der angegebenen Datei speichert. Wenn der
Masterserver nicht erreichbar ist, verfügt der
Slaveserver über die transferierten Zoneninformationen
und kann diese an andere Rechner weitergeben.ZonendateienBINDZonendateiDie in der Datei
/etc/namedb/master/example.org definierte
Zonendatei für
example.org könnte
etwa so aussehen:$TTL 3600 ; 1 hour default TTL
example.org. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
300 ; Negative Response TTL
)
; DNS Servers
IN NS ns1.example.org.
IN NS ns2.example.org.
; MX Records
IN MX 10 mx.example.org.
IN MX 20 mail.example.org.
IN A 192.168.1.1
; Machine Names
localhost IN A 127.0.0.1
ns1 IN A 192.168.1.2
ns2 IN A 192.168.1.3
mx IN A 192.168.1.4
mail IN A 192.168.1.5
; Aliases
www IN CNAME example.org.Beachten Sie, dass jeder mit einem .
endende Rechnername ein exakter Rechnername ist, während
sich alles ohne einen abschließenden .
relativ auf den Ursprung bezieht. ns1
steht daher beispielsweise für
ns1.example.org..Eine Zonendatei hat folgenden Aufbau:recordname IN recordtype valueDNSEinträgeDie am häufigsten verwendeten
DNS-Einträge sind:SOAStart der ZonenautoritätNSEin autoritativer NameserverAEine RechneradresseCNAMEDer kanonische Name eines AliasMXMail ExchangerPTREin (bei Reverse-DNS verwendeter) Domain Name
Pointerexample.org. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh after 3 hours
3600 ; Retry after 1 hour
604800 ; Expire after 1 week
300 ) ; Negative Response TTLexample.org.Der Name der Domäne und damit der
Ursprung dieser Zonendatei.ns1.example.org.Der primäre/autoritative Nameserver
dieser Zone.admin.example.org.Die für diese Zone verantwortliche
Person. Das Zeichen @ wird dabei
ersetzt (admin@example.org wird also zu
admin.example.org).2006051501Die Seriennummer der Datei. Sie muss
stets inkrementiert werden, wenn die Zonendatei
geändert wird. Viele Administratoren bevorzugen
ein JJJJMMTTRR-Format, um die
Seriennummer festzulegen.
2006051501 steht also für
den 15.05.2006, die beiden letzten Stellen für die
erste Modifikation der Zonendatei an diesem Tag. Die
Seriennummer ist von großer Bedeutung, da
Slaveserver daran eine aktualisierte Zonendatei erkennen
können.
IN NS ns1.example.org.Ein NS-Eintrag. Jeder Nameserver, der für eine Zone
verantwortlich ist, muss über einen solchen Eintrag
verfügen.
localhost IN A 127.0.0.1
ns1 IN A 192.168.1.2
ns2 IN A 192.168.1.3
mx IN A 192.168.1.4
mail IN A 192.168.1.5Der Eintrag A bezieht sich auf
Rechnernamen. ns1.example.org
würde also zu 192.168.1.2
aufgelöst werden.
IN A 192.168.1.1Diese Zeile weist die IP-Adresse
192.168.1.1 dem aktuellen
Ursprung, in unserem Fall also
example.org, zu.
www IN CNAME @Der Eintrag für den kanonischen Namen wird dazu
verwendet, Aliase für einen Rechner zu vergeben. Im
Beispiel ist www ein Alias für den
Master-Rechner, dessen Name dem Domainnamen
example.org (oder
192.168.1.1) entspricht.
CNAMEs können daher niemals gleichzeitig mit einem
anderen Eintrag für denselben Hostname eingerichtet
werden.MX-Eintrag
IN MX 10 mail.example.org.Der MX-Eintrag legt fest, welcher Mailserver für
eintreffende Mails der Zone verantwortlich ist.
mail.example.org ist der
Rechnername des Mailservers, der eine Priorität von 10
hat.Es können auch mehrere Mailserver mit verschiedener
Priorität (10, 20, ...) vorhanden sein. Ein Mailserver,
der eine Mail an example.org
verschicken will, verwendet zuerst den MX mit der höchsten
Priorität (das heißt den mit der niedrigsten
Prioritätsnummer), danach den mit der
nächsthöheren Priorität. Und dies solange,
bis die E-Mail zugestellt werden kann.Für (bei Reverse-DNS verwendete)
in-addr.arpa-Zonendateien wird das gleiche
Format verwendet. Der einzige Unterschied besteht in der
Verwendung der Option PTR an Stelle der Optionen A und
CNAME.$TTL 3600
1.168.192.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. (
2006051501 ; Serial
10800 ; Refresh
3600 ; Retry
604800 ; Expire
300 ) ; Negative Response TTL
IN NS ns1.example.org.
IN NS ns2.example.org.
1 IN PTR example.org.
2 IN PTR ns1.example.org.
3 IN PTR ns2.example.org.
4 IN PTR mx.example.org.
5 IN PTR mail.example.org.Durch diese Datei werden den Rechnernamen der fiktiven
Domäne IP-Adressen zugewiesen.Beachten Sie bitte, dass es sich bei allen Namen auf der
rechten Seite eines PTR-Eintrags um absolute
(fully qualified) Domainnamen handeln
muss, die mit . enden.Zwischenspeichernde (cachende) NameserverBINDZwischenspeichernde NameserverEin cachender Nameserver hat primär die Aufgabe,
rekursive Abfragen aufzulösen. Er stellt lediglich
eigene Anfragen und speichert deren Ergebnisse ab.DNSSECBINDDNS security extensionsDomain Name System Security Extensions, oder kurz DNSSEC, ist eine
Sammlung von Spezifikationen, um auflösende Nameserver von
gefälschten DNS-Daten, wie beispielsweise
vorgetäuschte DNS-Einträge, zu
schützen. Durch die Verwendung von digitalen Signaturen kann
ein Resolver die Integrität des Eintrages
überprüfen. Wichtig dabei ist, dass DNSSEC nur die
Integrität über digital signierte Resource Records
(RRe) bereitstellt.
Weder wird die Vertraulichkeit noch der Schutz vor falschen
Annahmen des Endbenutzers sichergestellt. Dies bedeutet, dass es
Leute nicht davor schützen kann, zu example.net anstatt zu example.com zu gelangen. Das
einzige, was DNSSEC tut, ist die
Authentifizierung, dass die Daten während der
Übertragung nicht verändert wurden. Die Sicherheit von
DNS ist ein wichtiger Schritt in der
generellen Absicherung des Internets. Für weitere,
tiefergehende Details über die Funktionsweise von
DNSSEC sind die dazugehörigen
RFCs ein guter Einstieg in die Thematik. Sehen
Sie sich dazu die Liste in an.Der folgende Abschnitt wird zeigen, wie man
DNSSEC für einen autoritativen
DNS-Server und einen rekursiven (oder cachenden)
DNS-Server, der jeweils
BIND 9 verwenden, einrichten kann. Obwohl alle
Versionen von BIND 9 DNSSEC
unterstützen, ist es notwendig, mindestens die Version 9.6.2
zu verwenden, um in der Lage zu sein, die signierten Root-Zonen zu
benutzen, wenn DNS-Abfragen geprüft
werden. Der Grund dafür ist, dass früheren Versionen
die Algorithmen fehlen, um die Überprüfung des
Root-Zonenschlüssels zu aktivieren. Es wird dringend empfohlen,
die letzte Version von BIND 9.7 oder höher
einzusetzen, um von den Vorteilen der automatischen
Schlüsselaktualisierung des Root-Zonenschlüssels
Gebrauch zu machen, genauso wie andere Eigenschaften, um
automatisch Zonen signieren zu lassen und Signaturen aktuell zu
halten. Unterschiede zwischen den Versionen 9.6.2 und 9.7 und
höher werden an den betreffenden Stellen angesprochen.Rekursive DNS-Server KonfigurationDie Aktivierung der
DNSSEC-Überprüfung von Anfragen,
die von einem rekursiven DNS-Server
stammen, benötigt ein paar Änderungen in der
named.conf. Bevor man jedoch diese
Änderungen durchführt, muss der
Root-Zonenschlüssel oder Vertrauensanker erworben werden.
Momentan ist der Root-Zonenschlüssel nicht in einem
Dateiformat verfügbar, dass von BIND
benutzt werden kann, so dass dieser manuell in das richtige
Format konvertiert werden muss. Der Schlüssel selbst kann
durch Abfrage an die Root-Zone erhalten werden, indem man dazu
dig verwendet. Durch Aufruf
von&prompt.user; dig +multi +noall +answer DNSKEY . > root.dnskeywird der Schlüssel in
root.dnskey abgelegt. Der Inhalt sollte
so ähnlich wie folgt aussehen:. 93910 IN DNSKEY 257 3 8 (
AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQ
bSEW0O8gcCjFFVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh
/RStIoO8g0NfnfL2MTJRkxoXbfDaUeVPQuYEhg37NZWA
JQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaDX6RS6CXp
oY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3
LQpzW5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGO
Yl7OyQdXfZ57relSQageu+ipAdTTJ25AsRTAoub8ONGc
LmqrAmRLKBP1dfwhYB4N7knNnulqQxA+Uk1ihz0=
) ; key id = 19036
. 93910 IN DNSKEY 256 3 8 (
AwEAAcaGQEA+OJmOzfzVfoYN249JId7gx+OZMbxy69Hf
UyuGBbRN0+HuTOpBxxBCkNOL+EJB9qJxt+0FEY6ZUVjE
g58sRr4ZQ6Iu6b1xTBKgc193zUARk4mmQ/PPGxn7Cn5V
EGJ/1h6dNaiXuRHwR+7oWh7DnzkIJChcTqlFrXDW3tjt
) ; key id = 34525Seien Sie nicht alarmiert, wenn der von Ihnen bezogene
Schlüssel anders als in diesem Beispiel aussieht. Diese
könnten sich in der Zwischenzeit geändert haben. In
dieser Ausgabe sind eigentlich zwei Schlüssel enthalten.
Der erste Schüssel mit dem Wert 257 nach dem
DNSKEY-Eintrag ist derjenige, der benötigt wird. Der
Wert zeigt an, dass es sich um einen sicheren Einstiegspunkt
(SEP), gemein
auch als Schlüsselsignierungsschlüssel (KSK) bekannt, handelt. Der
zweite Schüssel mit dem Wert 256 ist der untergeordnete
Schlüssel, im allgemeinen auch als
Zonen-Signaturschlüssel (ZSK) bezeichnet. Weitere
Schlüsselarten werden später in erläutert.Nun muss der Schlüssel verifiziert und so formatiert
werden, dass BIND diesen verwenden kann.
Um den Schlüssel zu verifizieren, erzeugen Sie einen
DS RR-Satz. Erstellen Sie eine
Datei, welche die RRs enthält,
mittels&prompt.user; dnssec-dsfromkey -f root.dnskey . > root.dsDiese Einträge verwenden SHA-1 sowie SHA-256 und
sollten ähnlich zu folgendem Beispiel aussehen, in dem
der längere, SHA-256, benutzt wird.. IN DS 19036 8 1 B256BD09DC8DD59F0E0F0D8541B8328DD986DF6E
. IN DS 19036 8 2 49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5Der SHA-256 RR kann nun mit dem Abriss
in https://data.iana.org/root-anchors/root-anchors.xml verglichen werden. Um
absolut sicher zu sein, dass der Schlüssel nicht
zusammen mit den XML-Daten verändert
wurde, kann die Datei mittels der PGP
Signatur in https://data.iana.org/root-anchors/root-anchors.asc überprüft werden.Als nächstes muss der Schlüssel in das passende
Format gebracht werden. Dies unterscheidet sich ein bisschen
von den BIND Versionen 9.6.2 und 9.7 und
höhere. In Version 9.7 wurde die Ünterstützung
zur automatischen Verfolgung und notwendigen Aktualisierung
von Änderungen am Schlüssel eingebaut. Dies wird
durch den Einsatz von managed-keys
erreicht, wie in dem Beispiel unten gezeigt ist. Wenn die
ältere Version eingesetzt wird, kann der Schlüssel
durch eine trusted-keys-Anweisung eingebaut
werden und die Aktualisierung muss händisch erfolgen.
In BIND 9.6.2 sollte das Format
folgendermassen aussehen:trusted-keys {
"." 257 3 8
"AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};In 9.7 wird das Format stattdessen wie folgt
aussehen:managed-keys {
"." initial-key 257 3 8
"AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
QxA+Uk1ihz0=";
};Der Root-Schlüssel kann nun zu
named.conf hinzugefügt werden,
entweder direkt oder durch Inkludierung der Datei, die den
Schlüssel enthält. Nachdem diese Schritte
absolviert sind, muss BIND konfiguriert
werden, um DNSSEC-Validierung für
Anfragen durchzuführen, indem
named.conf bearbeitet und die folgende
options-Direktive hinzugefügt
wird:dnssec-enable yes;
dnssec-validation yes;Um zu prüfen, dass es tatsächlich funktioniert,
benutzen Sie dig, um eine Anfrage
zu einer signierten Zone durch den Resolver, der gerade
konfiguriert wurde, zu stellen. Eine erfolgreiche Antwort
wird den AD-Eintrag aufweisen, um
anzudeuten, dass die Daten authentisiert sind. Eine Anfrage
wie&prompt.user; dig @resolver +dnssec se ds sollte den DS RR
für die .se-Zone zurückgeben. In
dem Abschnitt flags: sollte der
AD-Eintrag gesetzt sein, wie im folgenden
zu sehen ist:...
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
...Der Resolver ist nun in der Lage, Anfragen ans
DNS zu authentisieren.Autoritative DNS-Server
KonfigurationUm einen autoritativen Nameserver dazu zu bringen, als
eine DNSSEC-signierte Zone zu fungieren,
ist ein wenig mehr Aufwand nötig. Eine Zone ist durch
kryptographische Schlüssel signiert, die erzeugt werden
müssen. Es ist möglich, nur einen Schlüssel
dazu zu verwenden. Die vorgeschlagene Methode ist jedoch,
einen starken, gut geschützten
Schlüsselsignierungsschlüssel (KSK) einzusetzen, der nicht
oft gewechselt wird und einen Zonensignierungsschlüssel
(ZSK), der
öfter ausgewechselt wird. Informationen zu
vorgeschlagenen Einsatzarten können in RFC
4641: DNSSEC Operational Practices
nachgelesen werden. Einsatzszenarien, welche die Root-Zone
betreffen, finden Sie in DNSSEC Practice Statement for the Root Zone
KSK operator sowie DNSSEC Practice Statement for the Root Zone
ZSK operator. Der KSK wird dazu verwendet, um
eine Kette von Autorität für die Daten, die diese
Validierung benötigen, zu erschaffen und wird als solche
auch als sicherer Einstiegspunkt (SEP)-Schlüssel
bezeichnet. Ein Nachrichtenabriss dieses Schlüssels,
der auch Delegation Signer (DS)-Eintrag genannt wird,
muss in der Elternzone veröffentlicht werden, um die
Vertrauenskette herzustellen. Wie dies erreicht wird,
hängt von dem Besitzer der Elternzone ab. Der ZSK wird verwendet, um die
Zone zu signieren und muss nur dort öffentlich
zugänglich gemacht werden.Um DNSSEC für die example.com-Zone, welche in den
vorherigen Beispielen verwendet wird, zu aktivieren, muss
als erster Schritt dnssec-keygen
benutzt werden, um das KSK und
ZSK Schlüsselpaar zu generieren.
Dieses Schlüsselpaar kann unterschiedliche
kryptographische Algorithmen nutzen. Es wird empfohlen,
RSA/SHA256 für die Schlüssel zu nutzen. Eine
Schlüssellänge von 2048 Bits sollte genügen.
Um den KSK für example.com zu generieren, geben
Sie&prompt.user; dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE example.comein und um den ZSK zu erzeugen, setzen
Sie folgenden Befehl ab:&prompt.user; dnssec-keygen -a RSASHA256 -b 2048 -n ZONE example.comdnssec-keygen gibt zwei
Dateien aus, den öffentlichen und den privaten
Schlüssel und zwar in Dateinamen, die ähnlich
lauten wie Kexample.com.+005+nnnnn.key
(öffentlich) und
Kexample.com.+005+nnnnn.private
(privat). Der nnnnn-Teil des Dateinamens
ist eine fünfstellige Schlüsselkennung. Passen
Sie genau auf, welche Kennung zu welchem Schlüssel
gehört. Das ist besonders wichtig, wenn mehrere
Schlüssel in einer Zone vorliegen. Es ist auch
möglich, die Schlüssel umzubenennen. Für
jede KSK-Datei tun Sie folgendes:&prompt.user; mv Kexample.com.+005+nnnnn.key Kexample.com.+005+nnnnn.KSK.key
&prompt.user; mv Kexample.com.+005+nnnnn.private Kexample.com.+005+nnnnn.KSK.privateFür die ZSK-Dateien ersetzen Sie
KSK für ZSK wenn
nötig. Die Dateien können nun in der Zonendatei
inkludiert werden, indem die $include
Anweisung verwendet wird. Es sollte folgendermassen
aussehen:$include Kexample.com.+005+nnnnn.KSK.key ; KSK
$include Kexample.com.+005+nnnnn.ZSK.key ; ZSKSchliesslich signieren Sie die Zone und weisen
BIND an, die signierte Zonendatei zu
benutzen. Um eine Zone zu signieren, wird
dnssec-signzone eingesetzt. Der
Befehl, um eine Zone example.com zu signieren, die in
example.com.db liegt, sollte
wie folgt aussehen:&prompt.user; dnssec-signzone -o example.com -k Kexample.com.+005+nnnnn.KSK example.com.db Kexample.com.+005+nnnnn.ZSK.keyDer Schlüssel, welcher mit dem Argument
übergeben wird, ist der
KSK und die andere Schlüsseldatei ist
der ZSK, welcher für die Signatur
benutzt werden soll. Es ist möglich, mehr als einen
KSK und ZSK anzugeben,
was das Ergebnis zur Folge hat, dass die Zone mit allen
übergebenen Schlüsseln signiert wird. Dies kann
dann benötigt werden, um Zonendaten mit mehr als einem
Algorithmus zur Signierung zu verwenden. Die Ausgabe von
dnssec-signzone ist eine
Zonendatei mit allen signierten RRs.
Diese Ausgabe wird in einer Datei mit der Endung
.signed abgelegt, wie beispielsweise
example.com.db.signed. Die DS-Einträge werden
ebenfalls in eine separate Datei
dsset-example.com geschrieben. Um diese
signierte Zone zu verwenden, ändern Sie die
Zonendirektive in named.conf, so dass
example.com.db.signed benutzt wird.
Standardmässig sind die Signaturen nur 30 Tage
gültig, was bedeutet, dass die Zone in etwa 15 Tagen
erneut signiert werden muss, um sicher zu stellen, dass
Resolver keine Einträge mit veralteten Signaturen
zwischenspeichern. Es ist möglich, ein Skript und einen
cron-Job zu schreiben, um dies zu erledigen. Lesen Sie dazu
die relevanten Anleitungen, um Details zu erfahren.Stellen Sie sicher, dass die privaten Schlüssel
vertraulich bleiben, genau wie mit allen anderen
kryptographischen Schlüsseln auch. Wenn ein
Schlüssel geändert wird, ist es gute Praxis den
neuen Schlüssel in die Zone zu inkludieren, noch
während der alte Schlüssel noch zum signieren
eingesetzt wird, um dann auf den neuen Schlüssel zum
signieren zu wechseln. Nachdem diese Schritte erfolgt sind,
kann der alte Schlüssel aus der Zone entfernt werden.
Wenn das nicht geschieht, können
DNS-Daten für einige Zeit nicht
verfügbar sein, bis der neue Schlüssel durch die
DNS-Hierarchie propagiert wurde.
Für weitere Informationen bezüglich
Schlüsselübergabe und andere
DNSSEC-Einsatzszenarien lesen Sie RFC
4641: DNSSEC Operational practices.Automatisierung mittels BIND 9.7 oder
höherBeginnend mit der Version 9.7 von BIND
wurde eine neue Eigenschaft vorgestellt, die
Smart Signing genannt wird. Diese zielt
darauf ab, das Schlüsselmanagement und den
Signierungsprozess einfacher zu gestalten und zu
automatisieren. Durch ablegen der Schlüssel in ein
Verzeichnis, genannt key repository
und die Verwendung der neuen Option
auto-dnssec, ist es möglich eine
dynamische Zone zu erzeugen, welche dann erneut signiert
wird, wenn dazu der Bedarf besteht. Um diese Zone zu
aktualisieren, benutzen Sie
nsupdate mit der neuen Option
. Es hat also
rndc die Fähigkeit gewonnen,
Zonen mit Schlüsseln im Key Repository zu verwenden,
indem die Option eingesetzt wird. Um
BIND anzuweisen, diese automatische
Signierung und Zonenaktualisierung für example.com zu nutzen, fügen
Sie die folgenden Zeilen zur named.conf
hinzu:zone example.com {
type master;
key-directory "/etc/named/keys";
update-policy local;
auto-dnssec maintain;
file "/etc/named/dynamic/example.com.zone";
};Nachdem diese Änderungen durchgeführt wurden,
erzeugen Sie die Schlüssel für die Zone wie in
beschrieben wird, legen
diese Schlüssel im Key Repository ab, dass als Argument
key-directory in der Zonenkonfiguration
steht und die Zone wird automatisch signiert.
Aktualisierungen für eine Zone, die auf diese Art und
Weise konfiguriert wurde, muss mittels
nsupdate erfolgen, dass sich um
die erneute Signierung der Zone mit den hinzugefügten
Daten kümmern wird. Für weitere Details, lesen
Sie und die Dokumentation von
BIND.SicherheitObwohl BIND die am meisten verwendete Implementierung von
DNS darstellt, werden dennoch manchmal neue
Sicherheitsprobleme entdeckt.Zwar startet &os; named
automatisch in einer &man.chroot.8;-Umgebung, es gibt aber
noch weitere Sicherheitsmechanismen, mit denen Sie potentielle
DNS-Serviceattacken erschweren
können.Es ist daher eine gute Idee, die Sicherheitshinweise von
CERT zu lesen sowie
die Mailingliste &a.security-notifications; zu abonnieren, um
sich über Sicherheitsprobleme im Zusammenhang mit dem
Internet und FreeBSD zu informieren.Tritt ein Problem auf, kann es nie schaden, die
Quellen zu aktualisieren und named
neu zu kompilieren.Weitere InformationsquellenHilfeseiten zu BIND/named:
&man.rndc.8; &man.named.8; &man.named.conf.5; &man.nsupdate.1;
&man.dnssec-signzone.8; &man.dnssec-keygen.8;Offizielle ISC-Seite
zu BINDOffizielles Forum zu
ISC- BINDO'Reilly
DNS and BIND 5th EditionRoot
DNSSEC
DNSSEC Vertrauensanker-Publikation für
die Root-ZoneRFC1034
- Domain Names - Concepts and FacilitiesRFC1035
- Domain Names - Implementation and
SpecificationRFC4033
- DNS Security Introduction and RequirementsRFC4034
- Resource Records for the DNS Security
ExtensionsRFC4035
- Protocol Modifications for the DNS Security ExtensionsRFC4641
- DNSSEC Operational PracticesRFC 5011
- Automated Updates of DNS Security (DNSSEC)
Trust AnchorsApache HTTP-ServerMurrayStokelyBeigetragen von WebserverkonfigurierenApacheDer Open Source
Apache HTTP-Server ist der am
weitesten verbreitete Webserver. Dieser Webserver ist nicht im
Basissystem von &os; enthalten, kann aber als Paket oder Port
www/apache24 installiert werden.Dieser Abschnitt beschreibt die Konfiguration der
Version 2.x des
Apache HTTP-Server. Weiterführende
Informationen und Konfigurationsanweisungen für
Apache 2.X finden Sie unter
httpd.apache.org.Apache konfigurieren und startenApacheKonfigurationsdateiDer Apache HTTP-Server wird
unter &os; primär in
/usr/local/etc/apache2x/httpd.conf
konfiguriert, wobei das x die
Versionsnummer darstellt. In dieser Textdatei leitet ein
# einen Kommentar ein. Die am häufigsten
verwendeten Optionen sind:ServerRoot "/usr/local"Legt das Standardwurzelverzeichnis für die
Apache-Installation fest.
Binärdateien werden in die Verzeichnisse
bin und
sbin unterhalb des
Serverwurzelverzeichnisses installiert, während sich
Konfigurationsdateien im Unterverzeichnis
etc/apache2x
befinden.ServerAdmin you@example.comDie E-Mail-Adresse, an die Mitteilungen über
Serverprobleme geschickt werden. Diese Adresse
erscheint auf vom Server erzeugten Seiten, beispielsweise
auf Fehlerseiten.ServerName www.example.com:80Erlaubt dem Administrator, einen Rechnernamen
festzulegen, den der Server an die Clients sendet.
Beispielsweise könnte www statt
des richtigen Rechnernamens verwendet werden. Wenn das
System keinen eingetragenen DNS-Namen
hat, kann stattdessen die IP-Adresse
eingetragen werden. Lauscht der Server auf einem
anderen Port, tauschen Sie die 80
gegen eine entsprechende Portnummer.DocumentRoot "/usr/local/www/apache2x/data"Das Verzeichnis, in
dem die Dokumente abgelegt sind. In der Voreinstellung
befinden sich alle Seiten in diesem Verzeichnis, durch
symbolische Links oder Aliase lassen sich aber auch andere
Orte festlegen.Es ist empfehlenswert, eine Sicherungskopie der
Apache-Konfigurationsdatei
anzulegen, bevor Änderungen durchgeführt werden. Wenn die
Konfiguration von Apache
abgeschlossen ist, speichern Sie die Datei und überprüfen Sie
die Konfiguration mit apachectl. Der
Befehl apachectl configtest sollte
Syntax OK zurückgeben.ApacheStarten oder BeendenUm den Apache beim Systemstart
zu starten, fügen Sie folgende Zeile in
/etc/rc.conf ein:apache24_enable="YES"Wenn Sie während des Systemstarts weitere Parameter an den
Apache übergeben wollen, können Sie
diese durch eine zusätzliche Zeile in
rc.conf angeben:apache24_flags=""Wenn apachectl keine
Konfigurationsfehler meldet, starten Sie
httpd:&prompt.root; service apache24 startSie können den httpd-Dienst testen,
indem Sie
http://localhost
in einen Browser eingeben, wobei Sie
localhost durch den
vollqualifizierten Domainnamen der Maschine ersetzen, auf dem
der httpd läuft. Die Standard Webseite,
die angezeigt wird, ist
/usr/local/www/apache24/data/index.html.Die Konfiguration von Apache
kann bei nachfolgenden Änderungen an der Konfigurationsdatei
bei laufendem httpd, auf Fehler überprüft
werden. Geben Sie dazu folgendes Kommando ein:&prompt.root; service apache24 configtestEs ist wichitg zu beachten, dass
configtest kein &man.rc.8;-Standard ist,
und somit nicht zwingend mit anderen
&man.rc.8;-Startskripten funktioniert.Virtual HostingVirtual Hosting ermöglicht
es, mehrere Webseiten auf einem
Apache-Server laufen zu lassen.
Die virtuellen Hosts können IP-basiert
oder namensbasiert sein.
IP-basiertes virtual Hosting verwendet
eine IP-Adresse für jede Webseite. Beim
namensbasierten virtual Hosting wird der HTTP/1.1-Header der
Clients dazu verwendet, den Rechnernamen zu bestimmen.
Dadurch wird es möglich, mehrere Domains unter der gleichen
IP-Adresse zu betreiben.Damit der Apache namenbasierte
virtuelle Domains verwalten kann, fügen Sie für jede Webseite
einen separaten VirtualHost-Block ein.
Wenn der Webserver beispielsweise www.domain.tld heißt und
die virtuelle Domain www.someotherdomain.tld
einrichtet werden soll, ergänzen Sie
httpd.conf um folgende Einträge:<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain.tld
</VirtualHost>
<VirtualHost *>
ServerName www.someotherdomain.tld
DocumentRoot /www/someotherdomain.tld
</VirtualHost>Setzen Sie für jeden virtuellen Host die entsprechenden
Werte für ServerName und
DocumentRoot.Ausführliche Informationen zum Einrichten von
virtuellen Hosts finden Sie in der offiziellen
Apache-Dokumentation unter
http://httpd.apache.org/docs/vhosts/.Häufig verwendete Apache-ModuleApacheModuleApache verwendet Module, die
den Server um zusätzliche Funktionen erweitern. Eine
vollständige Auflistung der zur Verfügung stehenden Module
und Konfigurationsdetails finden Sie unter
http://httpd.apache.org/docs/current/mod/.In &os; können einige Module mit dem Port
www/apache24 kompiliert werden. Geben Sie
in /usr/ports/www/apache24make config ein, um zu sehen, welche Module
zur Verfügung stehen und welche Module in der Voreinstellung
aktiviert sind. Wenn ein Modul nicht zusammen mit dem Port
kompiliert wird, bietet die Ports-Sammlung die Möglichkeit
viele Module zu installieren. Dieser Abschnitt beschreibt
drei der am häufigsten verwendeten Module.mod_sslWebserverVerschlüsselungSSLVerschlüsselungDas Modul mod_ssl verwendet die
OpenSSL-Bibliothek, um über die
Protokolle Secure Sockets Layer (SSLv3)
sowie Transport Layer Security (TLSv1)
eine starke Verschlüsselung zu ermöglichen. Mit diesem
Modul können Sie ein signiertes Zertifikat von einer
Zertifizierungsstelle anfordern, damit Sie einen sicheren
Webserver unter &os; betreiben können.Unter &os; wird das Modul mod_ssl
standardmäßig im Port und auch im Paket aktiviert. Die
verfügbaren Konfigurationsanweisungen werden in
http://httpd.apache.org/docs/current/mod/mod_ssl.html
beschrieben.mod_perlmod_perlPerlDas Modul mod_perl macht es
möglich, vollständig in Perl
geschriebene Apache-Module zu
erzeugen. Da der
Perl-Interpreter in den Server
eingebettet wird, muss weder ein externer Interpreter noch
Perl zusätzlich aufgerufen
werden.mod_perl wird über den Port
oder das Paket www/mod_perl2 installiert.
Dokumentation für dieses Modul finden Sie unter
http://perl.apache.org/docs/2.0/index.html.mod_phpTomRhodesGeschrieben von mod_phpPHPPHP: Hypertext Preprocessor
(PHP) ist eine vielseitig
verwendbare Skriptsprache, die besonders für die
Web-Entwicklung geeignet ist. PHP kann
in HTML eingebettet werden und ähnelt von
der Syntax her Sprachen wie C,
&java; und Perl. Das
Hauptanliegen von PHP ist es,
Web-Entwicklern die rasche Erstellung von dynamisch
erzeugten Internetseiten zu ermöglichen.Damit der Apache-Webserver
PHP5 unterstützt, der Port oder das Paket
lang/php56 installiert werden. Dies wird
die Module installieren und konfigurieren, die für die
Unterstützung von dynamischen
PHP-Anwendungen benötigt werden. Die
Installation wird automatisch folgende Zeilen in
/usr/local/etc/apache24/httpd.conf
hinzufügen:LoadModule php5_module libexec/apache24/libphp5.soDanach rufen Sie
apachectl auf, um das
PHP-Modul zu laden:&prompt.root; apachectl gracefulDie PHP-Unterstützung von
www/mod_php56 verfügt nur über wenige
Funktionen. Zusätzliche Funktionen können mit dem Port
lang/php56-extensions installiert werden.
Der Port bietet ein Auswahlmenü, über das Sie
verschiedene PHP-Erweiterungen
installieren können.Alternativ können einzelne Erweiterungen über den
jeweiligen Port installieren. Um beispielsweise die
Unterstützung des Datenbankservers
MySQL in PHP
zu aktivieren, installieren Sie den Port
databases/php56-mysql.Nachdem Sie eine Erweiterung installiert haben,
müssen Sie den
Apache-Server neu starten, damit
die Erweiterung auch erkannt wird:&prompt.root; apachectl gracefulAb nun wird MySQL von
PHP unterstützt.Dynamische WebseitenWebserverdynamischNeben mod_perl und
mod_php stehen noch weitere
Sprachen zur Erstellung von dynamischen Inhalten zur
Verfügung. Dazu gehören auch
Django und
Ruby on Rails.DjangoPythonDjangoBei Django handelt es
sich um ein unter der BSD-Lizenz verfügbares
Framework zur schnellen Erstellung von mächtigen
Internet-Applikationen. Es beinhaltet einen
objekt-relationalen Mapper (wodurch Datentypen als
Phyton-Objekte entwickelt werden
können) sowie eine API für den
dynamischen Datenbankzugriff auf diese Objekte, ohne dass
Entwickler jemals SQL-Code schreiben
müssen. Zusätzlich existiert ein umfangreiches
Template-System, wodurch die Programmlogik von der
HTML-Präsentation getrennt werden
kann.Django setzt das Modul
mod_python und eine
SQL-Datenbank voraus. In &os; wird
bei der Installation von www/py-django
automatisch mod_python installiert.
Als Datenbanken werden
PostgreSQL,
MySQL und
SQLite unterstützt, wobei
SQLite die Voreinstellung ist.
Wenn Sie die Datenbank ändern möchten, geben Sie in
/usr/ports/www/py-djangomake config ein und installieren Sie den
Port neu.Nachdem Django installiert
ist, benötigt die Anwendung ein Projektverzeichnis und die
Apache-Konfiguration, um den
eingebetteten Python-Interpreter
zu nutzen. Dieser Interpreter wird verwendet um die
Anwendung für spezifische URLs
der Seite aufrufen.Damit Apache Anfragen für
bestimmte URLs an die Web-Applikation
übergeben kann, müssen Sie den vollständigen Pfad zum
Projektverzeichnis in httpd.conf
festlegen:<Location "/">
SetHandler python-program
PythonPath "['/pfad/zu/den/django/paketen/'] + sys.path"
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAutoReload On
PythonDebug On
</Location>Weitere Informationen zur Verwendung von
Django finden Sie unter
https://docs.djangoproject.com/en/1.6/.Ruby on RailsRuby on RailsRuby on Rails ist ein
weiteres, als Open Source verfügbares Webframework. Es
bietet einen kompletten Entwicklungsstack
und erlaubt es Webentwicklern, umfangreiche und mächtige
Applikationen in kurzer Zeit zu programmieren. Unter &os;
kann das Framework über den Port oder das Paket
www/rubygem-rails installiert
werden.Weitere Informationen zur Verwendung von
Ruby on Rails finden Sie unter
http://rubyonrails.org/documentation.File Transfer Protocol (FTP)FTP-ServerDas File Transfer Protocol (FTP)
ermöglicht auf einfache Art und Weise den Dateiaustausch mit
einem FTP-Server. Der
FTP-Server ftpd
ist bei &os; bereits im Basisystem enthalten.&os; verwendet mehrere Konfigurationsdateien, um den Zugriff
auf den FTP zu kontrollieren. Dieser
Abschnitt fasst diese Dateien zusammen. In &man.ftpd.8; finden
Sie weitere Inforamtionen über den integrierten
FTP-Server.KonfigurationDer wichtigste Punkt ist hier die Entscheidung darüber,
welche Benutzer auf den FTP-Server
zugreifen dürfen. Ein &os;-System verfügt über diverse
Systembenutzerkonten, die jedoch nicht auf den
FTP-Server zugreifen sollen. Die Datei
/etc/ftpusers enthält alle Benutzer, die
vom FTP-Zugriff ausgeschlossen sind. In
der Voreinstellung gilt dies auch die gerade erwähnten
Systembenutzerkonten. Sie können über diese Datei weitere
Benutzer vom FTP-Zugriff
ausschließen.In einigen Fällen kann es wünschenswert sein, den Zugang
für manche Benutzer einzuschränken, ohne dabei
FTP komplett zu verbieten. Dazu passen Sie
/etc/ftpchroot, wie in &man.ftpchroot.5;
beschrieben, entsprechend an. Diese Datei enthält Benutzer
und Gruppen sowie die für sie geltenden Einschränkungen für
FTP.FTPanonymousUm anonymen FTP-Zugriff auf dem Server
zu aktivieren, muss ein Benutzer ftp auf dem &os;-System
angelegt werden. Danach können sich Benutzer mit dem
Benutzernamen ftp
oder anonymous am
FTP-Server anmelden. Das Passwort ist
dabei beliebig, allerdings wird dazu in der Regel eine
E-Mail-Adresse verwendet. Meldet sich ein anonymer Benutzer
an, aktiviert der FTP-Server
&man.chroot.2;, um den Zugriff auf das Heimatverzeichnis des
Benutzers ftp zu
beschränken.Es gibt zwei Textdateien, deren Inhalt den
FTP-Clients bei der Anmeldung angezeigt
wird. Der Inhalt von /etc/ftpwelcome
wird angezeigt, bevor der Login-Prompt erscheint. Nach einer
erfolgreichen Anmeldung wird der Inhalt von
/etc/ftpmotd angezeigt.
Beachten Sie aber, dass es dabei um einen Pfad relativ zur
Umgebung des anzumeldenden Benutzers handelt. Bei einer
anonymen Anmeldung würde also der Inhalt von
~ftp/etc/ftpmotd angezeigt.Sobald der FTP-Server konfiguriert ist,
setzen Sie die entsprechende Variable in
/etc/rc.conf, damit der Dienst beim
Booten gestartet wird:ftpd_enable="YES"Starten Sie den Dienst:&prompt.root; service ftpd startTesten Sie die Verbindung zum
FTP-Server, indem Sie folgendes
eingeben:&prompt.user; ftp localhostWartungsyslogLogdateienFTPDer ftpd-Daemon verwendet
&man.syslog.3;, um Protokolldateien zu erstellen. In der
Voreinstellung werden alle FTP betreffenden
Nachrichten nach
/var/log/xferlog geschrieben. Dies lässt
sich aber durch das Einfügen der folgenden Zeile in
/etc/syslog.conf ändern:ftp.info /var/log/xferlogFTPanonymousBeachten Sie, dass mit dem Betrieb eines anonymen
FTP-Servers verschiedene
Sicherheitsrisiken verbunden sind. Problematisch ist hier
vor allem die Erlaubnis zum anonymen Upload von Dateien.
Dadurch könnte der Server zur Verbreitung von illegaler oder
nicht lizensierter Software oder noch Schlimmeren
missbraucht werden. Wenn anonyme
FTP-Uploads dennoch erforderlich sind,
sollten Sie die Zugriffsrechte so setzen, dass solche
Dateien erst nach Zustimmung eines Administrators von
anderen Benutzern heruntergeladen werden können.Datei- und Druckserver für
µsoft.windows;-Clients (Samba)Samba-ServerMicrosoft WindowsDateiserverWindows-ClientsDruckserverWindows-ClientsSamba ist ein beliebtes
Open Source Softwarepaket, das Datei- und Druckdienste über
das SMB/CIFS-Protokoll zur Verfügung
stellt. Dieses Protokoll ist in µsoft.windows;-Systemen
enthalten und kann über die Installation der
Samba-Client-Bibliotheken in andere
Betriebssysteme integriert werden. Das Protokoll ermöglicht
es Clients auf freigegebene Daten und Drucker zuzugreifen, so
als ob es sich um lokale Drucker und Festplatten handeln
würde.Unter &os; können die
Samba-Client-Bibliotheken über den
Port oder das Paket net/samba-smbclient
installiert werden. Der Client ermöglicht es einem
&os;-System auf SMB/CIFS-Freigaben in einem
µsoft.windows;-Netzwerk zuzugreifen.Ein &os;-System kann auch als
Samba-Server agieren. Der
Administrator kann SMB/CIFS-Freigaben auf
dem &os;-System einrichten, auf welche dann Clients mit
µsoft.windows; oder den
Samba-Client-Bibliotheken zugreifen
können. Damit ein Samba-Server
konfiguriert werden kann, muss zunächst der Port oder das
Paket net/samba36 installiert werden. Der
Rest dieses Kapitels beschreibt, wie ein
Samba-Server unter &os;
konfiguriert wird.KonfigurationDie Standardkonfigurationsdatei von
Samba heißt
/usr/local/share/examples/samba36/smb.conf.default.
Diese Datei muss nach /usr/local/etc/smb.conf
kopiert und angepasst werden, bevor
Samba verwendet werden kann.Die Datei smb.conf enthält
Laufzeitinformationen für
Samba, beispielsweise
Druckerdefinitionen oder
file system shares, also Bereiche
des Dateisystems, die mit &windows;-Clients geteilt werden sollen.
Die Konfiguration der Datei smb.conf
erfolgt webbasiert über das im
Samba-Paket enthaltene Programm
swat.Das Samba Web Administration Tool (SWAT) verwendenDas
Samba Web Administration Tool
(SWAT) wird als Daemon von inetd
aktiviert. Daher muss
inetd, wie in beschrieben, aktiviert werden.
Um swat zu aktivieren, entfernen
Sie das Kommentarzeichen aus folgender Zeile in
/etc/inetd.conf:swat stream tcp nowait/400 root /usr/local/sbin/swat swatWie bereits in
beschrieben, müssen Sie die
inetd-Konfiguration neu einlesen,
nachdem Sie diese Änderung durchgeführt haben.Nachdem swat aktiviert wurde,
rufen Sie im Browser die Adresse
http://localhost:901
auf. Bei der ersten Anmeldung muss das
root-Benutzerkonto
verwendet werden.Nach der Anmeldung an der Konfigurationseite von
Samba steht die
Systemdokumentation zur Verfügung. Beginnen Sie die
Konfiguration mit einem Klick auf die
Globals-Karteikarte. Die Einstellungen
entsprechen denen des Abschnitts [global]
aus /usr/local/etc/smb.conf.Globale EinstellungenUnabhängig davon, ob
swat verwendet, oder
/usr/local/etc/smb.conf direkt
editiert wird, sollten zuerst folgende Richtlinien
angepasst werden:workgroupDer Domänenname oder der Arbeitsgruppenname der
Rechner, die auf den Server Zugriff haben
sollen.netbios nameNetBIOSDer NetBIOS-Namen fest, unter dem der
Samba-Server bekannt ist.
In der Regel handelt es sich dabei um den ersten
Teil des DNS-Namens des
Servers.server stringLegt die Beschreibung fest, die angezeigt wird,
wenn mit net view oder anderen
Netzwerkprogrammen Informationen
über den Server angefordert werden.Samba absichernZwei der wichtigsten Einstellungen in
/usr/local/etc/smb.conf betreffen
das zu verwendende Sicherheitsmodell sowie das
Backend-Passwortformat für die Benutzer der
Samba-Clients. Die folgenden Direktiven steuern diese
Optionen:securityDie häufigsten Optionen sind
security = share und
security = user. Wenn die Clients
Benutzernamen verwenden, die den Benutzernamen auf dem
&os;-Rechner entsprechen, dann sollte die
Einstellung user level
verwendet werden. Dies ist die Standardeinstellung.
Allerdings ist es dazu erforderlich, dass sich die
Clients auf dem Rechner anmelden, bevor sie auf
gemeinsame Ressourcen zugreifen können.In der Einstellung
share level müssen
sich Clients nicht unter Verwendung eines gültigen
Logins auf dem Rechner anmelden, bevor sie auf
gemeinsame Ressourcen zugreifen können. In
früheren Samba-Versionen
war dies die Standardeinstellung.passdb backendNIS+LDAPSQL databaseSamba erlaubt
verschiedene Backend-Authentifizierungsmodelle.
Clients können sich durch LDAP, NIS+, eine SQL-Datenbank
oder eine Passwortdatei authentifizieren. In der
Voreinstellung wird smbpasswd
verwendet. Diese Methode wird im folgenden Abschnitt
näher beschrieben.Wenn smbpasswd benutzt wird, muss die
Datei /usr/local/etc/samba/smbpasswd
erzeugt werden, damit Samba in
der Lage ist, Clients zu authentifizieren. Um den Zugriff
auf &unix;-Benutzerkonten von einem &windows;-Client aus zu
ermöglichen, verwenden Sie den folgenden Befehl für die
entsprechenden Benutzer:&prompt.root; smbpasswd -a usernameAls Backend wird inzwischen tdbsam
empfohlen. Wenn Sie sich für dieses Backend entscheiden,
können Sie mit dem folgenden Befehl neue Benutzerkonten
anlegen:&prompt.root; pdbedit -a -u usernameAusführliche Informationen zur Konfiguration
von Samba finden Sie im
Official Samba HOWTO.Samba startenDamit Samba beim Systemstart
automatisch aktiviert wird, fügen Sie die folgende Zeile in
/etc/rc.conf ein:samba_enable="YES"Alternativ können die beiden Dienste auch
separat gestartet werden:nmbd_enable="YES"smbd_enable="YES"Jetzt kann Samba direkt
gestartet werden:&prompt.root; service samba start
Starting SAMBA: removing stale tdbs :
Starting nmbd.
Starting smbd.Samba verwendet drei Daemonen.
Sowohl nmbd als auch
smbd werden durch
samba_enable gestartet. Wurde
winbind name resolution services
in smb.conf aktiviert, wird
zusätzlich der winbindd-Daemon
gestartet.Samba kann jederzeit
durch folgenden Befehl beendet werden:&prompt.root; service samba stopSamba ist ein komplexes
Softwarepaket mit umfassenden Funktionen, die eine weitreichende
Integration von µsoft.windows;-Netzwerken ermöglichen.
Für eine Beschreibung dieser Zusatzfunktionen sollten Sie
sich auf
http://www.samba.org umsehen.Die Uhrzeit mit NTP synchronisierenNTPntpdDie interne Uhrzeit eines Computers ist nie ganz exakt.
Dies ist problematisch, da viele Dienste darauf angewiesen
sind, dass die Computer im Netzwerk die exakte Uhrzeit
übermitteln. Die exakte Uhrzeit ist auch erforderlich um
sicherzustellen, dass die Zeitstempel der Dateien konsistent
bleiben. Das
Network Time Protocol
(NTP) bietet die Möglichkeit, die exakte
Uhrzeit in einem Netzwerk zur Verfügung zu stellen.Mit &man.ntpd.8; enthält &os; ein Werkzeug, das andere
NTP-Server abfragen kann um die Uhrzeit
auf diesem Computer zu synchronisieren, oder um selbst die
Uhrzeit für andere Computer im Netzwerk bereitzustellen. Die
Server, die abgefragt werden, können lokal oder von einem
ISP zur Verfügung gestellt werden. Darüber
hinaus gibt es eine
Liste von öffentlich zugänglichen
NTP-Servern. Falls Sie sich für
einen solchen öffentlichen Server entscheiden, wählen Sie
einen nahegelegenen Server und prüfen Sie die
Nutzungsbedingungen.Die Auswahl von mehreren NTP-Servern
wird empfohlen, falls sich ein Server nicht erreichbar ist
oder sich als unzuverlässig herausstellt.
ntpd verwendet die Antworten
anderer Server, um zuverlässige Server zu bestimmen, die dann
bevorzugt abgefragt werden.Dieser Abschnitt beschreibt die Konfiguration von
ntpd unter &os;. Zusätzliche
Dokumentation im HTML-Format finden Sie in
/usr/share/doc/ntp/.NTP konfigurierenNTPntp.conf&os; enthält mit ntpd ein
Werkzeug, das zur Synchronisation der Uhrzeit verwendet werden
kann. Um ntpd beim Booten zu
aktivieren, fügen Sie den Eintrag
ntpd_enable="YES" in
/etc/rc.conf ein. Zusätzliche Variablen
können ebenfalls in /etc/rc.conf gesetzt
werden. Weitere Details finden Sie in &man.rc.conf.5; und
&man.ntpd.8;.Das Programm liest /etc/ntp.conf
um herauszufinden, welche NTP-Server
abgefragt werden müssen. Hier ist ein einfaches Beispiel
einer /etc/ntp.conf:Beispiel einer
/etc/ntp.confserver ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net
driftfile /var/db/ntp.driftDas Format dieser Datei wird in &man.ntp.conf.5;
beschrieben. Die Option server legt die zu
verwendenden Server fest, wobei jeder Server in einer eigenen
Zeile steht. Wenn ein Server mit der Option
prefer versehen ist,
wird dieser Server bevorzugt verwendet. Eine Antwort von
einem bevorzugten Server wird verworfen, wenn sie
signifikant von den Antworten anderer Server abweicht,
ansonsten wird sie akzeptiert. Die Option
prefer sollte nur für sehr zuverlässige
und genaue NTP-Server verwendet werden,
die über eine spezielle Hardware zur Zeitüberwachung
verfügen.Die Option driftfile legt fest, in
welcher Datei die Abweichungen der Systemuhr protokolliert
werden. ntpd verwendet diese
Datei, um die Systemzeit automatisch anzupassen, selbst wenn
kurzzeitig kein NTP-Server zur
Synchronisation verfügbar ist. Weiterhin werden in dieser
Datei Informationen über frühere Anworten von
NTP-Server. Da diese Datei interne
Informationen für NTP enthält, sollte sie
nicht verändert werden.In der Voreinstellung ist der
NTP-Server für alle Rechner im Netzwerk
erreichbar. Die Option restrict in
/etc/ntp.conf steuert, welche Rechner
auf den Server zugreifen können. Wenn Sie beispielsweise
alle Rechner vom Zugriff auf den
NTP-Server ausschließen wollen, fügen Sie
folgende Zeile in /etc/ntp.conf
ein:restrict default ignoreDieser Eintrag verhindert auch den Zugriff von anderen
NTP-Servern. Besteht die
Notwendigkeit, sich mit einem externen
NTP-Server zu synchronisieren, muss
dieser Server explizit zugelassen werden. Weitere
Informationen finden Sie in &man.ntp.conf.5;.Wenn Sie nur Rechnern innerhalb des Netzwerks die
Synchronisation mit dem Server erlauben, gleichzeitig
aber verhindern wollen, dass diese den Server
konfigurieren oder als Server für andere Rechner dienen
können, fügen Sie folgende Zeile ein:restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap192.168.1.0
ist die lokale Adresse des Netzwerks, 255.255.255.0 ist die
Netzmaske des Netzwerks.Es werden mehrere restict-Einträge
untstützt. Weitere Details finden Sie im Abschnitt
Access Control Support von
&man.ntp.conf.5;.Sobald ntpd_enable="YES" in
/etc/rc.conf hinzugefügt wurde,
kann ntpd direkt
gestartet werden:&prompt.root; service ntpd startNTP mit einer
PPP-Verbindung verwendenntpd benötigt keine ständige
Internetverbindung. Wenn Sie sich über eine
PPP-Verbindung ins Internet einwählen,
sollten Sie verhindern, dass NTP-Verkehr
eine Verbindung aufbauen oder aufrechterhalten kann. Dies
kann in den filter-Direktiven von
/etc/ppp/ppp.conf festgelegt werden.
Ein Beispiel:set filter dial 0 deny udp src eq 123
# Prevent NTP traffic from initiating dial out
set filter dial 1 permit 0 0
set filter alive 0 deny udp src eq 123
# Prevent incoming NTP traffic from keeping the connection open
set filter alive 1 deny udp dst eq 123
# Prevent outgoing NTP traffic from keeping the connection open
set filter alive 2 permit 0/0 0/0Weitere Informationen finden Sie im Abschnitt
PACKET FILTERING von &man.ppp.8; sowie in
den Beispielen unter
/usr/share/examples/ppp/.Einige Internetprovider blockieren Ports mit niedrigen
Nummern. In solchen Fällen funktioniert NTP leider
nicht, da Antworten eines NTP-Servers den Rechner nicht
erreichen werden.iSCSI Initiator und Target KonfigurationiSCSI bietet die Möglichkeit,
Speicherkapazitäten über ein Netzwerk zu teilen. Im Gegensatz
zu NFS, das auf Dateisystemebene arbeitet,
funktioniert iSCSI auf
Blockgerätebene.In der iSCSI-Terminologie wird das
System, das den Speicherplatz zur Verfügung stellt, als
Target bezeichnet. Der Speicherplatz
selbst kann aus einer physischen Festplatte bestehen, oder auch
aus einem Bereich, der mehrere Festplatten, oder nur Teile einer
Festplatte, repräsentiert. Wenn beispielsweise die
Festplatte(n) mit ZFS formatiert ist, kann
ein zvol erstellt werden, welches dann als
iSCSI-Speicher verwendet werden kann.Die Clients, die auf den iSCSI-Speicher
zugreifen, werden Initiator genannt. Ihnen
steht der verfügbare Speicher als rohe, nicht formatierte
Festplatte, die auch als LUN bezeichnet wird,
zur Verfügung. Die Gerätedateien für die Festplatten erscheinen
in /dev/ und müssen separat formatiert und
eingehangen werden.Seit 10.0-RELEASE enthält &os; einen nativen,
kernelbasierten iSCSI
Target und Initiator.
Dieser Abschnitt beschreibt, wie ein &os;-System als Target oder
Initiator konfiguriert wird.Ein iSCSI-Target konfigurierenEin natives iSCSI-Target wird seit
&os; 10.0-RELEASE unterstützt. Um iSCSI
mit älteren Versionen zu benutzen, installieren Sie ein
Target aus der Ports-Sammlung, beispielsweise
net/istgt. Dieses Kapitel beschreibt
nur das native Target.Um ein iSCSI-Target zu konfigurieren,
erstellen Sie die Konfigurationsdatei
/etc/ctl.conf und fügen Sie eine Zeile
in /etc/rc.conf hinzu, um
sicherzustellen, dass &man.ctld.8; automatisch beim Booten
gestartet wird. Starten Sie dann den Daemon.Das folgende Beispiel zeigt eine einfache
/etc/ctl.conf. Eine vollständige
Beschreibung dieser Datei und der verfügbaren Optionen finden
Sie in &man.ctl.conf.5;.portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group no-authentication
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}Der erste Eintrag definiert die Portalgruppe
pg0. Portalgruppen legen fest, auf welchen
Netzwerk-Adressen der &man.ctld.8;-Daemon Verbindungen
entgegennehmen wird. Der Eintrag
discovery-auth-group no-authentication
zeigt an, dass jeder Initiator
iSCSI-Targets suchen darf, ohne sich
authentifizieren zu müssen. Die dritte und vierte Zeilen
konfigurieren &man.ctld.8; so, dass er auf allen
IPv4- (listen 0.0.0.0)
und IPv6-Adressen
(listen [::]) auf dem Standard-Port 3260
lauscht.Es ist nicht zwingend notwendig eine Portalgruppe zu
definieren, da es bereits eine integrierte Portalgruppe namens
default gibt. In diesem Fall ist der
Unterschied zwischen default und
pg0 der, dass bei
default eine Authentifizierung nötig ist,
während bei pg0 die Suche nach Targets
immer erlaubt ist.Der zweite Eintrag definiert ein einzelnes Target. Ein
Target hat zwei mögliche Bedeutungen: eine Maschine die
iSCSI bereitstellt, oder eine Gruppe von
LUNs. Dieses Beispiel verwendet die
letztere Bedeutung, wobei
iqn.2012-06.com.example:target0 der Name
des Targets ist. Dieser Name ist nur für Testzwecke geeignet.
Für den tatsächlichen Gebrauch ändern Sie
com.example auf einen echten, rückwärts
geschriebenen Domainnamen. 2012-06 steht
für das Jahr und den Monat, an dem die Domain erworben
wurde. target0 darf einen beliebigen
Wert haben und in der Konfigurationsdatei darf eine beliebige
Anzahl von Targets definiert werden.Der Eintrag
auth-group no-authentication erlaubt es
allen Initiatoren sich mit dem angegebenen Target zu verbinden
und portal-group pg0 macht das Target über
die Portalgruppe pg0 erreichbar.Die nächste Sektion definiert die LUN.
Jede LUN wird dem Initiator als separate
Platte präsentiert. Für jedes Target können mehrere
LUNs definiert werden. Jede
LUN wird über eine Nummer identifiziert,
wobei LUN 0 verpflichtend ist. Die Zeile
mit dem Pfad path /data/target0-0 definiert
den absoluten Pfad zu der Datei oder des zvols für die
LUN. Der Pfad muss vorhanden sein, bevor
&man.ctld.8; gestartet wird. Die zweite Zeile ist optional
und gibt die Größe der LUN an. Als
nächstes fügen Sie folgende Zeile in
/etc/rc.conf ein, um &man.ctld.8;
automatisch beim Booten zu starten:ctld_enable="YES"Um &man.ctld.8; jetzt zu starten, geben Sie dieses
Kommando ein:&prompt.root; service ctld startDer &man.ctld.8;-Daemon liest beim Start
/etc/ctl.conf. Wenn diese Datei nach dem
Starten des Daemons bearbeitet wird, verwenden Sie folgenden
Befehl, damit die Änderungen sofort wirksam werden:&prompt.root; service ctld reloadAuthentifizierungDie vorherigen Beispiele sind grundsätzlich unsicher, da
keine Authentifizierung verwendet wird und jedermann vollen
Zugriff auf alle Targets hat. Um für den Zugriff auf die
Targets einen Benutzernamen und ein Passwort vorauszusetzen,
ändern Sie die Konfigurationsdatei wie folgt:auth-group ag0 {
chap username1 secretsecret
chap username2 anothersecret
}
portal-group pg0 {
discovery-auth-group no-authentication
listen 0.0.0.0
listen [::]
}
target iqn.2012-06.com.example:target0 {
auth-group ag0
portal-group pg0
lun 0 {
path /data/target0-0
size 4G
}
}Die Sektion auth-group definiert die
Benutzernamen und Passwörter. Um sich mit
iqn.2012-06.com.example:target0 zu
verbinden, muss ein Initiator zuerst einen Benutzernamen
und ein Passwort angeben. Eine Suche nach Targets wird
jedoch immer noch ohne Authentifizierung gestattet. Um
eine Authentifizierung zu erfordern, setzen Sie
discovery-auth-group auf eine definierte
auth-group anstelle von
no-autentication.In der Regel wird für jeden Initiator ein einzelnes
Target exportiert. In diesem Beispiel wird der Benutzername
und das Passwort direkt im Target-Eintrag festgelegt:target iqn.2012-06.com.example:target0 {
portal-group pg0
chap username1 secretsecret
lun 0 {
path /data/target0-0
size 4G
}
}Einen iSCSI-Initiator
konfigurierenDer in dieser Sektion beschriebene
iSCSI-Initiator wird seit &os;
10.0-RELEASE unterstützt. Lesen Sie &man.iscontrol.8;, wenn
Sie den iSCSI-Initiator mit älteren
Versionen benutzen möchten.Um den Initiator zu verwenden, muss zunächst ein
iSCSI-Daemon gestartet sein. Der
Daemon des Initiators benötigt keine Konfigurationsdatei. Um
den Daemon automatisch beim Booten zu starten, fügen Sie
folgende Zeile in /etc/rc.conf
ein:iscsid_enable="YES"Um &man.iscsid.8; jetzt zu starten, geben Sie dieses
Kommando ein:&prompt.root; service iscsid startDie Verbindung mit einem Target kann mit, oder ohne eine
Konfigurationsdatei /etc/iscsi.conf
durchgeführt werden. Dieser Abschnitt beschreibt beide
Möglichkeiten.Verbindung zu einem Target herstellen - ohne
KonfigurationsdateiUm einen Initiator mit einem Target zu verbinden, geben
Sie die IP-Adresse des Portals und den
Namen des Ziels an:&prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0Um zu überprüfen, ob die Verbindung gelungen ist, rufen
Sie iscsictl ohne Argumente auf. Die
Ausgabe sollte in etwa wie folgt aussehen:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0In diesem Beispiel wurde die
iSCSI-Sitzung mit der
LUN /dev/da0
erfolgreich hergestellt. Wenn das Target
iqn.2012-06.com.example:target0 mehr als
nur eine LUN exportiert, werden mehrere
Gerätedateien in der Ausgabe angezeigt:Connected: da0 da1 da2.Alle Fehler werden auf die Ausgabe und in die
Systemprotokolle geschrieben. Diese Meldung deutet
beispielsweise darauf hin, dass der &man.iscsid.8;-Daemon
nicht ausgeführt wird:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)Die folgende Meldung deutet auf ein Netzwerkproblem hin,
zum Beispiel eine falsche IP-Adresse oder
einen falschen Port:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.11 Connection refusedDiese Meldung bedeutet, dass der Name des Targets falsch
angegeben wurde:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Not foundDiese Meldung bedeutet, dass das Target eine
Authentifizierung erfordert:Target name Target portal State
iqn.2012-06.com.example:target0 10.10.10.10 Authentication failedVerwenden Sie diese Syntax, um einen
CHAP-Benutzernamen und ein Passwort
anzugeben:&prompt.root; iscsictl -A -p 10.10.10.10 -t iqn.2012-06.com.example:target0 -u user -s secretsecretVerbindung mit einem Target herstellen - mit
KonfigurationsdateiWenn Sie für die Verbindung eine Konfigurationsdatei
verwenden möchten, erstellen Sie
/etc/iscsi.conf mit etwa folgendem
Inhalt:t0 {
TargetAddress = 10.10.10.10
TargetName = iqn.2012-06.com.example:target0
AuthMethod = CHAP
chapIName = user
chapSecret = secretsecret
}t0 gibt den Namen der Sektion in der
Konfigurationsdatei an. Diser Name wird vom Initiator
benutzt, um zu bestimmen, welche Konfiguration verwendet
werden soll. Die anderen Einträge legen die Parameter fest,
die während der Verbindung verwendet werden.
TargetAddress und
TargetName müssen angegeben werden,
die restlichen sind optional. In diesen Beispiel wird
der CHAP-Benuztername und das Passwort
angegeben.Um sich mit einem bestimmten Target zu verbinden, geben
Sie dessen Namen an:&prompt.root; iscsictl -An t0Um sich stattdessen mit allen definierten Targets aus
der Konfigurationsdatei zu verbinden, verwenden Sie:&prompt.root; iscsictl -AaDamit sich der Initiator automatisch mit allen Targets
aus /etc/iscsi.conf verbindet, fügen
Sie folgendes in /etc/rc.conf
hinzu:iscsictl_enable="YES"
iscsictl_flags="-Aa"
Index: head/de_DE.ISO8859-1/books/handbook/security/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/security/chapter.xml (revision 48897)
+++ head/de_DE.ISO8859-1/books/handbook/security/chapter.xml (revision 48898)
@@ -1,3819 +1,3830 @@
SicherheitTomRhodesNeu verfasst von MartinHeinenÜbersetzt von SicherheitÜbersichtSicherheit, ob nun physisch oder virtuell, ist ein so breit
gefächertes Thema, dass sich eine ganze Industrie darum gebildet
hat. Es wurden bereits hunderte Verfahren zur Sicherung von
Systemen und Netzwerken verfasst, und als Benutzer von &os; ist
es unumgänglich zu verstehen, wie Sie sich gegen Angreifer und
Eindringlinge schützen können.In diesem Kapitel werden einige Grundlagen und Techniken
diskutiert. Ein &os;-System implementiert Sicherheit in
mehreren Schichten, und viele weitere Programme von
Drittanbietern können zur Verbesserung der Sicherheit
beitragen.Nachdem Sie dieses Kapitel gelesen haben, werden Sie:Grundlegende auf &os; bezogene Sicherheitsaspekte
kennen.Die verschiedenen Verschlüsselungsmechanismen
von &os; kennen.Wissen, wie Sie ein Einmalpasswörter
zur Authentifizierung verwenden.TCP Wrapper für &man.inetd.8;
einrichten können.Wissen, wie Sie Kerberos
unter &os; einrichten.Wissen, wie Sie IPsec konfigurieren und ein
VPN einrichten.Wissen, wie Sie OpenSSH unter
&os; konfigurieren und benutzen.Wissen, wie Sie ACLs für Dateisysteme
benutzen.Portaudit anwenden können,
um Softwarepakete aus der Ports-Sammlung auf bekannte
Sicherheitslücken hin zu überprüfen.Mit &os;-Sicherheitshinweisen umgehen können.Eine Vorstellung davon haben, was Prozessüberwachung
(Process Accounting) ist und
wie Sie diese Funktion unter &os; aktivieren können.Wissen, wie Sie die Ressourcen-Datenbank benutzt, um die
Ressourcen für Benutzer zu steuern.Bevor Sie dieses Kapitel lesen, sollten SieGrundlegende Konzepte von &os; und dem Internet
verstehen.Dieses Buch behandelt weitere Sicherheitsthemen.
Beispielsweise werden verbindliche Zugriffskontrollen
im und Firewalls im
besprochen.EinführungSicherheit ist die Verantwortung eines jeden Einzelnen. Ein
schwacher Einstiegspunkt in einem System kann einem
Eindringling Zugriff auf wichtige Informationen verschaffen, was
sich verheerend auf das gesamte Netzwerk auswirken kann. Eines
der Grundprinzipien der Informationssicherheit sind die
Vertraulichkeit, Integrität und Verfügbarkeit von
Informationssystemen.Diese Grundprinzipien sind ein fundamentales Konzept der
Computer-Sicherheit, da Kunden und Benutzer erwarten, dass ihre
Daten geschützt sind. Zum Beispiel erwartet ein Kunde, dass
seine Kreditkarteninformationen sicher gespeichert werden
(Vertraulichkeit), dass seine Aufträge nicht hinter den Kulissen
geändert werden (Integrität) und dass er zu jeder Zeit Zugang zu
seinen Informationen hat (Verfügbarkeit).Um diese Grundprinzipien zu implementieren, wenden
Sicherheitsexperten das sogenannte
Defense-in-Depth-Konzept an. Die
Idee dahinter ist, mehrere Sicherheitsschichten zu addieren, so
dass nicht die gesamte Systemsicherheit gefährdet ist, wenn
eine einzelne Sicherheitsschicht kompromittiert wird.
Beispielsweise ist es nicht ausreichend, ein Netzwerk oder ein
System nur mit einer Firewall zu sichern. Der
Systemadministrator muss auch Benutzerkonten überwachen, die
Integrität von Binärdateien prüfen und sicherstellen, dass keine
bösartigen Programme installiert sind. Um eine effektive
Sicherheitsstrategie zu implementieren, muss man Bedrohungen
verstehen und wissen, wie man sich dagegen verteidigen
kann.Was ist eine Bedrohung, wenn es um Computer-Sicherheit geht?
Bedrohungen beschränken sich nicht nur auf entfernte Angreifer,
die sich unerlaubten Zugriff auf ein System verschaffen wollen.
Zu den Bedrohungen zählen auch Mitarbeiter, bösartige Software,
nicht autorisierte Netzwerkgeräte, Naturkatastrophen,
Sicherheitslücken und sogar konkurrierende Unternehmen.Der Zugriff auf Netzwerke und Systeme erfolgt ohne
Erlaubnis, manchmal durch Zufall, oder von entfernten
Angreifern, und in einigen Fällen durch Industriespionage oder
ehemalige Mitarbeiter. Als Anwender müssen Sie vorbereitet sein
und auch zugeben, wenn ein Fehler zu einer Sicherheitsverletzung
geführt hat. Melden Sie Probleme umgehend dem verantwortlichen
Sicherheitspersonal. Als Administrator ist es wichtig,
Bedrohungen zu kennen und darauf vorbereitet zu sein, mögliche
Schäden zu mildern.Wenn Sicherheit auf Systeme angewendet wird, empfiehlt es
sich mit der Sicherung der Benutzerkonten zu beginnen und dann
die Netzwerkschicht zu sichern. Dabei ist zu beachten, dass die
Sicherheitsrichtlinien des Systems und des Unternehmens
eingehalten werden. Viele Unternehmen haben bereits eine
Sicherheitsrichtlinie, welche die Konfiguration von technischen
Geräten abdeckt. Die Richtlinie sollte die Konfiguration von
Arbeitsplatzrechnern, Desktops, mobilen Geräten, Mobiltelefonen,
Produktions- und Entwicklungsservern umfassen. In einigen
Fällen ist bereits eine Standardvorgehensweise vorhanden.
Fragen Sie im Zweifelsfall das Sicherheitspersonal.Der übrige Teil dieser Einführung beschreibt, wie einige
dieser grundlegenden Sicherheitskonfigurationen auf einem
&os;-System durchgeführt werden. Der Rest dieses Kapitels
beschreibt einige spezifische Werkzeuge, die verwendet werden
können, um eine Sicherheitsrichtlinie auf einem &os;-System zu
implementieren.Anmeldungen am System verhindernEin guter Ausgangspunkt für die Absicherung des Systems
ist die Prüfung der Benutzerkonten. Stellen Sie sicher, dass
root ein starkes
Passwort besitzt und dass dieses Passwort nicht weitergegeben
wird. Deaktivieren Sie alle Konten, die keinen Zugang zum
System benötigen.Es existieren zwei Methoden, um die Anmeldung über ein
Benutzerkonto zu verweigern. Die erste Methode ist, das
Konto zu sperren. Dieses Beispiel sperrt das Benutzerkonto
toor:&prompt.root; pw lock toorBei der zweiten Methode wird der Anmeldevorgang
verhindert, indem die Shell auf
/sbin/nologin gesetzt wird. Nur der
Superuser kann die Shell für andere Benutzer ändern:&prompt.root; chsh -s /usr/sbin/nologin toorDie Shell /usr/sbin/nologin
verhindert, dass dem Benutzer bei der Anmeldung am System eine
Shell zugeordnet wird.Gemeinsame Nutzung von BenutzerkontenIn manchen Fällen wird die Systemadministration auf
mehrere Benutzer aufgeteilt. &os; bietet zwei Methoden, um
solche Situationen zu handhaben. Bei der ersten und nicht
empfohlenen Methode wird ein gemeinsames root Passwort der
Mitglieder der Gruppe wheel verwendet. Hier gibt
der Benutzer su und das Passwort für
wheel ein, wenn er
die Rechte des Superusers benötigt. Der Benutzer sollte dann
nach der Beendigung der administrativen Aufgaben
exit eingeben. Um einen Benutzer zu dieser
Gruppe hinzuzufügen, bearbeiten Sie
/etc/group und fügen Sie den Benutzer an
das Ende des Eintrags wheel hinzu. Die
Benutzer müssen durch Komma und ohne Leerzeichen getrennt
werden.Die zweite und empfohlene Methode ein Benutzerkonto zu
teilen wird über den Port oder das Paket
security/sudo realisiert. Dieses Programm
bietet zusätzliche Prüfungen, bessere Benutzerkontrolle und
es kann auch konfiguriert werden, einzelnen Benutzern Zugriff
auf bestimme, privilegierte Befehle zu gestatten.Benutzen Sie nach der Installation
visudo, um
/usr/local/etc/sudoers zu bearbeiten.
Dieses Beispiel erstellt eine neue Gruppe webadmin und fügt das
Benutzerkonto trhodes dieser Gruppe hinzu.
Anschließend wird die Gruppe so konfiguriert, dass es
Gruppenmitgliedern gestattet wird apache24
neu zu starten:&prompt.root; pw groupadd webadmin -M trhodes -g 6000
&prompt.root; visudo
%webadmin ALL=(ALL) /usr/sbin/service apache24 *Passwort-HashesPasswörter sind ein notwendiges Übel. Wenn sie verwendet
werden müssen, sollten sie sehr komplex sein und dazu sollte
eine leistungsfähige Hash-Funktion gewählt werden, um die
Version des Passworts zu verschlüsseln, die in der
Passwortdatenbank gespeichert wird. &os; unterstützt die
Hash-Funktionen DES, MD5,
SHA256, SHA512, sowie
Blowfish Hash-Funktionen in seiner
crypt()-Bibliothek. Das in der
Voreinstellung verwendete SHA512 sollte
nicht durch eine weniger sichere Hash-Funktion getauscht
werden. Es kann jedoch durch den besseren Blowfish-Algorithmus
ersetzt werden.Blowfish ist nicht Bestandteil von
AES und ist nicht kompatibel mit allen
Federal Information Processing Standards
(FIPS). Die Verwendung wird in einigen
Umgebungen vielleicht nicht gestattet.Um zu bestimmen, welche Hash-Funktion das Passwort eines
Benutzers verschlüsselt, kann der Superuser den Hash für den
Benutzer in der Passwortdatenbank von &os; nachsehen. Jeder
Hash beginnt mit einem Zeichen, mit dem die verwendete
Hash-Funktion identifiziert werden kann. Bei
DES gibt es allerdings kein führendes
Zeichen. MD5 benutzt das Zeichen
$. SHA256 und
SHA512 verwenden das Zeichen
$6$. Blowfish benutzt das Zeichen
$2a$. In diesem Beispiel wird das Passwort
von dru mit dem
Hash-Algorithmus SHA512 verschlüsselt, da
der Hash mit $6$ beginnt. Beachten Sie,
dass der verschlüsselte Hash und nicht das Passwort selbst, in
der Passwortdatenbank gespeichert wird:&prompt.root; grep dru /etc/master.passwd
dru:$6$pzIjSvCAn.PBYQBA$PXpSeWPx3g5kscj3IMiM7tUEUSPmGexxta.8Lt9TGSi2lNQqYGKszsBPuGME0:1001:1001::0:0:dru:/usr/home/dru:/bin/cshDer Hash-Mechanismus wird in der Login-Klasse des
Benutzers festgelegt. In diesem Beispiel wird die
voreingestellte Login-Klasse für den Benutzer verwendet. Der
Hash-Algorithmus wird mit dieser Zeile in
/etc/login.conf gesetzt: :passwd_format=sha512:\Um den Algorithmus auf Blowfish zu ändern, passen Sie die
Zeile wie folgt an: :passwd_format=blf:\Führen Sie anschließend cap_mkdb
/etc/login.conf aus, wie in beschrieben. Beachten Sie, dass
vorhandene Passwort-Hashes durch diese Änderung nicht
beeinträchtigt werden. Das bedeutet, dass alle Passwörter neu
gehasht werden sollten, indem die Benutzer mit
passwd ihr Passwort ändern.Für die Anmeldung auf entfernten Rechnern sollte eine
Zwei-Faktor-Authentifizierung verwendet werden. Ein Beispiel
für eine Zwei-Faktor-Authentifizierung ist
etwas, was Sie besitzen (bspw. einen Schlüssel)
und etwas, was Sie wissen (bspw. das Passwort
für diesen Schlüssel). Da OpenSSH
Teil des &os;-Basissystems ist, sollten alle Anmeldungen über
das Netzwerk über eine verschlüsselte Verbindung mit einer
schlüsselbasierten Authentifizierung stattfinden. Passwörter
sollten hier nicht verwendet werden. Weitere Informationen
finden Sie in . Kerberos-Benutzer
müssen eventuell zusätzliche Änderungen vornehmen, um
OpenSSH in Ihrem Netzwerk zu
implementieren. Diese Änderungen sind in beschrieben.Durchsetzung einer Passwort-RichtlinieDie Durchsetzung einer starken Passwort-Richtlinie für
lokale Benutzerkonten ist ein wesentlicher Aspekt der
Systemsicherheit. In &os; kann die Länge, Stärke und
Komplexität des Passworts mit den
Pluggable Authentication Modules
(PAM) implementiert werden.In diesem Abschnitt wird gezeigt, wie Sie die minimale und
maximale Passwortlänge und die Durchsetzung von gemischten
Zeichen mit dem Modul pam_passwdqc.so
konfigurieren. Dieses Modul wird aufgerufen, wenn ein
Benutzer sein Passwort ändert.Um dieses Modul zu konfigurieren, müssen Sie als Superuser
die Zeile mit pam_passwdqc.so in
/etc/pam.d/passwd auskommentieren.
Anschließend bearbeiten Sie die Zeile, so dass sie den
vorliegenden Passwort-Richtlinien entspricht:password requisite pam_passwdqc.so min=disabled,disabled,disabled,12,10 similar=deny retry=3 enforce=usersDieses Beispiel legt gleich mehrere Anforderungen für neue
Passwörter fest. Die Einstellung min
kontrolliert die Passwortlänge. Es verfügt über fünf Werte,
weil dieses Modul fünf verschiedene Arten von Passwörtern
definiert, basierend auf der Komplexität. Die Komplexität
wird durch die Art von Zeichen definiert, die in einem
Passwort vorhanden sind, wie zum Beispiel Buchstaben, Zahlen
und Sonderzeichen. Die verschiedenen Arten von Passwörtern
werden in &man.pam.passwdqc.8; beschrieben. In diesem
Beispiel sind die ersten drei Arten von Passwörtern
deaktiviert, was bedeutet, dass Passwörter, die dieser
Komplexitätsstufe entsprechen, nicht akzeptiert werden,
unabhängig von der Länge des Passworts. Die
12 legt eine Richtlinie von mindestens
zwölf Zeichen fest, wenn das Passwort auch drei Arten von
Komplexität aufweist. Die 10 legt eine
Richtlinie fest, die auch Passwörter mit mindestens zehn
Zeichen zulassen, wenn das Passwort Zeichen mit vier Arten
von Komplexität aufweist.Die Einstellung similar verbietet
Passwörter, die dem vorherigen Passwort des Benutzers ähnlich
sind. Die Einstellung retry bietet dem
Benutzer drei Möglichkeiten, ein neues Passwort
einzugeben.Sobald diese Datei gespeichert wird, sehen Benutzer bei
der Änderung ihres Passworts die folgende Meldung:&prompt.user; passwd
Changing local password for trhodes
Old Password:
You can now choose the new password.
A valid password should be a mix of upper and lower case letters,
digits and other characters. You can use a 12 character long
password with characters from at least 3 of these 4 classes, or
a 10 character long password containing characters from all the
classes. Characters that form a common pattern are discarded by
the check.
Alternatively, if noone else can see your terminal now, you can
pick this as your password: "trait-useful&knob".
Enter new password:Wenn ein Passwort nicht den Richtlinien entspricht, wird
es mit einer Warnung abgelehnt und der Benutzer bekommt die
Möglichkeit, es erneut zu versuchen, bis die Anzahl an
Wiederholungen erreicht ist.Die meisten Passwort-Richtlinien erzwingen, dass
Passwörter nach einer bestimmten Anzahl von Tagen ablaufen.
Um dieses Limit in &os; zu konfigurieren, setzen Sie es für
die Login-Klasse des Benutzers in
/etc/login.conf. Die voreingestellte
Login-Klasse enthält dazu ein Beispiel:# :passwordtime=90d:\Um für diese Login-Klasse das Passwort nach 90 Tagen
ablaufen zu lassen, entfernen Sie das Kommentarzeichen
(#), speichern Sie die Änderungen und
führen Sie cap_mkdb /etc/login.conf
aus.Um das Passwort für einzelne Benutzer ablaufen zu lassen,
geben Sie pw ein Ablaufdatum oder die
Anzahl von Tagen, zusammen mit dem Benutzer an:&prompt.root; pw usermod -p 30-apr-2015 -n trhodesWie zu sehen ist, wird das Ablaufdatum in der Form von
Tag, Monat und Jahr angegeben. Weitere Informationen finden
Sie in &man.pw.8;.Erkennen von RootkitsEin Rootkit ist eine nicht
autorisierte Software die versucht, Root-Zugriff auf ein
System zu erlangen. Einmal installiert, wird diese bösartige
Software normalerweise eine Hintertür für den Angreifer
installieren. Realistisch betrachtet sollte ein durch ein
Rootkit kompromittiertes System nach der Untersuchung von
Grund auf neu installiert werden. Es besteht jedoch die
enorme Gefahr, dass sogar das Sicherheitspersonal oder
Systemingenieure etwas übersehen, was ein Angreifer dort
platziert hat.Wird ein Rootkit erkannt, ist dies bereits ein Zeichen
dafür, dass das System an einem bestimmten Zeitpunkt
kompromittiert wurde. Meist neigen diese Art von Anwendungen
dazu, sehr gut versteckt zu sein. Dieser Abschnitt zeigt ein
Werkzeug, mit dem Rootkits erkannt werden können:
security/rkhunter.Nach der Installation dieses Ports oder Pakets kann das
System mit dem folgenden Kommando überprüft werden. Das
Programm generiert eine ganze Menge Informationen und Sie
werden diverse Male ENTER drücken
müssen:&prompt.root; rkhunter -cNachdem der Prozess abgeschlossen ist, wird eine
Statusmeldung auf dem Bildschirm ausgegeben. Die Meldung
enthält die Anzahl der überprüften Dateien, verdächtige
Dateien, mögliche Rootkits und weitere Informationen. Während
der Überprüfung erscheinen allgemeine Sicherheitswarnungen,
zum Beispiel über versteckte Dateien, die Auswahl von
OpenSSH-Protokollen und bekannte,
anfällige Versionen installierter Anwendungen. Diese können
nun direkt, oder nach detaillierter Analyse untersucht
werden.Jeder Administrator sollte wissen, was auf den Systemen
läuft, für die er verantwortlich ist. Werkzeuge von
Drittanbietern, wie rkhunter oder
sysutils/lsof, sowie native Befehle wie
netstat oder
ps, können eine große Menge an
Informationen über das System anzeigen. Machen Sie sich
Notizen darüber, was normal ist, und fragen Sie
nach, wenn Ihnen etwas suspekt erscheint. Eine
Beeinträchtigung zu verhindern ist ideal, aber die Erkennung
einer Beeinträchtigung ist ein Muss.Überprüfung von BinärdateienDie Überprüfung von System- und Binärdateien ist wichtig,
da sie Systemadministratoren Informationen über
Systemänderungen zur Verfügung stellt. Eine Software, die das
System auf Änderungen überwacht wird Intrustion
Detection System (IDS)
genannt.&os; bietet native Unterstützung für ein einfaches
IDS-System. Obwohl die täglichen
Sicherheits-E-Mails den Administrator über Änderungen in
Kenntnis setzen, werden diese Informationen lokal gespeichert
und es besteht die Möglichkeit, dass ein Angreifer diese
Informationen manipulieren kann, um Änderungen am System zu
verbergen. Daher ist es empfehlenswert, einen eigenen Satz an
Signaturen zu erstellen und diese dann in einem
schreibgeschützten Verzeichnis, oder vorzugsweise auf einem
USB-Stick oder auf einem entfernten Server
zu speichern.Das im Basissystem enthaltene Werkzeug
mtree kann verwendet werden, um
eine Spezifikation des Inhalts eines Verzeichnisses zu
erzeugen. Hierbei wird ein Startwert
(Seed) oder eine numerische
Konstante benutzt, um die Spezifikation zu erstellen und um
sicherzustellen, dass sich die Spezifikation nicht geändert
hat. Dadurch kann festgestellt werden, ob eine Datei oder
eine Binärdatei verändert wurde. Da ein Angreifer den
Seed nicht kennt, ist es ihm fast unmöglich die
Prüfsummen von Dateien zu manipulieren. Das folgende Beispiel
generiert einen Satz mit SHA256-Prüfsummen
für jede Binärdatei unterhalb von /bin
und speichert diese Werte in einer versteckten Datei im
Heimatverzeichnis von root unter dem Namen
/root/.bin_chksum_mtree:&prompt.root; mtree -s 3483151339707503 -c -K cksum,sha256digest -p /bin > /root/.bin_chksum_mtree
&prompt.root; mtree: /bin checksum: 34270122253483151339707503 stellt den
Seed dar. Diesen Wert sollten Sie sich merken, aber
nicht mit anderen Personen teilen.Die Ausgabe von
/root/.bin_chksum_mtree sollte ähnlich
der folgenden sein:# user: root
# machine: dreadnaught
# tree: /bin
# date: Mon Feb 3 10:19:53 2014
# .
/set type=file uid=0 gid=0 mode=0555 nlink=1 flags=none
. type=dir mode=0755 nlink=2 size=1024 \
time=1380277977.000000000
\133 nlink=2 size=1170 time=1380277977.000000000 \
cksum=484492447 \
sha256digest=6207490fbdb5ed1904441fbfa941279055c3e24d3a4049aeb45094596400662a
cat size=12096 time=1380277975.000000000 cksum=3909216944 \
sha256digest=65ea347b9418760b247ab10244f47a7ca2a569c9836d77f074e7a306900c1e69
chflags size=8168 time=1380277975.000000000 cksum=3949425175 \
sha256digest=c99eb6fc1c92cac335c08be004a0a5b4c24a0c0ef3712017b12c89a978b2dac3
chio size=18520 time=1380277975.000000000 cksum=2208263309 \
sha256digest=ddf7c8cb92a58750a675328345560d8cc7fe14fb3ccd3690c34954cbe69fc964
chmod size=8640 time=1380277975.000000000 cksum=2214429708 \
sha256digest=a435972263bf814ad8df082c0752aa2a7bdd8b74ff01431ccbd52ed1e490bbe7Der Report enthält den Rechnernamen, das Datum und die
Uhrzeit der Spezifikation, sowie den Namen des Benutzers, der
die Spezifikation erstellt hat. Für jede Binärdatei im
Verzeichnis gibt es eine Prüfsumme, Größe, Uhrzeit und einen
SHA256-Hashwert.Um sicherzustellen, dass die binären Signaturen nicht
verändert wurden, vergleichen Sie den Inhalt des aktuellen
Verzeichnisses mit der zuvor erstellen Spezifikation.
Speichern Sie die Ergebnisse in einer Datei. Dieses Kommando
benötigt den Seed, der verwendet wurde um die
ursprüngliche Spezifikation zu erstellen:&prompt.root; mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
&prompt.root; mtree: /bin checksum: 3427012225Dies sollte die gleiche Prüfsumme für
/bin produzieren, wie die ursprüngliche
Spezifikation. Wenn keine Änderungen an den Binärdateien in
diesem Verzeichnis aufgetreten sind, wird die Ausgabedatei
/root/.bin_chksum_output leer sein. Um
eine Änderung zu simulieren, ändern Sie mit
touch das Datum von
/bin/cat und führen Sie die Verifikation
erneut aus:&prompt.root; touch /bin/cat
&prompt.root; mtree -s 3483151339707503 -p /bin < /root/.bin_chksum_mtree >> /root/.bin_chksum_output
&prompt.root; more /root/.bin_chksum_output
cat changed
modification time expected Fri Sep 27 06:32:55 2013 found Mon Feb 3 10:28:43 2014Es wird empfohlen, Spezifikationen für Verzeichnisse zu
erstellen, welche Binärdateien, Konfigurationsdateien und
sensible Daten enthalten. In der Regel werden Spezifikationen
für /bin, /sbin,
/usr/bin, /usr/sbin,
/usr/local/bin,
/usr/local/sbin,
/etc und
/usr/local/etc erstellt.Mit security/aide steht ein
fortgeschrittenes IDS-System zur Verfügung,
aber in den meisten Fällen bietet mtree die
Funktionalität, die von Administratoren benötigt wird. Es ist
jedoch sehr wichtig den Seed und die Prüfsummen in der
Ausgabe vor böswilligen Benutzern verborgen zu halten.
Weitere Informationen zu mtree finden Sie
in &man.mtree.8;.System-Tuning für SicherheitUnter &os; können viele Systemfunktionen mit
sysctl konfiguriert werden. Dieser
Abschnitt behandelt ein paar Sicherheitsmerkmale mit denen
Denial of Service
(DoS) verhindert werden sollen. Weitere
Informationen über die Benutzung von
sysctl und wie Werte vorübergehend oder
auch permanent geändert werden können, finden Sie in .Jedes Mal wenn eine Einstellung mit
sysctl geändert wird, vergrößert sich die
Wahrscheinlichkeit eines unerwünschten Schadens, was die
Verfügbarkeit des Systems beeinflusst. Alle Änderungen
sollten überwacht und wenn möglich, vorher auf einem
Testsystem ausprobiert werden, bevor sie auf einem
Produktivsystem verwendet werden.In der Voreinstellung startet &os; in der Sicherheitsstufe
(Securelevel)
-1. Dieser Modus wird
unsicherer Modus genannt, da die
unveränderlichen Datei-Flags ausgeschaltet werden können und
dadurch von allen Geräten gelesen und geschrieben werden kann.
Solange die Einstellung nicht über sysctl
oder in den Startskripten geändert wird, verbleibt die
Sicherheitsstufe auf -1. Die
Sicherheitsstufe kann während des Systemstarts erhöht werden.
Dazu muss in /etc/rc.confkern_securelevel_enable auf
YES und kern_securelevel
auf den gewünschten Wert gesetzt werden. Weitere
Informationen zu diesen Einstellungen und den verfügbaren
Sicherheitsstufen finden Sie in &man.security.7; und
&man.init.8;.Das Erhöhen der Sicherheitsstufe kann zu Problemen mit
&xorg; führen.Die Einstellungen
net.inet.tcp.blackhole und
net.inet.udp.blackhole können benutzt
werden, um eingehende SYN-Pakete an
geschlossenen Ports zu blockieren, ohne ein
RST-Paket als Antwort zu senden.
Standardmäßig wird jedoch ein RST-Paket
gesendet, um zu zeigen, dass der Port geschlossen ist. Das
ändern dieser Voreinstellung bietet einen gewissen Schutz
gegen Portscans. Diese Portscans versuchen herauszufinden,
welche Anwendungen auf einem System ausgeführt werden. Setzen
Sie net.inet.tcp.blackhole auf
2 und
net.inet.udp.blackhole auf
1. Weitere Informationen zu diesen
Einstellungen finden Sie in &man.blackhole.4;.Die Einstellung
net.inet.icmp.drop_redirect hilft dabei,
sogenannte Redirect-Angriffe zu verhindern. Ein
Redirect-Angriff ist eine Art von DoS, die
massenhaft ICMP-Pakete Typ 5 versendet. Da
solche Pakete nicht benötigt werden, setzen Sie
net.inet.icmp.drop_redirect auf
1 und
net.inet.ip.redirect auf
0.Source Routing zur
Erfassung und zum Zugriff auf nicht-routbare Adressen im
internen Netzwerk. Dies sollte deaktiviert werden, da
nicht-routbare Adressen in der Regel nicht absichtlich
geroutet werden. Um diese Funktion zu deaktivieren, setzen
Sie net.inet.ip.sourceroute und
net.inet.accept_sourceroute auf
0.Wenn ein Netzwerkgerät Nachrichten an alle Rechner in
einem Subnetz senden muss, wird eine
ICMP-Echo-Request Nachricht an die
Broadcast-Adresse gesendet. Allerdings gibt es keinen guten
Grund für externe Rechner, solche Nachrichten zu verschicken.
Um alle externen Broadcast-Anfragen abzulehnen, setzen Sie
net.inet.icmp.bmcastecho auf
0.Einige zusätzliche Einstellungen sind in &man.security.7;
dokumentiert.EinmalpasswörterEinmalpasswörterSicherheitEinmalpasswörterIn der Voreinstellung unterstützt &os;
One-time Passwords in Everything
(OPIE). OPIE wurde
konzipiert um Replay-Angriffe zu verhindern, bei dem ein
Angreifer das Passwort eines Benutzers ausspäht und es
benutzt, um Zugriff auf ein System zu erlangen. Da ein Passwort
unter OPIE nur einmal benutzt wird, ist ein
ausgespähtes Passwort für einen Angreifer nur von geringem
Nutzen. OPIE verwendet eine sichere
Hash-Funktion und ein Challenge/Response-System, um Passwörter
zu verwalten. Die &os;-Implementation verwendet in der
Voreinstellung die MD5-Hash-Funktion.OPIE verwendet drei verschiedene Arten
von Passwörtern. Das erste ist das normale &unix;- oder
Kerberos-Passwort. Das zweite ist das Einmalpasswort, das von
opiekey generiert wird. Das dritte Passwort
ist das geheime Passwort, das zum Erstellen der
Einmalpasswörter verwendet wird. Das geheime Passwort steht in
keiner Beziehung zum &unix;-Passwort und beide Passwörter
sollten unterschiedlich sein.Es gibt noch zwei weitere Werte, die für
OPIE wichtig sind. Der erste ist der
Initialwert (engl.
seed oder
key), der aus zwei Buchstaben und
fünf Ziffern besteht. Der zweite Wert ist der
Iterationszähler, eine Zahl zwischen 1 und 100.
OPIE generiert das Einmalpasswort, indem
es den Initialwert und das geheime Passwort aneinander hängt
und dann die MD5-Hash-Funktion so oft, wie
durch den Iterationszähler gegeben, anwendet. Das Ergebnis wird
in sechs englische Wörter umgewandelt, die das Einmalpasswort
ergeben. Das Authentifizierungssystem (meistens PAM) merkt sich
das zuletzt benutzte Einmalpasswort und der Benutzer ist
authentifiziert, wenn die Hash-Funktion des Passworts dem
vorigen Passwort entspricht. Da nicht umkehrbare
Hash-Funktionen benutzt werden, ist es unmöglich, aus einem
bekannten Passwort weitere gültige Einmalpasswörter zu
berechnen. Der Iterationszähler wird nach jeder erfolgreichen
Anmeldung um eins verringert und stellt so die Synchronisation
zwischen Benutzer und Login-Programm sicher. Wenn der
Iterationszähler den Wert 1 erreicht, muss
OPIE neu initialisiert werden.Es gibt ein paar Programme, die in diesen Prozess einbezogen
werden. Ein Einmalpasswort oder eine Liste von
Einmalpasswörtern, die von &man.opiekey.1; durch Angabe eines
Iterationszählers, eines Initalwertes und einem geheimen
Passwort generiert wird. &man.opiepasswd.1; wird benutzt, um
Passwörter, Iterationszähler oder Initialwerte zu ändern.
&man.opieinfo.1; hingegen gibt den momentanen Iterationszähler
und Initialwert eines Benutzers aus, den es aus
/etc/opiekeys ermittelt.Dieser Abschnitt beschreibt vier verschiedene Arten von
Tätigkeiten. Zuerst wird erläutert, wie Einmalpasswörter über
eine gesicherte Verbindung konfiguriert werden. Als nächstes
wird erklärt, wie opiepasswd über
eine nicht gesicherte Verbindung eingesetzt wird. Als drittes
wird beschrieben, wie man sich über eine nicht gesicherte
Verbindung anmeldet. Die vierte Tätigkeit beschreibt, wie man
eine Reihe von Schlüsseln generiert, die man sich aufschreiben
oder ausdrucken kann, um sich von Orten anzumelden, die über
keine gesicherten Verbindungen verfügen.OPIE initialisierenUm OPIE erstmals zu initialisieren,
rufen Sie &man.opiepasswd.1; über eine gesicherte Verbindung
auf:&prompt.user; opiepasswd -c
[grimreaper] ~ $ opiepasswd -f -c
Adding unfurl:
Only use this method from the console; NEVER from remote. If you are using
telnet, xterm, or a dial-in, type ^C now or exit with no password.
Then run opiepasswd without the -c parameter.
Using MD5 to compute responses.
Enter new secret pass phrase:
Again new secret pass phrase:
ID unfurl OTP key is 499 to4268
MOS MALL GOAT ARM AVID COED
Die Option startet den Konsolen-Modus,
der davon ausgeht, dass der Befehl von einem sicherem Ort
ausgeführt wird. Dies kann beispielsweise der eigene Rechner
sein, oder über eine mit SSH gesicherte
Verbindung zum eigenen Rechner.Geben Sie das geheime Passwort ein, wenn Sie danach
gefragt werden. Damit werden die Einmalpasswörter generiert.
Dieses Passwort sollte schwer zu erraten sein und sich
ebenfalls vom Passwort des Bentuzerkontos unterscheiden. Es
muss zwischen 10 und 127 Zeichen lang sein. Prägen Sie sich
dieses Passwort gut ein!Die Zeile, die mit ID beginnt, enthält den
Login-Namen (unfrul), den voreingestellten
Iterationszähler (499) und den Initialwert
(to4268). Das System erinnert sich an
diese Parameter und wird sie bei einem Anmeldeversuch
anzeigen. Sie brauchen sich diese Dinge also nicht merken.
Die letzte Zeile enthält das generierte Einmalpasswort, das
aus den Parametern und dem geheimen Passwort ermittelt wurde.
Bei der nächsten Anmeldung muss dann diese Einmalpasswort
benutzt werden.Initialisierung über eine nicht gesicherte
VerbindungUm Einmalpasswörter über eine nicht gesicherte Verbindung
zu initialisieren, oder das geheime Passwort zu ändern, müssen
Sie über eine gesicherte Verbindung zu einer Stelle verfügen,
an der Sie opiekey ausführen können. Dies kann etwa die
Eingabeaufforderung auf einer Maschine sein, der Sie
vertrauen. Zudem müssen Sie einen Iterationszähler vorgeben
(100 ist ein guter Wert) und einen Initialwert wählen, wobei
Sie auch einen zufällig generierten benutzen können. Benutzen
Sie &man.opiepasswd.1; über die ungesicherte Verbindung zu der
Maschine, die Sie einrichten wollen:&prompt.user; opiepasswd
Updating unfurl:
You need the response from an OTP generator.
Old secret pass phrase:
otp-md5 498 to4268 ext
Response: GAME GAG WELT OUT DOWN CHAT
New secret pass phrase:
otp-md5 499 to4269
Response: LINE PAP MILK NELL BUOY TROY
ID mark OTP key is 499 gr4269
LINE PAP MILK NELL BUOY TROYDrücken Sie Return, um die Vorgabe
für den Initialwert zu akzeptieren. Bevor
Sie nun das Zugriffspasswort
(engl. access password)
eingeben, rufen Sie über die gesicherte Verbindung
opikey mit denselben Parametern auf:&prompt.user; opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Don not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHATGehen Sie zurück zu der nicht gesicherten Verbindung
und geben dort das eben generierte Einmalpasswort ein.Erzeugen eines einzelnen EinmalpasswortesNachdem Sie OPIE eingerichtet haben,
werden Sie beim nächsten Anmelden wie folgt begrüßt:&prompt.user; telnet example.com
Trying 10.0.0.1...
Connected to example.com
Escape character is '^]'.
FreeBSD/i386 (example.com) (ttypa)
login: <username>
otp-md5 498 gr4269 ext
Password: OPIE besitzt eine nützliche
Eigenschaft. Wenn Sie an der Eingabeaufforderung
Return drücken, wird die echo-Funktion
eingeschaltet, das heißt Sie sehen, was Sie tippen. Dies ist
besonders nützlich, wenn Sie ein generiertes Passwort von
einem Ausdruck abtippen müssen.MS-DOSWindowsMacOSJetzt müssen Sie das Einmalpasswort generieren,
um der Anmeldeaufforderung nachzukommen. Dies muss auf
einem gesicherten System geschehen, auf dem Sie
&man.opiekey.1; ausführen können. Dieses Programm gibt es
auch für &windows;, &macos; und &os;. Es benötigt den
Iterationszähler sowie den Initialwert als Parameter, die Sie
mittels cut-and-paste direkt von der
Login-Aufforderung nehmen können.Auf dem sicheren System:&prompt.user; opiekey 498 to4268
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase:
GAME GAG WELT OUT DOWN CHATSobald das Einmalpasswort generiert wurde, können Sie die
Anmeldeprozedur fortsetzen.Erzeugen von mehreren EinmalpasswörternManchmal haben Sie keinen Zugriff auf eine sichere
Maschine oder eine sichere Verbindung. In diesem Fall können
Sie vorher mit &man.opiekey.1; einige Einmalpasswörter
generieren. Zum Beispiel:&prompt.user; opiekey -n 5 30 zz99999
Using the MD5 algorithm to compute response.
Reminder: Do not use opiekey from telnet or dial-in sessions.
Enter secret pass phrase: <secret password>
26: JOAN BORE FOSS DES NAY QUIT
27: LATE BIAS SLAY FOLK MUCH TRIG
28: SALT TIN ANTI LOON NEAL USE
29: RIO ODIN GO BYE FURY TIC
30: GREW JIVE SAN GIRD BOIL PHIMit fordern Sie fünf
Passwörter der Reihe nach an. Der letzte
Iterationszähler wird durch gegeben.
Beachten Sie bitte, dass die Passwörter in der
umgekehrten Reihenfolge, in der sie
zu benutzen sind, ausgeben werden. Wirklich paranoide
Benutzer können sich jetzt die Passwörter aufschreiben oder
ausdrucken. Sie sollten die Passwörter nach Gebrauch
durchstreichen.Einschränken der Benutzung von
System-PasswörternOPIE kann die Verwendung von
&unix;-Passwörtern abhängig von der
IP-Adresse einschränken. Die dazu nötigen
Einstellungen werden in /etc/opieaccess
vorgenommen, die bei der Installation des Systems automatisch
erzeugt wird. Weitere Informationen über diese Datei und
Sicherheitshinweise zu ihrer Verwendung finden Sie in
&man.opieaccess.5;.opieaccess könnte
beispielsweise die folgende Zeile enthalten:permit 192.168.0.0 255.255.0.0Diese Zeile erlaubt es Benutzern, die sich von einer der
angegebenen IP-Adressen anmelden, ihr
&unix;-Passwort zu verwenden. Beachten Sie bitte, dass eine
IP-Adresse leicht gefälscht werden
kann.Findet sich in opieaccess kein
passender Eintrag, muss die Anmeldung mit
OPIE erfolgen.TCP WrapperTomRhodesBeigetragen von TCP WrapperTCP Wrapper ist ein
rechnerbasiertes Zugriffskontrollsystem, das die Fähigkeiten von
erweitert. Beispielsweise
können Verbindungen protokolliert, Nachrichten zurückgesandt
oder nur interne Verbindungen angenommen werden. Weitere
Informationen über TCP Wrapper und
dessen Funktionen finden Sie in &man.tcpd.8;.TCP Wrapper sollten nicht als
Ersatz für eine ordentlich konfigurierte Firewall angesehen
werden. Stattdessen sollten
TCP Wrapper in Verbindung mit einer
Firewall und anderen Sicherheitsmechanismen eingesetzt werden,
um bei der Umsetzung einer Sicherheitsrichtlinie eine weitere
Sicherheitsschicht zu bieten.KonfigurationUm TCP Wrapper unter &os; zu
aktivieren, fügen Sie die folgenden Zeilen in
/etc/rc.conf ein:inetd_enable="YES"
inetd_flags="-Ww"Anschließend muss /etc/hosts.allow
richtig konfiguriert werden.Im Gegensatz zu anderen Implementierungen der
TCP Wrapper wird unter &os; vom
Gebrauch der Datei hosts.deny
abgeraten. Die Konfiguration sollte sich vollständig in
/etc/hosts.allow befinden.In der einfachsten Konfiguration werden Dienste
abhängig von den Optionen in
/etc/hosts.allow erlaubt oder
gesperrt. Unter &os; wird in der Voreinstellung
jeder von inetd gestartete Dienst
erlaubt.Eine Konfigurationszeile ist wie folgt aufgebaut:
Dienst : Adresse : Aktion.
Dienst ist der von
inetd
gestartete Dienst (auch Daemon genannt). Die
Adresse ist ein gültiger
Rechnername, eine IP-Adresse oder
eine IPv6-Adresse in Klammern
([]).
Der Wert allow im Feld
Aktion erlaubt Zugriffe, der Wert
deny verbietet Zugriffe.
Die Zeilen in hosts.allow
werden für jede Verbindung der Reihe nach
abgearbeitet. Trifft eine Zeile auf eine Verbindung
zu, wird die entsprechende Aktion ausgeführt
und die Abarbeitung ist beendet.Um beispielsweise einkommende
POP3-Verbindungen für den Dienst
mail/qpopper zu erlauben, sollte
hosts.allow um die nachstehende Zeile
erweitert werden:# This line is required for POP3 connections:
qpopper : ALL : allowJedes Mal, wenn diese Datei bearbeitet wird, muss
inetd neu gestartet werden:&prompt.root; service inetd restartErweiterte KonfigurationTCP Wrapper besitzen
weitere Optionen, die bestimmen, wie Verbindungen
behandelt werden. In einigen Fällen ist es
gut, wenn bestimmten Rechnern oder Diensten eine
Nachricht geschickt wird. In anderen Fällen
soll vielleicht der Verbindungsaufbau protokolliert
oder eine E-Mail an einen Administrator versandt
werden. Oder ein Dienst soll nur für das
lokale Netz bereitstehen. Dies alles ist mit so genannten
Wildcards, Metazeichen und der Ausführung externer
Programme möglich.Stellen Sie sich vor, eine Verbindung soll
verhindert werden und gleichzeitig soll dem Rechner,
der die Verbindung aufgebaut hat, eine Nachricht
geschickt werden. Solch eine Aktion ist mit
möglich.
führt beim Verbindungsaufbau ein Kommando oder ein Skript
aus. Ein Beispiel ist in hosts.allow
enthalten:# Alle anderen Dienste sind geschützt
ALL : ALL \
: severity auth.info \
: twist /bin/echo "You are not welcome to use %d from %h."Für jeden Dienst, der nicht vorher in
hosts.allow konfiguriert wurde, wird
die Meldung You are not allowed to use
daemon name from
hostname. zurückgegeben.
Dies ist nützlich, wenn die Gegenstelle sofort
benachrichtigt werden soll, nachdem die Verbindung getrennt
wurde. Der Text der Meldung muss in
Anführungszeichen (") stehen.Ein so konfigurierter Server ist anfällig
für Denial-of-Service-Angriffe. Ein Angreifer
kann die gesperrten Dienste mit Verbindungsanfragen
überfluten.Eine weitere Möglichkeit bietet .
Wie verbietet
die Verbindung und führt externe Kommandos aus. Allerdings
sendet dem Rechner keine
Rückmeldung. Sehen Sie sich die nachstehende
Konfigurationsdatei an:# Verbindungen von example.com sind gesperrt:
ALL : .example.com \
: spawn (/bin/echo %a from %h attempted to access %d >> \
/var/log/connections.log) \
: denyDamit sind Verbindungen von der Domain
*.example.com gesperrt.
Jeder Verbindungsaufbau wird zudem in
/var/log/connections.log
protokolliert. Das Protokoll enthält den
Rechnernamen, die IP-Adresse
und den Dienst, der angesprochen wurde. In diesem Beispiel
wurden die Metazeichen %a und
%h verwendet. Eine vollständige Liste
der Metazeichen finden Sie in &man.hosts.access.5;.Die Wildcard ALL passt auf jeden
Dienst, jede Domain oder jede IP-Adresse.
Eine andere Wildcard ist PARANOID. Sie
passt auf jeden Rechner, dessen
IP-Adresse möglicherweise gefälscht ist.
Dies ist beispielsweise der Fall, wenn der Verbindungsaufbau
von einer IP-Adresse erfolgt, die nicht
zu dem übermittelten Rechnernamen passt. In diesem Beispiel
werden alle Verbindungsanfragen zu Sendmail
abgelehnt, wenn die IP-Adresse nicht zum
Rechnernamen passt:# Block possibly spoofed requests to sendmail:
sendmail : PARANOID : denyDie Wildcard PARANOID wird
Verbindungen ablehnen, wenn der
Client oder der Server eine fehlerhafte
DNS-Konfiguration besitzt.Weitere Informationen über Wildcards und deren Funktion
finden Sie in &man.hosts.access.5;.Wenn Sie neue Einträge zur Konfiguration hinzufügen,
sollten Sie sicherstellen, dass nicht benötigte Einträge
in hosts.allow auskommentiert
werden.KerberosTillmanHodgsonBeigetragen von MarkMurrayBeruht auf einem Beitrag von Kerberos ist ein
Netzwerk-Authentifizierungsprotokoll, das ursprünglich am
Massachusetts Institute of Technology (MIT)
entwickelt wurde. Es bietet die Möglichkeit zur sicheren
Authentifizierung über ein potentiell unsicheres Netzwerk. Das
Kerberos-Protokoll benutzt eine
starke Kryptographie, um die Identität von Clients und Servern
nachweisen zu können. Dabei werden keine unverschlüsselten
Daten über das Netzewrk gesendet.
Kerberos kann als eine Art Proxy zur
Identitätsprüfung, oder als vertrauenswürdiges
Authentifizierungssystem betrachtet werden.Kerberos hat nur eine Aufgabe:
Die sichere Prüfung der Identität eines Benutzers
(Authentifizierung) über das Netzwerk. Das System
überprüft weder die Berechtigungen der Benutzer
(Autorisierung), noch verfolgt es die durchgeführten
Aktionen (Audit). Daher sollte
Kerberos zusammen mit anderen
Sicherheits-Systemen eingesetzt werden, die diese Funktionen
bereitstellen.Die aktuelle Version des Protokolls ist Version 5, die in
RFC 4120 beschrieben ist. Es existieren
mehrere freie Implementierungen dieses Protokolls für eine Reihe
von Betriebssystemen. Das MIT entwickelt
auch weiterhin seine
Kerberos-Version weiter.
Es wird in den vereinigten Staaten als Kryptographie-Produkt
eingesetzt und unterlag in der Vergangenheit
US-Exportbeschränkungen. In &os; ist
MIT-Kerberos als
Port oder Paket security/krb5
verfügbar. Die
Kerberos-Implementation von Heimdal
wurde außerhalb der USA entwickelt und
unterliegt daher keinen Export-Beschränkungen.
Heimdal-Kerberos ist im Basissystem
von &os; enthalten. Mit security/heimdal aus
der Ports-Sammlung steht eine weitere Distribution, mit mehr
konfigurierbaren Optionen zur Verfügung.Die folgenden Anweisungen beschreiben, wie Sie das mit
&os; gelieferte Heimdal-Kerberos
einrichten.Die Beschreibung der
Kerberos-Installation benutzt
folgende Namensräume:Die DNS-Domain (Zone)
heißt example.org.Das Kerberos-Realm
heißt EXAMPLE.ORG.Benutzen Sie echte Domain-Namen, wenn Sie
Kerberos einrichten. Damit
vermeiden Sie DNS-Probleme und stellen
die Zusammenarbeit mit anderen
Kerberos-Realms sicher.Das Heimdal KDC einrichtenKerberos5Key Distribution CenterKerberos authentifiziert
Benutzer an einer zentralen Stelle: dem Key Distribution
Center (KDC). Das KDC
verteilt Tickets, mit denen ein
Dienst die Identität eines Benutzers feststellen kann.
Alle Mitglieder eines Kerberos-Realms
vertrauen dem KDC, daher gelten für
das KDC erhöhte
Sicherheitsanforderungen.Obwohl der Kerberos-Server
wenig Ressourcen benötigt, sollte das KDC
wegen der Sicherheitsanforderungen auf einem separaten Rechner
installiert werden.Das KDC wird in
/etc/rc.conf wie folgt aktiviert:kerberos5_server_enable="YES"
kadmind5_server_enable="YES"Danach wird /etc/krb5.conf
wie folgt bearbeitet:[libdefaults]
default_realm = EXAMPLE.ORG
[realms]
EXAMPLE.ORG = {
kdc = kerberos.example.org
admin_server = kerberos.example.org
}
[domain_realm]
.example.org = EXAMPLE.ORGDiese Einstellungen setzen voraus, dass der voll
qualifizierte Name des KDCs
kerberos.example.org ist.
Wenn das KDC einen anderen Namen hat,
muss in der DNS-Zone ein Alias-Eintrag
(CNAME-Record) für das
KDC hinzugefügt werden.In großen Netzwerken mit einem ordentlich
konfigurierten DNS-Server kann die Datei
aus dem obigen Beispiel verkürzt werden:[libdefaults]
default_realm = EXAMPLE.ORGDie Zonendatei von example.org
muss dann die folgenden Zeilen enthalten:_kerberos._udp IN SRV 01 00 88 kerberos.example.org.
_kerberos._tcp IN SRV 01 00 88 kerberos.example.org.
_kpasswd._udp IN SRV 01 00 464 kerberos.example.org.
_kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org.
_kerberos IN TXT EXAMPLE.ORGDamit die Clients die
Kerberos-Dienste benutzen
können, muss das KDC entweder eine
vollständig konfigurierte
/etc/krb5.conf enthalten, oder eine
minimale Konfiguration und zusätzlich
ein richtig konfigurierter
DNS-Server.Im nächsten Schritt wird die
Kerberos-Datenbank eingerichtet.
Die Datenbank enthält die Schlüssel aller Prinzipale
und ist mit einem Passwort geschützt. Dieses Passwort
brauchen Sie sich nicht merken, da ein davon abgeleiteter
Schlüssel in /var/heimdal/m-key
gespeichert wird. Um den Schlüssel zu erstellen, rufen Sie
kstash auf und geben Sie ein Passwort
ein:&prompt.root; kstash
Master key: xxxxxxxx
Verifying password - Master key: xxxxxxxxNachdem der Schlüssel erstellt wurde, intitialisieren Sie
die Datenbank mit kadmin -l. Die Option
weist kadmin an, die lokale Datenbank
direkt zu bearbeiten, anstatt den zu diesem Zeitpunkt noch
nicht laufenden Netzwerkdienst &man.kadmind.8; zu benutzen.
An der Eingabeaufforderung von kadmin kann
mit init die Datenbank des Realms
initialisiert werden:&prompt.root; kadmin -l
kadmin> init EXAMPLE.ORG
Realm max ticket life [unlimited]:Zuletzt wird mit add das erste
Prinzipal erstellt. Benutzen Sie die voreingestellten
Optionen. Die Einstellungen können später mit
modify verändert werden. An der
Eingabeaufforderung von &man.kadmin.8; zeigt
? die verfügbaren Optionen an.kadmin> add tillman
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
Password: xxxxxxxx
Verifying password - Password: xxxxxxxxJetzt können die KDC-Dienste mit
service kerberos start und
service kadmind start gestartet werden.
Obwohl zu diesem Zeitpunkt noch keine kerberisierten Dienste
laufen, kann die Funktion des KDCs
schon überprüft werden. Für den eben angelegten
Benutzer können Sie sich vom KDC
Tickets holen und anzeigen lassen:&prompt.user; kinit tillman
tillman@EXAMPLE.ORG's Password:
&prompt.user; klist
Credentials cache: FILE: /tmp/krb5cc_500
Principal: tillman@EXAMPLE.ORG
Issued Expires Principal
Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORGNachdem der Test abgeschlossen ist, kann das temporäre
Ticket zurückgezogen werden:&prompt.user; kdestroyKerberos-Dienste auf dem
Server einrichtenKerberos5Dienste einrichtenBei der Konfiguration eines Servers für die
Kerberos-Authentifizierung muss
zuerst sichergestellt werden, dass
/etc/krb5.conf richtig konfiguriert ist.
Die Datei kann entweder vom KDC kopiert,
oder auf dem neuen System regeneriert werden.Als nächstes muss auf dem Server die
/etc/krb5.keytab erzeugt werden. Dies
ist der Hauptbestandteil um Dienste zu
kerberisieren und entspricht der Erzeugung
eines geheimen Schlüssels zwischen dem Dienst und dem
KDC. Das Geheimnis ist ein
kryptographischer Schlüssel, der in einem
keytab> abgelegt wird. Diese Datei
enthält den Schlüssel des Servers, mit dem sich der Server und
das KDC gegenseitig authentifizieren
können. Sie muss in einer sicheren Art und Weise an den
Server übertragen werden, da ansonsten die Sicherheit des
Servers gefährdet ist, wenn z.B. die Schlüssel öffentlich
werden. In der Regel wird die keytab auf
einem vertrauenswürdigen Rechner mit kadmin
erzeugt und anschließend sicher auf den Server übertragen,
beispielsweise mit &man.scp.1;. Wenn die
Sicherheitsrichtlinien es erlauben, kann die Datei auch direkt
auf dem Server erzeugt werden. Es ist sehr wichtig, dass die
keytab auf sichere Weise auf den Server
übertragen wird. Wenn der Schlüssel einer anderen Partei
bekannt wird, kann sich diese Partei den Benutzern als
Server ausgeben! Da der Eintrag für das Host-Prinzipal für
die KDC-Datenbank auch mit
kadmin erstellt wird, ist es praktisch,
kadmin direkt auf dem Server zu
benutzen.Natürlich ist auch kadmin ein
kerberisierter Dienst: ein
Kerberos-Ticket ist erforderlich,
um sich gegenüber dem Netzwerkdienst zu authentifizieren und
um sicherzustellen, dass der Benutzer, der
kadmin ausführt, tatsächlich vorhanden ist.
kadmin wird nach dem Passwort fragen, um
ein neues Ticket zu generieren. Das Prinzipal, das sich mit
dem kadmin-Dienst authentifiziert, muss über die
Zugriffskontrollliste kadmin.acl dazu
berechtigt sein. Weitere Informationen über
Zugriffskontrolllisten finden Sie in den Heimdal-Info-Seiten
(info heimdal) im Abschnitt
Remote administration. Wenn der Zugriff auf
kadmin von entfernten Rechnern verboten
ist, kann sich der Administrator entweder über die lokale
Konsole oder über &man.ssh.1; mit dem KDC
verbinden, um die lokale Administration mit
kadmin -l durchzuführen.Nach der Installation von
/etc/krb5.conf, können Sie das Kommando
add --random-key in
kadmin ausführen, um das Host-Prinzipal in
die Datenbank zu schreiben. Das Kommando
ext extrahiert den Schlüssel des Prinzipals
in eine eigene keytab:&prompt.root; kadmin
kadmin> add --random-key host/myserver.example.org
Max ticket life [unlimited]:
Max renewable life [unlimited]:
Attributes []:
kadmin> ext_keytab host/myserver.example.org
kadmin> exitBeachten Sie, dass ext_keytab den
extrahierten Schlüssel standardmäßig in
/etc/krb5.keytab speichert. Das ist
gut, wenn das Kommando auf dem kerberisierten Server
ausgeführt wird, ansonsten sollte das Argument
--keytab
pfad/zur/datei
benutzt werden, wenn die keytab an einen anderen Ort
extrahiert wird:&prompt.root; kadmin
kadmin> ext_keytab --keytab=/tmp/example.keytab host/myserver.example.org
kadmin> exitAnschließend kann die erzeugte keytab sicher mit
&man.scp.1; auf Server oder auf einen
Wechseldatenträger kopiert werden. Geben Sie auf jeden Fall
einen anderen Namen für die keytab an, weil sonst die keytab
des KDCs überschrieben würde.Wegen der Datei krb5.conf kann
der Server nun mit dem KDC kommunizieren
und seine Identität mithilfe der Datei
krb5.keytab nachweisen. Jetzt
können die kerberisierten Dienste aktiviert werden. Einer der
gebräuchlichsten Dienste ist &man.sshd.8;, der
Kerberos über
GSS-API unterstützt. Fügen Sie folgende
Zeile in /etc/ssh/sshd_config ein:GSSAPIAuthentication yesNach dieser Änderung muss &man.sshd.8; mit
service sshd restart neu gestartet werden,
damit die neue Konfiguration wirksam wird.Kerberos auf dem Client
einrichtenKerberos5Clients einrichtenGenau wie der Server, benötigt auch der Client eine
Konfiguration in /etc/krb5.conf.
Kopien Sie die Datei (sicher) vom KDC
auf den Client, oder schreiben Sie die Datei bei Bedarf
einfach neu.Testen Sie den Client, indem Sie mit
kinit Tickets anfordern, mit
klist Tickets anzeigen und mit
kdestroy Tickets löschen.
Kerberos-Anwendungen sollten auch
kerberisierte Server ansprechen können. Wenn das nicht
funktioniert, Sie aber Tickets anfordern können, hat
wahrscheinlich der kerberisierte Server ein Problem und nicht
der Client oder das KDC. Im Falle eines
kerberisierten &man.ssh.1; ist GSS-API in
der Voreinstellung deaktiviert. Testen Sie daher mit
ssh -o GSSAPIAuthentication=yes
hostname.Wenn Sie die kerberisierten Anwendungen testen, können Sie
einen Paket-Sniffer wie tcpdump benutzen,
um sicherzustellen, dass keine sensiblen Informationen im
Klartext übertragen werden.Es stehen verschiedene
Kerberos-Anwendungen zur Verfügung.
Die Anwendungen, die SASL benutzen, können
dann auch GSS-API benutzen. Viele Arten
von Anwendungen können Kerberos zur
Authentifizierung verwenden, vom Jabber-Client bis zum
IMAP-Client..k5login.k5usersNormalerweise wird ein
Kerberos-Prinzipal auf ein lokales
Benutzerkonto abgebildet. Manchmal wird aber Zugriff auf ein
lokales Benutzerkonto benötigt, zu dem es keinen passenden
Kerberos-Prinzipal gibt.
Der Prinzipal tillman@EXAMPLE.ORG bräuchte
beispielsweise Zugriff auf das Konto webdevelopers. Ebenso könnten
andere Prinzipale auf dieses Konto zugreifen wollen.Die Dateien .k5login und
.k5users im Heimatverzeichnis eines
Benutzers können verwendet werden, um dieses Problem zu lösen.
Mit der folgenden .k5login im
Heimatverzeichnis des Benutzers webdevelopers haben beide
Prinzipale auch ohne das gemeinsame Passwort Zugriff auf das
Konto:tillmann@example.org
jdoe@example.orgWeitere Informationen zu .k5users
finden Sie in &man.ksu.1;.Unterschiede zur
MIT-ImplementationDer Hauptunterschied zwischen der MIT-
und der Heimdal-Implementation ist das Kommando
kadmin. Die Befehlssätze des Kommandos
(obwohl funktional gleichwertig) und das verwendete Protokoll
unterscheiden sich in beiden Varianten. Das
KDC lässt sich nur mit dem
kadmin Kommando der passenden
Kerberos-Variante verwalten.Für dieselbe Funktion können auch die
Client-Anwendungen leicht geänderte Kommandozeilenoptionen
besitzen. Folgen Sie der Anleitung auf
http://web.mit.edu/Kerberos/www/. Achten Sie
besonders auf den Suchpfad für Anwendungen. Der
MIT-Port wird unter &os; standardmäßig in
/usr/local/ installiert. Wenn die
Umgebungsvariable PATH zuerst die
Systemverzeichnisse enthält, werden die Systemprogramme
anstelle der MIT-Programme
ausgeführt.Wenn Sie
MIT-Kerberos
verwenden, sollten Sie außerdem folgende Änderungen an
/etc/rc.conf vornehmen:kerberos5_server="/usr/local/sbin/krb5kdc"
kadmind5_server="/usr/local/sbin/kadmind"
kerberos5_server_flags=""
kerberos5_server_enable="YES"
kadmind5_server_enable="YES"Tipps und FehlersucheWährend der Konfiguration und bei der Fehlersuche sollten
die folgenden Punkte beachtet werden:Wenn Sie Heimdal- oder
MIT-Kerberos
benutzen, muss in der Umgebungsvariable
PATH der Pfad zu den
Kerberos-Programmen vor dem
Pfad zu den Programmen des Systems stehen.Wenn die Clients im Realm ihre Uhrzeit nicht
synchronisieren, schlägt vielleicht die Authentifizierung
fehl. beschreibt, wie
Sie mithilfe von NTP die Uhrzeiten
synchronisieren.Wenn Sie den Namen eines Rechners ändern,
müssen Sie auch den host/-Prinzipal ändern und
die keytab aktualisieren. Dies
betrifft auch spezielle Einträge wie den Prinzipal für
Apaches www/mod_auth_kerb.Alle Rechner in einem Realm müssen vor- und
rückwärts aufgelöst werden können. Entweder über
DNS, zumindest aber über
/etc/hosts.
CNAME-Einträge im
DNS funktionieren, aber die
entsprechenden A- und PTR-Einträge müssen
vorhanden und richtig sein. Wenn sich Namen nicht
auflösen lassen, ist die Fehlermeldung nicht
gerade selbstsprechend: Kerberos5 refuses
authentication because Read req
failed: Key table entry not found.Einige Betriebssysteme installieren
ksu mit falschen Zugriffsrechten;
es fehlt das Set-UID-Bit für root. Das hat zur Folge,
dass ksu nicht funktioniert. Dies ist
ein Fehler in den Zugriffsrechten und kein Fehler des
KDCs.Wenn Sie für einen Prinzipal unter
MIT-Kerberos
Tickets mit einer längeren Gültigkeit als
der vorgegebenen zehn Stunden einrichten wollen,
müssen Sie zwei Sachen ändern. Benutzen
Sie modify_principal am Prompt von
&man.kadmin.8;, um die maximale
Gültigkeitsdauer für den Prinzipal selbst und den
Prinzipal krbtgt
zu erhöhen. Das Prinzipal kann dann mit
kinit -l ein Ticket mit einer
längeren Gültigkeit beantragen.Mit einem Packet-Sniffer können Sie feststellen,
dass Sie sofort nach dem Aufruf von kinit
eine Antwort vom KDC
bekommen – noch bevor Sie überhaupt ein
Passwort eingegeben haben! Das ist in Ordnung:
Das KDC händigt
ein Ticket-Granting-Ticket (TGT)
auf Anfrage aus, da es durch einen vom Passwort
des Benutzers abgeleiteten Schlüssel
geschützt ist. Wenn das Passwort
eingegeben wird, wird es nicht zum KDC
gesendet, sondern zum Entschlüsseln der
Antwort des KDCs benutzt, die
kinit schon erhalten hat.
Wird die Antwort erfolgreich entschlüsselt,
erhält der Benutzer einen Sitzungs-Schlüssel
für die künftige verschlüsselte
Kommunikation mit dem KDC und das
TGT. Das TGT
wiederum ist mit dem Schlüssel des KDCs
verschlüsselt. Diese Verschlüsselung ist
für den Benutzer völlig transparent und
erlaubt dem KDC,
die Echtheit jedes einzelnen TGT
zu prüfen.Wenn Sie OpenSSH verwenden
und Tickets mir einer langen Gültigkeit benutzen, setzen
Sie in
/etc/ssh/sshd_config auf
no. Ansonsten werden die Tickets
gelöscht, wenn Sie sich abmelden.Host-Prinzipale können Tickets mit
längerer Gültigkeit besitzen. Wenn der
Prinzipal eines Benutzers über ein Ticket verfügt,
das eine Woche gültig ist, das Ticket des
Host-Prinzipals aber nur neun Stunden gültig ist,
funktioniert der Ticket-Cache nicht wie erwartet.
Im Cache befindet sich dann ein abgelaufenes Ticket
des Host-Prinzipals.Wenn Sie mit krb5.dict die
Verwendung schlechter Passwörter verhindern wollen, wie
in &man.kadmin.8; beschrieben, geht das nur mit
Prinzipalen, denen eine Passwort-Policy zugewiesen wurde.
Das Format von krb5.dict enthält pro
Zeile ein Wort. Sie können daher einen symbolischen Link
auf /usr/share/dict/words
erstellen.Beschränkungen von
KerberosKerberos5BeschränkungenKerberos muss ganzheitlich
verwendet werden. Jeder über das Netzwerk angebotene Dienst
muss mit Kerberos zusammenarbeiten
oder auf anderen Wegen gegen Angriffe aus dem Netzwerk
geschützt sein. Andernfalls können Berechtigungen gestohlen
und wiederverwendet werden. Es ist beispielsweise nicht
sinnvoll, für Remote-Shells
Kerberos zu benutzen, dagegen aber
POP3-Zugriff auf einem Mail-Server zu
erlauben, da POP3 Passwörter im Klartext
versendet.Kerberos ist für
Einbenutzer-Systeme gedacht. In Mehrbenutzer-Umgebungen ist
Kerberos unsicherer als in
Einbenutzer-Umgebungen, da die Tickets im für alle
lesbaren Verzeichnis /tmp gespeichert
werden. Wenn ein Rechner von mehreren Benutzern verwendet
wird, ist es möglich, dass Tickets von einem anderen Benutzer
gestohlen oder kopiert werden.Dieses Problem können Sie lösen, indem Sie mit
kinit -c oder besser mit der
Umgebungsvariablen KRB5CCNAME einen Ort für die
Tickets vorgeben. Es reicht, die Tickets im Heimatverzeichnis
eines Benutzers zu speichern und mit Zugriffsrechten zu
schützen.Das KDC ist verwundbar und muss daher
genauso abgesichert werden, wie die auf ihm befindliche
Passwort-Datenbank. Auf dem KDC sollten
absolut keine anderen Dienste laufen und der Rechner sollte
physikalisch gesichert sein. Die Gefahr ist groß, da
Kerberos alle Passwörter mit einem
Schlüssel, dem Haupt-Schlüssel, verschlüsselt. Der
Haupt-Schlüssel wiederum wird in einer Datei auf dem
KDC gespeichert.Ein kompromittierter Haupt-Schlüssel ist nicht
ganz so schlimm wie allgemein angenommen. Der
Haupt-Schlüssel wird nur zum Verschlüsseln
der Passwort-Datenbank und zum Initialisieren des
Zufallsgenerators verwendet. Solange der Zugriff
auf das KDC abgesichert ist, kann
ein Angreifer wenig mit dem Haupt-Schlüssel
anfangen.Wenn das KDC nicht zur Verfügung
steht, sind auch die Netzwerkdienste nicht benutzbar, da
eine Authentifizierung nicht durchgeführt werden kann.
Das KDC ist also ein optimales Ziel für
einen Denial-of-Service Angriff. Sie können diesem Angriff
entgegenwirken, indem Sie einen
KDC-Master und einen oder mehrere Slaves
verwenden. Der Rückfall auf ein sekundäres
KDC mittels
PAM-Authentifizierung muss sorgfältig
eingerichtet werden.Mit Kerberos können
sich Benutzer, Rechner und Dienste gegenseitig
authentifizieren. Allerdings existiert kein Mechanismus,
der das KDC gegenüber Benutzern,
Rechnern oder Diensten authentifiziert. Ein verändertes
kinit könnte beispielsweise alle
Benutzernamen und Passwörter abfangen. Die von veränderten
Programmen ausgehende Gefahr können Sie lindern, indem Sie
die Integrität von Dateien mit Werkzeugen wie
security/tripwire prüfen.Weiterführende DokumentationKerberos5weiterführende DokumentationThe
Kerberos FAQDesigning
an Authentication System: a Dialogue in Four
ScenesRFC 1510,
The Kerberos Network
Authentication Service (V5)MIT
Kerberos-SeiteHeimdal
Kerberos-SeiteOpenSSLTomRhodesBeigetragen von
-
SicherheitOpenSSLOpenSSL
- OpenSSL ist eine freie
+ OpenSSL ist eine Open Source
Implementierung der SSL und
TLS-Protokolle. Es bietet eine
verschlüsselte Transportschicht oberhalb der
normalen Kommunikationsschicht und kann daher zusammen
mit vielen Netzdiensten benutzt werden.
- Anwendungsbeispiele für OpenSSL
- sind die verschlüsselte Authentifizierung von
- E-Mail-Clients oder Web-Transaktionen wie das Bezahlen mit
- einer Kreditkarte. OpenSSL
- kann während des Baus in viele Ports, wie
- www/apache22 und
- mail/claws-mail,
- integriert werden.
-
-
- Ist beim Aufruf von make die
- Variable WITH_OPENSSL_BASE nicht
- explizit auf yes gesetzt, baut
- die Ports-Sammlung meist den Port
- security/openssl.
-
-
Das in &os; integrierte OpenSSL
stellt die Protokolle Secure Sockets Layer v2/v3 (SSLv2/SSLv3)
und Transport Layer Security v1 (TLSv1) zur Verfügung.
Die OpenSSL-Bibliotheken stellen
kryptographische Funktionen bereit.
-
- Mit OpenSSL kann der
- IDEA-Algorithmus verwendet werden,
- wegen Patenten in den USA ist der Algorithmus in der
- Voreinstellung allerdings deaktiviert. Wenn Sie die
- IDEA-Lizenz akzeptieren, können
- Sie den IDEA-Algorithmus aktivieren,
- indem Sie die Variable MAKE_IDEA
- in /etc/make.conf setzen.
-
+ Anwendungsbeispiele für OpenSSL
+ sind die verschlüsselte Authentifizierung von
+ E-Mail-Clients oder Web-Transaktionen wie das Bezahlen mit
+ Kreditkarte. Einige Ports, wie www/apache24
+ und databases/portgresql91-server, haben eine
+ Option für den Bau mit
+ OpenSSL.
- Meist wird OpenSSL eingesetzt,
+ &os; verfügt über zwei OpenSSL Versionen:
+ eine im Basissystem, die andere aus der Ports-Sammlung. Der
+ Benutzer kann mit Hilfe der folgenden Optionen wählen, welche
+ Version in der Voreinstellung für andere Ports verwendet
+ wird:
+
+
+
+ WITH_OPENSSL_PORT: wenn diese Option gesetzt ist, wird
+ der Port OpenSSL aus dem Port
+ security/openssl verwenden, auch dann,
+ wenn die Version im Basisystem aktueller ist.
+
+
+
+ WITH_OPENSSL_BASE: wenn diese Option gesetzt ist, wird
+ der Port mit OpenSSL aus dem
+ Basissystem übersetzt.
+
+
+
+ OpenSSL wird auch eingesetzt,
um Zertifikate für Anwendungen bereitzustellen. Die
Zertifikate stellen die Identität einer Firma oder
eines Einzelnen sicher. Wenn ein Zertifikat nicht von
einer Zertifizierungsstelle (Certificate
Authority, CA)
gegengezeichnet wurde, erhalten Sie normalerweise eine
Warnung. Eine Zertifizierungsstelle ist eine Firma
wie VeriSign,
die Zertifikate von Personen oder Firmen
gegenzeichnet und damit die Korrektheit der Zertifikate
bestätigt. Diese Prozedur kostet Geld, ist aber
keine Voraussetzung für den Einsatz von Zertifikaten,
beruhigt aber sicherheitsbewusste Benutzer.
+
+ Dieser Abschnitt beschreibt, wie Sie auf einem &os;-System
+ Zertifikate erstellen und benutzen.
+ beschreibt, wie Sie eine
+ CA erstellen um die eigenen Zertifikate zu
+ signieren.
+
+ Weitere Informationen über SSL finden Sie
+ im kostenlosen
+ OpenSSL Cookbook.Zertifikate erzeugenOpenSSLZertifikate erzeugenEin Zertifikat erzeugen Sie mit dem nachstehenden
Kommando:&prompt.root; openssl req -new -nodes -out req.pem -keyout cert.pem
Generating a 1024 bit RSA private key
................++++++
.......................................++++++
writing new private key to 'cert.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:PA
Locality Name (eg, city) []:Pittsburgh
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:Systems Administrator
Common Name (eg, YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Another NameBeachten Sie, dass die Eingabe bei
Common Name ein gültiger Domain-Name
sein muss. Eine andere Eingabe erzeugt ein unbrauchbares
Zertifikat. Das Zertifikat kann mit einer
Gültigkeitsdauer und anderen
Verschlüsselungsalgorithmen erzeugt werden.
&man.openssl.1; beschreibt die zur
Verfügung stehenden Optionen.Das Verzeichnis, in dem Sie den letzten Befehl ausgeführt
haben, enthält nun zwei Dateien: Die Anforderung für
ein neues Zertifikat wurde in req.pem
gespeichert. Diese Datei können Sie an eine
CA senden, wo die Angaben geprüft werden.
Nach erfolgreicher Prüfung wird das Zertifikat unterschrieben
und an Sie zurückgesandt. Die zweite Datei, cert.pem,
enthält den privaten Schlüssel für das Zertifikat
und darf auch keine Fall in fremde Hände geraten, da ein
Angreifer sonst in der Lage ist, anderen Personen oder Rechnern
vorzugaukeln, dass es sich bei ihm um Sie handelt.Wenn Sie keine Signatur einer Zertifizierungsstelle
benötigen, können Sie ein selbst-signiertes
Zertifikat erstellen. Erzeugen Sie dazu zuerst einen
RSA-Schlüssel:&prompt.root; openssl dsaparam -rand -genkey -out myRSA.key 1024Erzeugen Sie dann den CA-Schlüssel:&prompt.root; openssl gendsa -des3 -out myca.key myRSA.keyErstellen Sie mit diesem Schlüssel das
Zertifikat:&prompt.root; openssl req -new -x509 -days 365 -key myca.key -out new.crtZwei neue Dateien befinden sich nun im Verzeichnis:
Der Schlüssel der Zertifizierungsstelle
myca.key und das Zertifikat selbst,
new.crt. Sie sollten in einem
Verzeichnis, vorzugsweise unterhalb von
/etc/ssl abgelegt
werden, das nur von root lesbar
ist. Die Zugriffsrechte der Dateien können mit &man.chmod.1;
auf 0700 gesetzt werden.Zertifikate benutzenMit einem Zertifikat können beispielsweise die
Verbindungen zu Sendmail
verschlüsselt werden, um eine Klartext-Authentifizierung
zu verhindern.Einige E-Mail-Programme geben Warnungen aus, wenn ein
Zertifikat nicht lokal installiert ist. Weitere
Informationen zur Installation von Zertifikaten finden Sie
in der Dokumentation der entsprechenden Software.Ergänzen Sie die Konfigurationsdatei von
Sendmail (.mc)
um die nachstehenden Zeilen:dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnlIm Verzeichnis /etc/certs befindet
sich der Schlüssel und das Zertifikat. Bauen Sie danach im
Verzeichnis /etc/mail
mit dem Kommando make install die
.cf-Datei. Starten Sie anschließend
Sendmail mit
make restart neu.Wenn alles gut ging, erscheinen keine Fehlermeldungen
in /var/log/maillog und
Sie sehen Sendmail in der
Prozessliste.Testen Sie nun den Mailserver mit &man.telnet.1;:&prompt.root; telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.Wenn die Zeile STARTTLS
erscheint, hat alles funktioniert.VPN mit IPsecNikClaytonnik@FreeBSD.orgGeschrieben von IPsecIPsec GrundlagenHiten M.Pandyahmp@FreeBSD.orgGeschrieben von Dieser Abschnitt beschreibt die Einrichtung von IPsec. Um
IPsec einzurichten, sollten Sie einen neuen Kernel bauen können (siehe
).IPsec ist ein Protokoll, das auf dem
Internet-Protokoll (IP) aufbaut. Mit IPsec
können mehrere Systeme geschützt miteinander kommunizieren. Das in
&os; realisierte IPsec-Protokoll baut auf der KAME-Implementierung
auf und unterstützt sowohl IPv4 als auch IPv6.IPsecESPIPsecAHIPsec besteht wiederum aus zwei Protokollen:Encapsulated Security Payload
(ESP) verschlüsselt
IP-Pakete mit einem symmetrischen Verfahren wie Blowfish
oder 3DES. Damit werden die Pakete vor Manipulationen
Dritter geschützt.Der Authentication Header
(AH) enthält eine
kryptographische Prüfsumme, die sicher stellt, dass ein
IP-Paket nicht verändert wurde. Der Authentication-Header
folgt nach dem normalen IP-Header und erlaubt dem Empfänger
eines IP-Paketes, dessen Integrität zu
prüfen.ESP und AH
können, je nach Situation, zusammen oder einzeln
verwendet werden.VPNVirtual Private NetworkVPNIPsec kann in zwei Modi betrieben werden: Der
Transport-Modus verschlüsselt
die Daten zwischen zwei Systemen. Der
Tunnel-Modus verbindet zwei
Subnetze miteinander. Durch einen Tunnel können
dann beispielsweise verschlüsselte Daten übertragen
werden. Ein Tunnel wird auch als
Virtual-Private-Network
(VPN) bezeichnet. Detaillierte
Informationen über das IPsec-Subsystem von &os; finden Sie in
&man.ipsec.4;.Die folgenden Optionen in der Kernelkonfiguration
aktivieren IPsec:KerneloptionIPSECoptions IPSEC #IP security
device cryptoKerneloptionIPSEC_DEBUGWenn Sie zur Fehlersuche im IPsec-Subsystem
Unterstützung wünschen, sollten Sie die
folgende Option ebenfalls aktivieren:options IPSEC_DEBUG #debug for IP securityVPN zwischen einem Heim- und Firmennetzwerk
einrichtenVPNeinrichtenEs gibt keinen Standard, der festlegt, was ein
Virtual-Private-Network ist. VPNs können mit
verschiedenen Techniken, die jeweils eigene Vor- und
Nachteile besitzen, implementiert werden.
Dieser Abschnitt stellt Möglichkeiten vor, um ein VPN
für das folgende Szenario aufzubauen:Es müssen mindestens zwei Netzwerke vorhanden sein,
welche intern IP benutzen.Beide Netzwerke sind über ein &os;-Gateway
mit dem Internet verbunden.Der Gateway jedes Netzwerks besitzt mindestens
eine öffentliche IP-Adresse.Die intern verwendeten IP-Adressen können
private oder öffentliche Adressen sein.
Sie dürfen sich jedoch nicht überlappen. Zum Beispiel
sollten nicht beide Netze 192.168.1.x
benutzen.Konfiguration von IPsec in &os;TomRhodestrhodes@FreeBSD.orgGeschrieben von Als erstes muss security/ipsec-tools
aus der Ports-Sammlung installiert werden. Diese Software
enthält einige Anwendungen, die bei der Konfiguration von
IPsec hilfreich sind.Als nächstes müssen zwei &man.gif.4;-Pseudogeräte
angelegt werden, um die Pakete zu tunneln und dafür zu sorgen,
dass beide Netzwerke richtig miteinander kommunizieren können.
Geben Sie als root
die folgenden Befehle ein, wobei Sie
intern und
extern durch die realen internen
und externen IP-Adressen der Gateways
ersetzen müssen:&prompt.root; ifconfig gif0 create&prompt.root; ifconfig gif0 intern1 intern2&prompt.root; ifconfig gif0 tunnel extern1 extern2In diesem Beispiel ist die externe
IP-Adresse des Firmennetzwerkes
(LAN) 172.16.5.4 und die interne
IP-Adresse ist 10.246.38.1. Das
Heimnetzwerk (LAN) hat die externe
IP-Adresse 192.168.1.12 mit der internen
privaten IP-Adresse 10.0.0.5.Wenn dies verwirrend erscheint, schauen Sie sich die
folgende Ausgabe von &man.ifconfig.8;an:Gateway 1:
gif0: flags=8051 mtu 1280
tunnel inet 172.16.5.4 --> 192.168.1.12
inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6
inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00
Gateway 2:
gif0: flags=8051 mtu 1280
tunnel inet 192.168.1.12 --> 172.16.5.4
inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00
inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4Wenn Sie fertig sind, sollten beide internen Adressen über
&man.ping.8; erreichbar sein:priv-net# ping 10.0.0.5
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms
corp-net# ping 10.246.38.1
PING 10.246.38.1 (10.246.38.1): 56 data bytes
64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms
64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms
64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms
64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms
64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms
--- 10.246.38.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 msWie erwartet, können nun beiden Seiten
ICMP-Pakete von ihren privaten Adressen
senden und empfangen. Als nächstes müssen beide
Gateways so konfiguriert werden, dass sie die Pakete des anderen
Netzwerkes richtig routen. Mit dem folgenden Befehl
erreicht man das Ziel:&prompt.root; corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0&prompt.root; corp-net# route add net 10.0.0.0: gateway 10.0.0.5&prompt.root; priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0&prompt.root; priv-net# route add host 10.246.38.0: gateway 10.246.38.1Ab jetzt sollten die Rechner von den Gateways sowie von
den Rechnern hinter den Gateways erreichbar sein. Dies können
Sie wieder mit &man.ping.8; überprüfen:corp-net# ping 10.0.0.8
PING 10.0.0.8 (10.0.0.8): 56 data bytes
64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms
64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms
64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms
64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms
64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms
--- 10.0.0.8 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms
priv-net# ping 10.246.38.107
PING 10.246.38.1 (10.246.38.107): 56 data bytes
64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms
64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms
64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms
64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms
64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms
--- 10.246.38.107 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 msDas Konfigurieren der Tunnel ist der einfache Teil. Die
Konfiguration einer sicheren Verbindung geht viel mehr in
die Tiefe. Die folgende Konfiguration benutzt pre-shared
(PSK) RSA-Schlüssel.
Abgesehen von den IP-Adressen, sind beide
/usr/local/etc/racoon/racoon.conf
identisch und sehen ähnlich aus:path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #location of pre-shared key file
log debug; #log verbosity setting: set to 'notify' when testing and debugging is complete
padding # options are not to be changed
{
maximum_length 20;
randomize off;
strict_check off;
exclusive_tail off;
}
timer # timing options. change as needed
{
counter 5;
interval 20 sec;
persend 1;
# natt_keepalive 15 sec;
phase1 30 sec;
phase2 15 sec;
}
listen # address [port] that racoon will listen on
{
isakmp 172.16.5.4 [500];
isakmp_natt 172.16.5.4 [4500];
}
remote 192.168.1.12 [500]
{
exchange_mode main,aggressive;
doi ipsec_doi;
situation identity_only;
my_identifier address 172.16.5.4;
peers_identifier address 192.168.1.12;
lifetime time 8 hour;
passive off;
proposal_check obey;
# nat_traversal off;
generate_policy off;
proposal {
encryption_algorithm blowfish;
hash_algorithm md5;
authentication_method pre_shared_key;
lifetime time 30 sec;
dh_group 1;
}
}
sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # address $network/$netmask $type address $network/$netmask $type ( $type being any or esp)
{ # $network must be the two internal networks you are joining.
pfs_group 1;
lifetime time 36000 sec;
encryption_algorithm blowfish,3des,des;
authentication_algorithm hmac_md5,hmac_sha1;
compression_algorithm deflate;
}Eine Beschreibung der verfügbaren Optionen finden Sie in
der Manualpage von racoon.conf.Die
Security Policy Database
(SPD) muss noch konfiguriert werden, so
dass &os; und racoon in der
Lage sind den Netzwerkverkehr zwischen den Hosts zu ver-
und entschlüsseln.Dies wird durch ein Shellskript ähnlich wie das
folgende, das auf dem Firmennetzwerk-Gateway liegt,
ausgeführt. Diese Datei wird während der
Systeminitialisierung ausgeführt und sollte unter
/usr/local/etc/racoon/setkey.conf
gespeichert werden.flush;
spdflush;
# To the home network
spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use;
spdadd 10.0.0.0/24 10.246.38.0/24 any -P in ipsec esp/tunnel/192.168.1.12-172.16.5.4/use;Einmal abgespeichert, kann racoon
durch das folgende Kommando auf beiden Gateways gestartet
werden:&prompt.root; /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.logDie Ausgabe sollte so ähnlich aussehen:corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf
Foreground mode.
2006-01-30 01:35:47: INFO: begin Identity Protection mode.
2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon
2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a
2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2)
2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=47784998(0x2d92426)
2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0]
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b)
2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66)Um sicherzustellen, dass der Tunnel richtig funktioniert,
wechseln Sie auf eine andere Konsole und benutzen Sie
&man.tcpdump.1; mit dem folgenden Befehl, um sich den
Netzwerkverkehr anzusehen. Tauschen Sie
em0 durch die richtige Netzwerkkarte
aus:&prompt.root; tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12Die Ausgabe der Konsole sollte dem hier ähneln. Wenn
nicht, gibt es ein Problem und ein Debuggen der ausgegebenen
Daten ist notwendig.01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa)
01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb)
01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc)An diesem Punkt sollten beide Netzwerke verfügbar sein und
den Anschein haben, dass sie zum selben Netzwerk gehören.
Meistens sind beide Netzwerke durch eine Firewall geschützt.
Um den Netzwerkverkehr zwischen den beiden Netzwerken zu erlauben,
ist es notwendig Regeln zu erstellen. Für die &man.ipfw.8;
Firewall fügen Sie folgende Zeilen in die
Firewall-Konfigurationsdatei ein:ipfw add 00201 allow log esp from any to any
ipfw add 00202 allow log ah from any to any
ipfw add 00203 allow log ipencap from any to any
ipfw add 00204 allow log udp from any 500 to anyDie Regelnummern müssen eventuell, je nach ihrer
Hostkonfiguration, angepasst werden.Für Benutzer der &man.pf.4;- oder &man.ipf.8;-Firewall
sollte folgendes funktionieren:pass in quick proto esp from any to any
pass in quick proto ah from any to any
pass in quick proto ipencap from any to any
pass in quick proto udp from any port = 500 to any port = 500
pass in quick on gif0 from any to any
pass out quick proto esp from any to any
pass out quick proto ah from any to any
pass out quick proto ipencap from any to any
pass out quick proto udp from any port = 500 to any port = 500
pass out quick on gif0 from any to anyZum Ende, um dem Computer den Start vom
VPN während der Systeminitialisierung
zu erlauben, fügen Sie folgende Zeilen in ihre
/etc/rc.conf: einipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/setkey.conf" # allows setting up spd policies on boot
racoon_enable="yes"OpenSSHChernLeeBeigetragen von OpenSSHSicherheitOpenSSHOpenSSH stellt Werkzeuge bereit,
um sicher auf entfernte Maschinen zuzugreifen. Zusätzlich
können TCP/IP-Verbindungen sicher durch
SSH getunnelt oder weitergeleitet werden.
OpenSSH verschlüsselt alle
Verbindungen. Dadurch wird beispielsweise verhindert, dass die
Verbindung abgehört oder übernommen
(Hijacking) werden kann. Weitere
Informationen zu OpenSSH finden Sie
auf
http://www.openssh.com/.Dieser Abschnitt enthält einen Überblick über die
integrierten Client-Werkzeuge, mit denen Sie sicher auf
entfernte Systeme zugreifen können, oder mit denen Sie sicher
Dateien austauschen können. Der Abschnitt beschreibt auch die
Konfiguration eines SSH-Servers auf einem
&os;-System. Weitere Informationen finden Sie in den hier
erwähnten Manualpages.Die SSH Client-Werkzeuge benutzenOpenSSHClientBenutzen Sie ssh zusammen mit einem
Benutzernamen und einer IP-Adresse oder dem
Hostnamen, um sich an einem SSH-Server
anzumelden. Ist dies das erste Mal, dass eine Verbindung mit
dem angegebenen Server hergestellt wird, wird der Benutzer
aufgefordert, zuerst den Fingerabdruck des Servers zu
prüfen:&prompt.root; ssh user@example.com
The authenticity of host 'example.com (10.0.0.1)' can't be established.
ECDSA key fingerprint is 25:cc:73:b5:b3:96:75:3d:56:19:49:d2:5c:1f:91:3b.
Are you sure you want to continue connecting (yes/no)? yes
Permanently added 'example.com' (ECDSA) to the list of known hosts.
Password for user@example.com: user_passwordSSH speichert einen Fingerabdruck des
Serverschlüssels um die Echtheit des Servers zu überprüfen,
wenn der Client eine Verbindung herstellt. Wenn der Benutzer
den Fingerabdruck mit yes bestätigt, wird
eine Kopie des Schlüssels in
.ssh/known_hosts im Heimatverzeichnis des
Benutzers gespeichert. Zukünftige Verbindungen zu dem Server
werden gegen den gespeicherten Fingerabdruck des Schlüssels
geprüft und der Client gibt eine Warnung aus, wenn sich der
empfangene Fingerabdruck von dem gespeicherten unterscheidet.
Wenn dies passiert, sollte zunächst geprüft werden, ob sich
der Schlüssel geändert hat, bevor die Verbindung hergestellt
wird.In der Voreinstellung akzeptieren aktuelle Versionen von
OpenSSH; nur
SSHv2 Verbindungen. Wenn möglich, wird der
Client versuchen Version 2 zu verwenden, ist dies nicht
möglich, fällt er auf Version 1 zurück. Der Client kann
gezwungen werden, nur eine der beiden Versionen zu verwenden,
indem die Option oder
übergeben wird. Weitere Optionen sind in &man.ssh.1;
beschrieben.OpenSSHsecure copy&man.scp.1;Mit &man.scp.1; lassen sich Dateien in einer sicheren
Weise auf entfernte Maschinen übertragen. Dieses Beispiel
kopiert die Datei COPYRIGHT von einem
entfernten System in eine Datei mit dem gleichen Namen auf
das lokale System:&prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT
Password for user@example.com: *******
COPYRIGHT 100% |*****************************| 4735
00:00
&prompt.root;Da der Fingerabdruck für diesen Rechner bereits bestätigt
wurde, wird er automatisch überprüft, bevor der Benutzer zur
Eingabe des Passworts aufgefordert wird.Die Argumente, die scp übergeben
werden, gleichen denen von cp in der
Beziehung, dass die ersten Argumente die zu kopierenden
Dateien sind und das letzte Argument den Bestimmungsort
angibt. Da die Dateien über das Netzwerk kopiert werden,
können ein oder mehrere Argumente die Form
besitzen. Beachten Sie, das scp die
Option verwendet um Dateien rekursiv
zu kopieren, während cp
benutzt.Mit sftp können Dateien über eine
interaktive Sitzung kopiert werden. &man.sftp.1; beschreibt
die verfügbaren Befehle, die während einer
sftp-Sitzung zur Verfügung stehen.Schlüsselbasierte AuthentifizierungEin Client kann bei der Verbindung auch Schlüssel
anstelle von Passwörtern verwenden. Mit
ssh-keygen können DSA-
oder RSA-Schlüssel erzeugt werden. Geben
Sie das entsprechende Protokoll an, wenn Sie einen
öffentlichen und einen privaten Schlüssel erzeugen. Folgen
Sie anschließend den Anweisungen des Programms. Es wird
empfohlen, die Schlüssel mit einer einprägsamen, aber schwer
zu erratenen Passphrase zu schützen.&prompt.user; ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_dsa):
Created directory '/home/user/.ssh'.
Enter passphrase (empty for no passphrase): type some passphrase here which can contain spaces
Enter same passphrase again: type some passphrase here which can contain spaces
Your identification has been saved in /home/user/.ssh/id_dsa.
Your public key has been saved in /home/user/.ssh/id_dsa.pub.
The key fingerprint is:
bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.comAbhängig vom verwendeten Protokoll wird der private
Schlüssel in ~/.ssh/id_dsa (oder
~/.ssh/id_rsa) und der öffentliche
Schlüssel in ~/.ssh/id_dsa.pub (oder
~/.ssh/id_rsa.pub) gespeichert. Der
öffentliche Schlüssel muss zuerst auf
den entfernten Rechner nach
~/.ssh/authorized_keys kopiert werden,
damit die schlüsselbasierte Authentifizierung
funktioniert.Viele Benutzer denken, dass die Verwendung von
Schlüsseln generell sicher ist. Sie verwenden dann einen
Schlüssel ohne eine Passphrase. Dies ist jedoch sehr
gefährlich. Ein Administrator kann
überprüfen, ob ein Schlüsselpaar mit einer Passphrase
geschützt ist. Wenn die Datei mit dem privaten Schlüssel
den Text ENCRYPTED enthält, dann hat
der Benutzer eine Passphrase verwendet. Um die Benutzer
zusätzlich zu schützen, kann ein
from-Feld in der Datei des öffentlichen
Schlüssels hinzugefügt werden. Zum Beispiel würde das
Hinzufügen von from="192.168.10.5" vor
dem ssh-rsa- oder
ssh-dsa-Präfix dafür sorgen, dass sich
ein bestimmter Benutzer nur noch von dieser
IP-Adresse anmelden darf.Die Optionen und Dateinamen sind
abhängig von der OpenSSH-Version.
Die für das System gültigen Optionen finden Sie in
&man.ssh-keygen.1;.Wenn bei der Erzeugung des Schlüssels eine Passphrase
angegeben wurde, wird der Benutzer bei jeder Anmeldung am
Server zur Eingabe der Passphrase aufgefordert. Mit
&man.ssh-agent.1; und &man.ssh-add.1; ist es möglich,
SSH-Schlüssel in den Speicher zu
laden, damit die Passphrase nicht jedes Mal eingegeben werden
muss.ssh-agent übernimmt die
Authentifizierung mit den geladenen privaten Schlüsseln.
ssh-agent sollte nur dazu verwendet werden,
ein anderes Programm zu starten, beispielsweise eine Shell
oder einen Window-Manager.Um ssh-agent in einer Shell zu
verwenden, muss es mit einer Shell als Argument aufgerufen
werden. Zudem muss die zu verwaltende Identität mit
ssh-add sowie deren Passphrase für den
privaten Schlüssel übergeben werden. Nachdem dies erledigt
ist, kann sich ein Benutzer mit ssh auf
jedem Rechner anmelden, der einen entsprechenden öffentlichen
Schlüssel besitzt. Dazu ein Beispiel:&prompt.user; ssh-agent csh
&prompt.user; ssh-add
Enter passphrase for /usr/home/user/.ssh/id_dsa: type passphrase here
Identity added: /usr/home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa)
&prompt.user;Um ssh-agent unter
&xorg; zu verwenden, muss ein
Eintrag für das Programm in ~/.xinitrc
aufgenommen werden. Dadurch können alle unter
&xorg; gestarteten Programme die
Dienste von ssh-agent nutzen.
~/.xinitrc könnte etwa so
aussehen:exec ssh-agent startxfce4Dadurch wird bei jedem Start von
&xorg; zuerst
ssh-agent aufgerufen, das wiederum
XFCE startet. Nachdem diese
Änderung durchgeführt wurde, muss
&xorg; neu gestartet werden.
Danach können Sie mit ssh-add die
SSH-Schlüssel laden.SSH-TunnelOpenSSHTunnelMit OpenSSH ist es möglich,
einen Tunnel zu erstellen, in dem ein anderes Protokoll
verschlüsselt übertragen wird.Im folgenden Kommando erzeugt ssh einen
Tunnel für telnet:&prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com
&prompt.user;Dieses Beispiel verwendet die folgenden Optionen:Zwingt ssh dazu, die Version 2
des Protokolls zu verwenden, um sich mit dem Server zu
verbinden.Zeigt an, dass ein Tunnel erstellt werden soll.
Ohne diese Option würde ssh eine
normale Sitzung öffnen.Zwingt ssh im Hintergrund zu
laufen.Ein lokaler Tunnel wird in der Form
localport:remotehost:remoteport
angegeben. Die Verbindung wird dabei von dem lokalen Port
localport auf einen entfernten
Rechner weitergeleitet.Gibt den Anmeldenamen auf dem entfernten
SSH-Server an.Ein SSH-Tunnel erzeugt einen Socket
auf localhost und dem angegebenen
lokalen Port. Jede Verbindung, die auf dem angegebenen
Socket aufgemacht wird, wird dann auf den spezifizierten
entfernten Rechner und Port weitergeleitet. Im Beispiel wird
der lokale Port 5023 an die entfernte
Maschine auf Port 23 weitergeleitet. Da
der Port 23 für telnet reserviert ist,
erzeugt das eine sichere &man.telnet.1;-Verbindung durch
einen SSH-Tunnel.Wie in den folgenden Beispielen zu sehen ist, kann diese
Vorgehensweise genutzt werden, um jedes unsichere
TCP-Protokoll, wie
SMTP, POP3 und
FTP, weiterzuleiten.Einen sicheren Tunnel für SMTP
erstellen&prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com
user@mailserver.example.com's password: *****
&prompt.user; telnet localhost 5025
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailserver.example.com ESMTPZusammen mit ssh-keygen und
zusätzlichen Benutzer-Accounts können leicht benutzbare
SSH-Tunnel aufgebaut werden. Anstelle
von Passwörtern können Schlüssel benutzt werden und jeder
Tunnel kann unter einem eigenen Benutzer laufen.Sicherer Zugriff auf einen
POP3-ServerIn diesem Beispiel gibt es einen
SSH-Server, der Verbindungen von außen
akzeptiert. Im selben Netzwerk befindet sich zudem
noch ein Mail-Server, der POP3 spricht.
Um E-Mails auf sichere Weise abzurufen, bauen Sie eine
SSH-Verbindung zu dem
SSH-Server im Netzwerk auf und tunneln
von dort zum Mail-Server weiter.&prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com
user@ssh-server.example.com's password: ******Wenn Sie den Tunnel eingerichtet haben, konfigurieren
Sie den Mail-Client so, dass er POP3
Anfragen zu localhost auf Port
2110 sendet. Diese Verbindung wird dann über den
gesicherten Tunnel zu
mail.example.com
weitergeleitet.Umgehen einer FirewallEinige Firewalls filtern sowohl eingehende als auch
ausgehende Verbindungen. Zum Beispiel könnte eine
Firewall den Zugriff auf entfernte Rechner auf die Ports
22 und 80 beschränken, um lediglich SSH
und Web-Inhalte zu erlauben. Dies würde den Zugriff auf
Dienste verhindern, die nicht die Ports 22 oder 80
benutzen.Die Lösung hier ist es, eine
SSH-Verbindung zu einer Maschine
außerhalb der Firewall aufzumachen und durch diese zum
gewünschten Dienst zu tunneln:&prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org
user@unfirewalled-system.example.org's password: *******In diesem Beispiel benutzt ein Ogg Vorbis Client
localhost und Port 8888. Die
Verbindung wird dann zu
music.example.com Port 8000
weitergeleitet. Die Firewall wurde somit erfolgreich
umgangen.Den SSH-Server aktivierenOpenSSHaktivierenNeben den integrierten
SSH Client-Werkzeugen, die zur Verfügung
stehen, kann ein &os;-System auch als
SSH-Server konfiguriert werden, um
Verbindungen von anderen SSH-Clients zu
akzeptieren.Benutzen Sie den Kommando &man.service.8;, um zu prüfen
ob der sshd ausgeführt wird:&prompt.root; service sshd statusWenn der Dienst nicht ausgeführt wird, fügen Sie folgende
Zeile in /etc/rc.conf ein:sshd_enable="YES"Diese Zeile startet sshd, den
OpenSSH-Daemon, beim nächsten
Systemstart. Geben Sie folgendes ein, um den Dienst jetzt
zu starten:&prompt.root; service sshd startWenn sshd erstmalig gestartet wird,
werden die Host-Schlüssel des Systems erzeugt und der
Fingerabdruck wird auf der Konsole angezeigt. Stellen Sie den
Fingerabdruck den Benutzern zur Verfügung, sodass sie ihn
überprüfen können, wenn sie das erste Mal eine Verbindung mit
dem Server herstellen.&man.sshd.8; enthält die verfügbaren Optionen für den
Start von sshd und weitere Informationen
zur Authentifizierung, den Anmeldeprozess und die
verschiedenen Konfigurationsdateien.Es ist in der Regel ein gute Idee, festzulegen, welche
Benutzer sich von welchem Rechner aus anmelden können.
Dies lässt sich beispielsweise über die Option
AllowUsers festlegen. Soll sich etwa
nur root vom Rechner
mit der IP-Adresse 192.168.1.32 aus einwählen
dürfen, würden Sie folgenden Eintrag in
/etc/ssh/sshd_config aufnehmen:AllowUsers root@192.168.1.32Damit sich admin
von jedem Rechner aus anmelden kann, geben Sie nur den
Benutzernamen an:AllowUsers adminSie können auch mehrere Benutzer in einer Zeile
aufführen:AllowUsers root@192.168.1.32 adminNachdem Sie /etc/ssh/sshd_config
angepasst haben, muss sshd seine
Konfigurationsdateien neu einlesen. Dazu geben Sie Folgendes
ein:&prompt.root; /etc/rc.d/sshd reloadWenn die Option AllowUsers verwendet
wird, ist es wichtig, jeden Benutzer aufzulisten, der sich
an diesem Rechner anmelden muss. Benutzer, die nicht in
dieser Liste aufgeführt sind, dürfen sich nicht anmelden.
Die Optionen für die Konfigurationsdatei von
OpenSSH unterscheiden zwischen
Groß- und Kleinschreibung. Wenn Sie eine Option falsch
schreiben, so wird sie ingnoriert. Testen Sie immer
die Änderungen, um sicherzustellen, dass sie wie erwartet
funktionieren. Weitere Informationen zu den verfügbaren
Optionen finden Sie in &man.sshd.config.5;.Verwechseln Sie nicht
/etc/ssh/sshd_config mit
/etc/ssh/ssh_config (beachten Sie das
zusätzliche d im ersten Dateinamen). Die
erste Datei konfiguriert den Server und die zweite Datei
konfiguriert den Client. &man.ssh.config.5; enthält eine
Auflistung der verfügbaren Client-Einstellungen.Zugriffskontrolllisten für Dateisysteme
(ACL)TomRhodesBeigetragen von ACLZugriffskontrolllisten
(Access Control Lists,
ACL) erweitern die normalen Zugriffsrechte
von &unix; Systemen auf eine kompatible (&posix;.1e) Weise
und bieten feiner granulierte Sicherheitsmechanismen.Der GENERIC-Kernel von &os; bietet
ACL-Unterstützung für
UFS-Dateisysteme. Benutzer, die es vorziehen
einen eigenen Kernel zu übersetzen, müssen die folgende Option
in die Kernelkonfigurationsdatei aufnehmen:options UFS_ACLDas System gibt eine Warnung aus, wenn ein Dateisystem mit
ACLs eingehangen werden soll und die
Unterstützung für ACLs nicht im Kernel
aktiviert ist. ACLs bauen auf den
erweiterten Attributen auf, die von UFS2
standardmäßig unterstützt werden.Dieses Kapitel beschreibt, wie
ACL-Unterstützung aktiviert wird. Zudem
werden einige Anwendungsbeispiele vorgestellt.ACL-Unterstützung aktivierenDie Option in
/etc/fstab aktiviert Zugriffskontrolllisten
für ein Dateisystem. Die bevorzugte Möglichkeit ist
die Verwendung von Zugriffskontrolllisten mit &man.tunefs.8; (Option
), im Superblock des Dateisystems festzuschreiben.
Diese Möglichkeit hat mehrere Vorteile:Nochmaliges Einhängen eines Dateisystems (Option
von &man.mount.8;) verändert den Status
der Zugriffskontrolllisten nicht. Die Verwendung von
Zugriffskontrolllisten kann nur durch Abhängen und erneutes
Einhängen eines Dateisystems verändert werden. Das
heißt auch, dass Zugriffskontrolllisten nicht
nachträglich auf dem Root-Dateisystem aktiviert werden
können.Die Zugriffskontrolllisten auf den Dateisystemen sind,
unabhängig von den Optionen in /etc/fstab
oder Namensänderungen der Geräte, immer aktiv. Dies
verhindert auch, dass Zugriffskontrolllisten aus Versehen
auf Dateisystemen ohne Zugriffskontrolllisten aktiviert
werden.Es kann sein, dass sich der Status von Zugriffskontrolllisten
später durch nochmaliges Einhängen des Dateisystems
(Option von &man.mount.8;) ändern
lässt. Die momentane Variante ist aber sicherer, da der
Status der Zugriffskontrolllisten nicht versehentlich geändert
werden kann. Allgemein sollten Zugriffskontrolllisten auf einem
Dateisystem, auf dem sie einmal verwendet wurden, nicht deaktiviert
werden, da danach die Zugriffsrechte falsch sein können.
Werden Zugriffskontrolllisten auf einem solchen Dateisystem wieder
aktiviert, werden die Zugriffsrechte von Dateien, die sich
zwischenzeitlich geändert haben, überschrieben, was zu
erneuten Problemen führt.Die Zugriffsrechte einer Datei werden durch ein
+ (Plus) gekennzeichnet, wenn die Datei durch
Zugriffskontrolllisten geschützt ist:drwx------ 2 robert robert 512 Dec 27 11:54 private
drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1
drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2
drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3
drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_htmlIn diesem Beispiel sind die Verzeichnisse
directory1, directory2
und directory3 durch Zugriffskontrolllisten
geschützt, wohingegen das Verzeichnis
public_html nicht geschützt ist.Zugriffskontrolllisten benutzengetfacl zeigt Zugriffskontrolllisten
an. Das folgende Kommando zeigt die ACLs
auf der Datei test:&prompt.user; getfacl test
#file:test
#owner:1001
#group:1001
user::rw-
group::r--
other::r--setfacl ändert oder entfernt
ACLs auf Dateien. Um alle
ACLs einer Datei zu entfernen, können Sie
die Option benutzen. Es ist jedoch
empfehlenswert die Option zu verwenden, da
sie die erforderlichen Felder, die für ACLs
benötigt werden, beibehält.&prompt.root; setfacl -k testBenutzen Sie um die Einträge der
ACL zu verändern:&prompt.user; setfacl -m u:trhodes:rwx,g:web:r--,o::--- testIn diesem Beispiel gab es keine vordefinierten Einträge,
da sie durch den vorhergehenden Befehl entfernt wurden.
Mit diesem Kommando werden die eben entfernten
Zugriffskontrolllisten wiederhergestellt. Der Befehl gibt die
Fehlermeldung Invalid argument aus,
wenn Sie nicht existierende Benutzer oder Gruppen als
Parameter angeben.Weitere Informationen zu den Optionen dieser Kommandos
finden Sie in &man.getfacl.1; und &man.setfacl.1;.Sicherheitsprobleme in Software Dritter überwachenTomRhodesBeigetragen von portauditIn den letzten Jahren wurden zahlreiche Verbesserungen in
der Einschätzung und dem Umgang mit Sicherheitsproblemen
erzielt. Die Gefahr von Einbrüchen in ein System wird
aber immer größer, da Softwarepakete von Dritten
auf nahezu jedem Betriebssystem installiert und konfiguriert
werden.Die Einschätzung der Verletzlichkeit eines Systems ist
ein Schlüsselfaktor für dessen Sicherheit. &os;
veröffentlicht zwar Sicherheitshinweise
(security advisories) für
das Basissystem, das Projekt ist allerdings nicht dazu in der
Lage, dies auch für die zahlreichen Softwarepakete von
Dritten zu tun. Dennoch gibt es einen Weg, auch diese
Programmpakete zu überwachen. Das in der Ports-Sammlung
enthaltene Programm portaudit wurde
gezielt dafür entwickelt.Der Port ports-mgmt/portaudit
fragt dazu eine Datenbank, die vom &os; Security Team sowie
den Ports-Entwicklern aktualisiert und gewartet wird, auf
bekannte Sicherheitsprobleme ab.Bevor Sie portaudit verwenden
können, müssen Sie es über die Ports-Sammlung
installieren:&prompt.root; cd /usr/ports/security/portaudit && make install cleanWährend der Installation werden die
Konfigurationsdateien für &man.periodic.8; aktualisiert, was
es portaudit erlaubt, seine Ausgabe
in den täglichen Sicherheitsbericht einzufügen.
Stellen Sie auf jeden Fall sicher, dass diese (an das
E-Mail-Konto von root gesendeten)
Sicherheitsberichte auch gelesen werden. An dieser Stelle
ist keine weitere Konfiguration nötig.Nach der Installation kann ein Administrator die unter
/var/db/portaudit lokal
gespeicherte Datenbank aktualisieren und sich danach durch
folgenden Befehl über mögliche Sicherheitslücken
der von ihm installierten Softwarepakete informieren:&prompt.root; portaudit -FdaDie Datenbank wird automatisch aktualisiert, wenn
&man.periodic.8; ausgeführt wird. Der eben genannte
Befehl ist daher optional, er wird aber für das
folgende Beispiel benötigt.Nach erfolgter Installation der Datenbank kann ein
Administrator über die Ports-Sammlung installierte
Softwarepakete Dritter jederzeit überprüfen. Dazu
muss er lediglich folgenden Befehl eingeben:&prompt.root; portaudit -aExistiert in Ihren installierten Softwarepaketen eine
Sicherheitslücke, wird portaudit
eine Ausgabe ähnlich der folgenden produzieren:Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html>
1 problem(s) in your installed packages found.
You are advised to update or deinstall the affected package(s) immediately.Wenn Sie die angegebene URL über einen
Internetbrowser aufrufen, erhalten Sie weitere Informationen
über die bestehende Sicherheitslücke, wie die betroffenen
Versionen, die Version des &os;-Ports sowie Hinweise auf weitere
Seiten, die ebenfalls Sicherheitshinweise zu diesem Problem
bieten.Portaudit ist ein mächtiges
Werkzeug und insbesondere in Zusammenarbeit mit dem
Port Portupgrade äußerst
hilfreich.&os; SicherheitshinweiseTomRhodesBeigesteuert von &os; SicherheitshinweiseWie viele andere Hersteller von hochwertigen
Betriebssystemen, hat auch das &os;-Projekt ein Sicherheitsteam,
das für die Bestimmung des End-of-Life (EoL)
Datum verantwortlich ist. Das Sicherheitsteam stellt zudem
sicher, dass Sicherheitsupdates für unterstützte Versionen,
welche noch nicht ihr EoL erreicht haben, zur
Verfügung gestellt werden. Weitere Informationen über das &os;
Sicherheitsteam und den unterstützten Versionen finden Sie auf
der Webseite &os; Security.Zu den Aufgaben des Sicherheitsteams zählt es, auf gemeldete
Sicherheitslücken im &os;-Betriebssystem zu reagieren. Sobald
eine Sicherheitslücke bestätigt wird, überprüft das
Sicherheitsteam die notwendigen Schritte, um die Schwachstelle
zu beheben und den Quellcode mit der Korrektur zu
aktualisieren. Anschließend veröffentlicht es die Details in
einem Sicherheitshinweis
(Security Advisory). Die
Sicherheitshinweise werden auf der
&os; Webseite und auf den Mailinglisten
&a.security-notifications.name;, &a.security.name; und
&a.announce.name; veröffentlicht.Dieser Abschnitt beschreibt das Format eines
&os; Sicherheitshinweises.Format eines SicherheitshinweisHier ist ein Beispiel für einen &os;
Sicherheitshinweis:=============================================================================
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
=============================================================================
FreeBSD-SA-14:04.bind Security Advisory
The FreeBSD Project
Topic: BIND remote denial of service vulnerability
Category: contrib
Module: bind
Announced: 2014-01-14
Credits: ISC
Affects: FreeBSD 8.x and FreeBSD 9.x
Corrected: 2014-01-14 19:38:37 UTC (stable/9, 9.2-STABLE)
2014-01-14 19:42:28 UTC (releng/9.2, 9.2-RELEASE-p3)
2014-01-14 19:42:28 UTC (releng/9.1, 9.1-RELEASE-p10)
2014-01-14 19:38:37 UTC (stable/8, 8.4-STABLE)
2014-01-14 19:42:28 UTC (releng/8.4, 8.4-RELEASE-p7)
2014-01-14 19:42:28 UTC (releng/8.3, 8.3-RELEASE-p14)
CVE Name: CVE-2014-0591
For general information regarding FreeBSD Security Advisories,
including descriptions of the fields above, security branches, and the
following sections, please visit <URL:http://security.FreeBSD.org/>.
I. Background
BIND 9 is an implementation of the Domain Name System (DNS) protocols.
The named(8) daemon is an Internet Domain Name Server.
II. Problem Description
Because of a defect in handling queries for NSEC3-signed zones, BIND can
crash with an "INSIST" failure in name.c when processing queries possessing
certain properties. This issue only affects authoritative nameservers with
at least one NSEC3-signed zone. Recursive-only servers are not at risk.
III. Impact
An attacker who can send a specially crafted query could cause named(8)
to crash, resulting in a denial of service.
IV. Workaround
No workaround is available, but systems not running authoritative DNS service
with at least one NSEC3-signed zone using named(8) are not vulnerable.
V. Solution
Perform one of the following:
1) Upgrade your vulnerable system to a supported FreeBSD stable or
release / security branch (releng) dated after the correction date.
2) To update your vulnerable system via a source code patch:
The following patches have been verified to apply to the applicable
FreeBSD release branches.
a) Download the relevant patch from the location below, and verify the
detached PGP signature using your PGP utility.
[FreeBSD 8.3, 8.4, 9.1, 9.2-RELEASE and 8.4-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-release.patch.asc
# gpg --verify bind-release.patch.asc
[FreeBSD 9.2-STABLE]
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch
# fetch http://security.FreeBSD.org/patches/SA-14:04/bind-stable-9.patch.asc
# gpg --verify bind-stable-9.patch.asc
b) Execute the following commands as root:
# cd /usr/src
# patch < /path/to/patch
Recompile the operating system using buildworld and installworld as
described in <URL:http://www.FreeBSD.org/handbook/makeworld.html>.
Restart the applicable daemons, or reboot the system.
3) To update your vulnerable system via a binary patch:
Systems running a RELEASE version of FreeBSD on the i386 or amd64
platforms can be updated via the freebsd-update(8) utility:
# freebsd-update fetch
# freebsd-update install
VI. Correction details
The following list contains the correction revision numbers for each
affected branch.
Branch/path Revision
- -------------------------------------------------------------------------
stable/8/ r260646
releng/8.3/ r260647
releng/8.4/ r260647
stable/9/ r260646
releng/9.1/ r260647
releng/9.2/ r260647
- -------------------------------------------------------------------------
To see which files were modified by a particular revision, run the
following command, replacing NNNNNN with the revision number, on a
machine with Subversion installed:
# svn diff -cNNNNNN --summarize svn://svn.freebsd.org/base
Or visit the following URL, replacing NNNNNN with the revision number:
<URL:http://svnweb.freebsd.org/base?view=revision&revision=NNNNNN>
VII. References
<URL:https://kb.isc.org/article/AA-01078>
<URL:http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0591>
The latest revision of this advisory is available at
<URL:http://security.FreeBSD.org/advisories/FreeBSD-SA-14:04.bind.asc>
-----BEGIN PGP SIGNATURE-----
iQIcBAEBCgAGBQJS1ZTYAAoJEO1n7NZdz2rnOvQP/2/68/s9Cu35PmqNtSZVVxVG
ZSQP5EGWx/lramNf9566iKxOrLRMq/h3XWcC4goVd+gZFrvITJSVOWSa7ntDQ7TO
XcinfRZ/iyiJbs/Rg2wLHc/t5oVSyeouyccqODYFbOwOlk35JjOTMUG1YcX+Zasg
ax8RV+7Zt1QSBkMlOz/myBLXUjlTZ3Xg2FXVsfFQW5/g2CjuHpRSFx1bVNX6ysoG
9DT58EQcYxIS8WfkHRbbXKh9I1nSfZ7/Hky/kTafRdRMrjAgbqFgHkYTYsBZeav5
fYWKGQRJulYfeZQ90yMTvlpF42DjCC3uJYamJnwDIu8OhS1WRBI8fQfr9DRzmRua
OK3BK9hUiScDZOJB6OqeVzUTfe7MAA4/UwrDtTYQ+PqAenv1PK8DZqwXyxA9ThHb
zKO3OwuKOVHJnKvpOcr+eNwo7jbnHlis0oBksj/mrq2P9m2ueF9gzCiq5Ri5Syag
Wssb1HUoMGwqU0roS8+pRpNC8YgsWpsttvUWSZ8u6Vj/FLeHpiV3mYXPVMaKRhVm
067BA2uj4Th1JKtGleox+Em0R7OFbCc/9aWC67wiqI6KRyit9pYiF3npph+7D5Eq
7zPsUdDd+qc+UTiLp3liCRp5w6484wWdhZO6wRtmUgxGjNkxFoNnX8CitzF8AaqO
UWWemqWuz3lAZuORQ9KX
=OQzQ
-----END PGP SIGNATURE-----Jeder Sicherheitshinweis verwendet das folgende
Format:Jeder Sicherheitshinweis wird mit dem
PGP-Schlüssel des
Sicherheitsbeauftragten unterzeichnet. Der öffentliche
Schlüssel des Sicherheitsbeauftragten kann in überprüft werden.Der Name des Sicherheitshinweises beginnt immer mit
FreeBSD-SA- (für FreeBSD Security
Advisory), gefolgt vom Jahr im zweistelligen Format
(14:), gefolgt von der Anzahl von
Sicherheitshinweisen für dieses Jahr
(04.), gefolgt vom Namen der Anwendung
oder des betroffenen Subsystems (bind).
Der hier gezeigte Sicherheitshinweis ist der vierte
Hinweis für das Jahr 2014 und betrifft die Anwendung
BIND.Das Feld Topic enthält eine
Beschreibung der Schwachstelle.Das Feld Category beschreibt den
betroffenen Systemteil. Mögliche Werte für dieses Feld
sind core, contrib
oder ports. Die Kategorie
core gilt für Komponenten des
&os;-Betriebssystems, die Kategorie
contrib beschreibt zum Basissystem
gehörende Software Dritter, beispielsweise
BIND. Die Kategorie
ports beschreibt Software, die Teil
der Ports-Sammlung ist.Das Feld Module beschreibt die
betroffene Komponente. Im diesem Beispiel ist das
bind-Modul betroffen, dass heißt
dieses Problem betrifft eine Anwendung aus dem
Betriebssystem.Das Feld Announced gibt den
Zeitpunkt der Bekanntgabe des Sicherheitshinweises
an. Das bedeutet, dass das Sicherheitsteam das Problem
bestätigt hat und das eine entsprechende Korrektur bereits
im &os; Quellcode-Repository zur Verfügung steht .Das Feld Credits gibt die Person
oder Organisation an, die das Sicherheitsproblem
bemerkt und gemeldet hat.Das Feld Affects listet die
&os;-Releases auf, die von dem Problem betroffen
sind.Das Feld Corrected zeigt an,
wann das Problem in welchem Release behoben wurde.Reserviert für Informationen, über die
auf
cve.mitre.org nach Sicherheitslücken
gesucht werden kann.Im Feld Background wird
das betroffene Modul beschrieben.Im Feld Problem Description wird
das Sicherheitsproblem beschrieben. Hier wird
fehlerhafter Code beschrieben oder geschildert,
wie ein Werkzeug ausgenutzt werden könnte.Das Feld Impact beschreibt die
Auswirkungen des Sicherheitsproblems auf ein
System.Im Feld Workaround wird
eine Umgehung des Sicherheitsproblems beschrieben.
Die Umgehung ist für Administratoren gedacht,
die das System aus Zeitnot, Netzwerk-technischen oder
anderen Gründen nicht aktualisieren können.Das Feld Solution enthält eine
getestete Schritt-für-Schritt Anleitung, die das
Sicherheitsproblem behebt.Das Feld Correction Details
enthält die Subversion-Tags
der betroffenen Dateien zusammen mit zugehörigen
Revisionsnummern, in denen das Problem behoben
wurde.Im Feld References finden sich
Verweise auf weitere Informationsquellen.Prozess-ÜberwachungTomRhodesBeigetragen von Prozess-ÜberwachungProzess-Überwachung
(Process accounting) ist ein
Sicherheitsverfahren, bei dem ein Administrator verfolgt,
welche Systemressourcen verwendet werden und wie sich diese
auf die einzelnen Anwender verteilen. Dadurch kann das
System überwacht werden und es ist sogar möglich,
zu kontrollieren, welche Befehle ein Anwender eingibt.Die Überwachung von Prozessen hat sowohl Vor- als auch Nachteile.
Positiv ist, dass man einen Einbruchsversuch bis an den Anfang
zurückverfolgen kann. Von Nachteil ist allerdings,
dass durch diesen Prozess Unmengen an Protokolldateien erzeugt
werden, die auch dementsprechenden Plattenplatz benötigen.
Dieser Abschnitt beschreibt die Grundlagen der
Prozess-Überwachung.Wenn Sie eine differenzierte Prozess-Überwachung
benötigen, lesen Sie .Die Prozess-Überwachung aktivieren und
konfigurierenBevor Sie die Prozess-Überwachung verwenden können,
müssen Sie diese über die folgenden Befehle aktivieren:&prompt.root; touch /var/account/acct
&prompt.root; chmod 600 /var/account/acct
&prompt.root; accton /var/account/acct
&prompt.root; echo 'accounting_enable="YES"' >> /etc/rc.confEinmal aktiviert, wird sofort mit der Überwachung von
CPU-Statistiken, Befehlen und anderen
Vorgängen begonnen. Protokolldateien werden in einem
nur von Maschinen lesbaren Format gespeichert und können
mit sa aufgerufen werden. Ohne Optionen
gibt sa Informationen wie die Anzahl der Aufrufe pro
Anwender, die abgelaufene Zeit in Minuten, die gesamte
CPU- und Anwenderzeit in Minuten und die
durchschnittliche Anzahl der Ein- und Ausgabeoperationen
aus. &man.sa.8; enthält eine Liste der Optionen, welche die
Ausgabe steuern.Benutzen Sie lastcomm, um die von den
Benutzern ausgeführten Befehle anzuzeigen. Dieses Beispiel
zeigt die Nutzung von ls durch trhodes auf dem Terminal
ttyp1:&prompt.root; lastcomm ls trhodes ttyp1Zahlreiche weitere nützliche Optionen finden Sie
&man.lastcomm.1;, &man.acct.5; sowie &man.sa.8;.Einschränkung von RessourcenTomRhodesBeigetragen von Ressourcen einschränken&os; benutzt die Datenbank
/etc/login.conf um Ressourcen zu
beschränken. Obwohl dies immer noch unterstützt wird, ist es
nicht die optimale Methode um die Beschränkung von Ressourcen zu
steuern, da Benutzer in verschiedene Gruppen (Login-Klassen)
aufgeteilt werden müssen und bei Änderungen immer die Datei und
die Passwortdatenbank bearbeitet werden muss. Möglicherweise
benötigt ein eingeschränkter Benutzer eine zusätzliche Klasse,
dann müsste die Datenbank mit cap_mkdb neu
gebaut werden und /etc/master.passwd müsste
ebenfalls bearbeitet werden. Zusätzlich müsste die
Passwortdatenbank mit pwd_mkdb neu gebaut
werden. Dieser Prozess kann sehr zeitaufwendig sein, abhängig
davon, wie viele Benutzer bearbeitet werden müssen.Beginnend mit &os; 9.0-RELEASE können mit &man.rctl.8;
Ressourcen für Benutzer sehr detailliert gesteuert werden.
Dieser Befehl unterstützt nicht nur die Kontrolle der Ressourcen
für Benutzer, sondern auch die Beschränkung auf Prozesse, Jails
und den ursprünglichen Login-Klassen. Diese erweiterten
Funktionen bieten Administratoren und Benutzern die Möglichkeit,
Ressourcen über die Kommandozeile oder über eine
Konfigurationsdatei zu steuern.Einschränkung von Ressourcen aktivieren und
konfigurierenIn der Voreinstellung wird rctl nicht
vom Kernel unterstützt. Sie müssen also zunächst nach den
Anweisungen in einen neuen
Kernel erzeugen. Fügen Sie folgende Zeilen in die
Kernelkonfigurationsdatei ein:options RACCT
options RCTLSobald das System mit dem neuen Kernel gestartet wird, kann
rctl benutzt werden, um die Regeln für das
System festzulegen.Die Syntax der Regeln wird durch
subject, subject-id,
resource und action
gesteuert, wie in diesem Beispiel zu sehen ist:user:trhodes:maxproc:deny=10/userDiese Regel zeigt den grundlegenden Aufbau, hier mit dem
Subjekt user und der Subjekt-ID
trhodes. maxproc
definiert die Anzahl der Prozesse. Die Aktiondeny verhindert, dass neue Prozesse erstellt
werden. Im vorherigen Beispiel wurde für den Benutzer
trhodes eine Beschränkung von
10 Prozessen konfiguriert. Zu den weiteren
Aktionen zählen beispielsweise die Protokollierung auf der
Konsole, Benachrichtigungen an &man.devd.8; oder das Senden
eines SIGTERM an einen Prozess.Beim hinzufügen von Regeln müssen einige Dinge beachtet
werden. Das obige Beispiel würde den Benutzer sogar daran
hindern, einfachste Dinge zu tun, nachdem er sich anmeldet und
eine screen Sitzung gestartet hat. Sobald
die Begrenzung für eine Ressource erreicht ist, wird folgende
Fehlermeldung ausgegeben:&prompt.root; man test
/usr/bin/man: Cannot fork: Resource temporarily unavailable
eval: Cannot fork: Resource temporarily unavailable&man.rctl.8; kann auch benutzt werden, um einer Jail
eine Speichergrenze zuzuweisen. Eine solche Regel könnte
wie folgt festgelegt werden:&prompt.root; rctl -a jail:httpd:memoryuse:deny=2G/jailDamit die Regeln auch nach einem Neustart erhalten bleiben,
müssen sie in /etc/rctl.conf hinzugefügt
werden. Dazu schreiben Sie einfach die Regel, ohne das
vorhergehende Kommando. Zum Beispiel:# Block jail from using more than 2G memory:
jail:httpd:memoryuse:deny=2G/jailMit rctl können auch Regeln entfernt
werden:&prompt.root; rctl -r user:trhodes:maxproc:deny=10/user&man.rctl.8; zeigt auch eine Möglichkeit, alle Regeln zu
entfernen. Falls es erforderlich ist alle Regeln für einen
einzelnen Benutzer zu entfernen, kann dieser Befehl verwendet
werden:&prompt.root; rctl -r user:trhodesEs gibt noch viele weitere Ressourcen, die verwendet werden
können, um zusätzliche subjects zu
kontrollieren. Weitere Informationen zu diesem Thema finden Sie
in &man.rctl.8;.