Index: head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 53294)
+++ head/de_DE.ISO8859-1/books/handbook/network-servers/chapter.xml (revision 53295)
@@ -1,5004 +1,5004 @@
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 finden
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./usr/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;.Automatisches Einhängen mit &man.autofs.5;&man.autofs.5; wird seit &os; 10.1-RELEASE
unterstützt. Um die Funktionalität des automatischen
Einhängens in älteren &os;-Versionen zu benutzen,
verwenden Sie stattdessen &man.amd.8;. In diesem Kapitel
wird nur das automatische Einhängen mit Hilfe von
&man.autofs.5; beschrieben.autofsAutomounter Subsystem&man.autofs.5; ist eine gebräuchliche Bezeichnung für
verschiedene Komponenten, welche es erlauben, lokale und
entfernte Dateisysteme automatisch einzuhängen, sobald auf
eine Datei oder ein Verzeichnis in diesem Dateisystem
zugegriffen wird. Es besteht aus einer Kernel-Komponente
&man.autofs.5; und mehreren Benutzerprogrammen:
&man.automount.8;, &man.automountd.8; und
&man.autounmountd.8;. &man.autofs.5; ist eine Alternative
für &man.amd.8; aus früheren &os;-Versionen. &man.amd.8;
steht nach wie vor zur Verfügung, da beide Programme ein
unterschiedliches Format verwenden. Das Format welches
&man.autofs.5; verwendet ist das gleiche wie bei anderen
SVR4 Automountern, beispielsweise denen aus &solaris;,
&macos; X und &linux;.Das virtuelle &man.autofs.5;-Dateisystem wird von
&man.automount.8; in einen bestimmten Mountpunkt eingehängt.
Dies geschieht gewöhnlich während des Bootens.Jedes Mal, wenn ein Prozess versucht auf eine Datei
unterhalb des &man.autofs.5;-Mountpunkts zuzugreifen, wird
der Kernel den &man.automountd.8;-Daemon benachrichtigen und
den aktuellen Prozess anhalten. Der &man.automountd.8;-Daemon
wird dann die Anfrage des Kernels bearbeiten und das
entsprechende Dateisystem einhängen. Anschließend wird der
Daemon den Kernel benachrichtigen, dass der angehaltene
Prozess wieder freigegeben werden kann. Der
&man.autounmountd.8;-Daemon hängt automatisch Dateisysteme
nach einiger Zeit ab, sofern sie nicht mehr verwendet
werden.Die primäre Konfigurationsdatei von autofs ist
/etc/auto_master. Sie enthält die
einzelnen Zuordnungen zu den Mountpunkten. Eine Erklärung
zu auto_master und der Syntax für
die Zuordnungen finden Sie in &man.auto.master.5;.Eine spezielle Automounter Zuordnung wird in
/net eingehängt. Wenn auf eine Datei in
diesem Verzeichnis zugegriffen wird, hängt &man.autofs.5;
einen bestimmten, entfernen Mountpunkt ein. Wenn
beispielsweise auf eine Datei unterhalb von
/net/foobar/usr zugegriffen werden soll,
würde &man.automountd.8; das exportierte Dateisystem
/usr von dem Rechner foobar einhängen.Ein exportiertes Dateisystem mit &man.autofs.5; in den
Verzeichnisbaum einhängenIn diesem Beispiel zeigt showmount -e
die exportierten Dateisysteme des
NFS-Servers foobar:&prompt.user; showmount -e foobar
Exports list on foobar:
/usr 10.10.10.0
/a 10.10.10.0
&prompt.user; cd /net/foobar/usrDie Ausgabe von showmount zeigt das
exportierte Dateisystem /usr. Wenn in
das Verzeichnis /host/foobar/usr
gewechselt wird, fängt &man.automountd.8; die Anforderung ab
und versucht, den Rechnernamen foobar aufzulösen.
Gelingt dies, wird &man.automountd.8; automatisch das
exportierte Dateisystem einhängen.Um &man.autofs.5; beim Booten zu aktivieren, fügen Sie
diese Zeile in /etc/rc.conf ein:autofs_enable="YES"Danach kann &man.autofs.5; gestartet werden:&prompt.root; service automount start
&prompt.root; service automountd start
&prompt.root; service autounmountd startObwohl das Format von &man.autofs.5; das gleiche ist wie
in anderen Betriebssystemen, kann es wünschenswert sein,
Informationen von anderen Betriebssystemen zu Rate zu ziehen,
wie dieses Mac
OS X Dokument.Weitere Informationen finden Sie in den Manualpages
&man.automount.8;, &man.automountd.8;, &man.autounmountd.8;
und &man.auto.master.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">>>>>>>
nis_server_enable="YES">>>>>>>>>
nis_yppasswdd_enable="YES">>>>>>Diese Zeile setzt den
NIS-Domänennamen auf
test-domain.Dadurch werden die
NIS-Serverprozesse beim Systemstart
automatisch ausgeführt.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
+daemon:*:1:1::0:0:Owner of many system processes:/root:/usr/sbin/nologin
+operator:*:2:5::0:0:System &:/:/usr/sbin/nologin
+bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/usr/sbin/nologin
+tty:*:4:65533::0:0:Tty Sandbox:/:/usr/sbin/nologin
+kmem:*:5:65533::0:0:KMem Sandbox:/:/usr/sbin/nologin
+games:*:7:13::0:0:Games pseudo-user:/usr/games:/usr/sbin/nologin
+news:*:8:8::0:0:News Subsystem:/:/usr/sbin/nologin
+man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
+bind:*:53:53::0:0:Bind Sandbox:/:/usr/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
+xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/usr/sbin/nologin
+pop:*:68:6::0:0:Post Office Owner:/nonexistent:/usr/sbin/nologin
+nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/usr/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/nologin
+ +:::::::::/usr/sbin/nologinDiese Zeile weist den Client an, alle Einträge zu
importieren, aber die Shell in diesen Einträgen durch
- /sbin/nologin zu ersetzen.
+ /usr/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
+ importierten Benutzerkonten /usr/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/nologin
++:::::::::/usr/sbin/nologin
Die entsprechenden Zeilen für Arbeitsplätze lauten:+@IT_EMP:::::::::
+@USERS:::::::::
-+:::::::::/sbin/nologin
++:::::::::/usr/sbin/nologin
NIS 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.
+ Benutzern /usr/sbin/nologin als Shell zu.
Verwenden Sie auch hier (analog zu den Netzgruppen)
Großbuchstaben für die Rechnernamen:+@BOXNAME:::::::::
-+:::::::::/sbin/nologin
++:::::::::/usr/sbin/nologin
Sobald 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)TomRhodesUrsprünglich beigetragen von RockyHotasAktualisiert von BjörnHeidottingÜbersetzt 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 mit der Installation des
Ports oder Pakets
net/openldap-server:&prompt.root; pkg install openldap-serverIm
Paket sind eine große Anzahl an Optionen aktiviert.
Mit dem Befehl pkg info openldap-server
können diese überprüft werden. Falls die Optionen nicht
ausreichend sind (weil bspw. SQL-Unterstützung benötigt wird),
sollten Sie in Betracht ziehen, den Port mit dem
entsprechenden Framework neu zu übersetzen.Während der Installation wird für die Daten das
Verzeichnis /var/db/openldap-data
erstellt. Das Verzeichnis für die Ablage der Zertifikate
muss manuell angelegt werden:&prompt.root; mkdir /usr/local/etc/openldap/privateIm 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.
Weitere Informationen über Zertifikate und deren Parameter
finden Sie im . 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.
Die Zertifikatsregistrierungsanforderung muss mit dem
Schlüssel der Zertifizierungsstelle unterschrieben werden, um
als gültiges Zertifikat verwendet zu 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 Daemon, auf dem der OpenLDAP-Server läuft, heißt
slapd. Die Konfiguration erfolgt über
slapd.ldif. Die alte
slapd.conf wird von OpenLDAP nicht mehr
verwendet.Konfigurationsbeispiele
für slapd.ldif finden sich auch in
/usr/local/etc/openldap/slapd.ldif.sample.
Optionen sind in slapd-config(5) dokumentiert. Jeder
Abschnitt in slapd.ldif wird, wie alle
anderen LDAP-Attributgruppen, durch einen DN eindeutig
identifiziert. Achten Sie darauf, dass keine Leerzeilen
zwischen der Anweisung dn: und dem
gewünschten Ende des Abschnitts verbleiben. Im folgenden
Beispiel wird TLS verwendet, um einen sicheren Kanal zu
implementieren. Der erste Abschnitt stellt die globale
Konfiguration dar:#
# See slapd-config(5) for details on configuration options.
# This file should NOT be world readable.
#
dn: cn=config
objectClass: olcGlobal
cn: config
#
#
# Define global ACLs to disable default read access.
#
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCertificateFile: /usr/local/etc/openldap/server.crt
olcTLSCertificateKeyFile: /usr/local/etc/openldap/private/server.key
olcTLSCACertificateFile: /usr/local/etc/openldap/ca.crt
#olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1
olcTLSVerifyClient: neverHier müssen die Zertifizierungsstelle, das
Serverzertifikat und die privaten Schlüssel des Servers
angegeben werden. Es wird empfohlen, den Clients die Wahl der
Sicherheits-Chiffre zu überlassen und die Option
olcTLSCipherSuite wegzulassen (inkompatibel
mit anderen TLS-Clients als openssl).
Mit der Option olcTLSProtocolMin benötigt
der Server nur eine minimale Sicherheitsstufe.
Diese Option wird empfohlen. Während die Verfizierung für den
Server verpflichtend ist, ist sie es nicht für den Client:
olcTLSVerifyClient: never.Der zweite Abschnitt behandelt die Backend-Module und
kann wie folgt konfiguriert werden:#
# Load dynamic backend modules:
#
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/local/libexec/openldap
olcModuleload: back_mdb.la
#olcModuleload: back_bdb.la
#olcModuleload: back_hdb.la
#olcModuleload: back_ldap.la
#olcModuleload: back_passwd.la
#olcModuleload: back_shell.laDer dritte Abschnitt widmet sich dem Laden der benötigten
ldif-Schemata, die von den Datenbanken verwendet werden
sollen. Diese Dateien sind essentiell.dn: cn=schema,cn=config
objectClass: olcSchemaConfig
cn: schema
include: file:///usr/local/etc/openldap/schema/core.ldif
include: file:///usr/local/etc/openldap/schema/cosine.ldif
include: file:///usr/local/etc/openldap/schema/inetorgperson.ldif
include: file:///usr/local/etc/openldap/schema/nis.ldifAls nächstes folgt der Abschnitt zur
Frontend-Konfiguration:# Frontend settings
#
dn: olcDatabase={-1}frontend,cn=config
objectClass: olcDatabaseConfig
objectClass: olcFrontendConfig
olcDatabase: {-1}frontend
olcAccess: to * by * read
#
# Sample global access control policy:
# Root DSE: allow anyone to read it
# Subschema (sub)entry DSE: allow anyone to read it
# Other DSEs:
# Allow self write access
# Allow authenticated users read access
# Allow anonymous users to authenticate
#
#olcAccess: to dn.base="" by * read
#olcAccess: to dn.base="cn=Subschema" by * read
#olcAccess: to *
# by self write
# by users read
# by anonymous auth
#
# if no access controls are present, the default policy
# allows anyone and everyone to read anything but restricts
# updates to rootdn. (e.g., "access to * by * read")
#
# rootdn can always read and write EVERYTHING!
#
olcPasswordHash: {SSHA}
# {SSHA} is already the default for olcPasswordHashEin weiterer Abschnitt ist dem Konfigurations-Backend
gewidmet, der einzige Weg, später auf die
OpenLDAP-Serverkonfiguration zuzugreifen, ist als globaler
Superuser.dn: olcDatabase={0}config,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {0}config
olcAccess: to * by * none
olcRootPW: {SSHA}iae+lrQZILpiUdf16Z9KmDmSwT77Dj4UDer voreingestellte Benutzername für den Administrator
lautet cn=config. Geben Sie
slappasswd in eine Shell ein, wählen Sie
ein Passwort und verwenden Sie seinen Hash in
olcRootPW. Wenn diese Option jetzt nicht
angegeben ist, kann vor dem Import der
slapd.ldif niemand später den Abschnitt
global configuration ändern.Der letzte Abschnitt befasst sich mit dem
Datenbank-Backend:#######################################################################
# LMDB database definitions
#######################################################################
#
dn: olcDatabase=mdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcMdbConfig
olcDatabase: mdb
olcDbMaxSize: 1073741824
olcSuffix: dc=domain,dc=example
olcRootDN: cn=mdbadmin,dc=domain,dc=example
# Cleartext passwords, especially for the rootdn, should
# be avoided. See slappasswd(8) and slapd-config(5) for details.
# Use of strong authentication encouraged.
olcRootPW: {SSHA}X2wHvIWDk6G76CQyCMS1vDCvtICWgn0+
# The database directory MUST exist prior to running slapd AND
# should only be accessible by the slapd and slap tools.
# Mode 700 recommended.
olcDbDirectory: /var/db/openldap-data
# Indices to maintain
olcDbIndex: objectClass eqDiese Datenbank enthält den
eigentlichen Inhalt des
LDAP-Verzeichnisses. Neben
mdb sind weitere Versionen
verfügbar. Dessen Superuser, nicht zu verwechseln mit dem
globalen, wird hier konfiguriert: ein Benutzername in
olcRootDN und der Passworthash in
olcRootPW; slappasswd
kann wie zuvor benutzt werden.Dieses Repository
enthält vier Beispiele für slapd.ldif.
Lesen Sie diese Seite, um eine bestehende
slapd.conf in
slapd.ldif zu konvertieren. Beachten
Sie, dass dies einige unbrauchbare Optionen
einführen kann.Wenn die Konfiguration abgeschlossen ist, muss
slapd.ldif in ein leeres Verzeichnis
verschoben werden. Folgendes ist die empfohlene
Vorgehensweise:&prompt.root; mkdir /usr/local/etc/openldap/slapd.d/Importieren Sie die Konfigurationsdatenbank:&prompt.root; /usr/local/sbin/slapadd -n0 -F /usr/local/etc/openldap/slapd.d/ -l /usr/local/etc/openldap/slapd.ldifStarten Sie den slapd-Daemon:&prompt.root; /usr/local/libexec/slapd -F /usr/local/etc/openldap/slapd.d/Die Option -d kann, wie in slapd(8)
beschrieben, zur Fehlersuche benutzt werden. Stellen Sie
sicher, dass der Server läuft und korrekt arbeitet:&prompt.root; ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
# extended LDIF
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=domain,dc=example
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1Dem Server muss noch vertraut werden. Wenn dies noch nie
zuvor geschehen ist, befolgen Sie diese Anweisungen.
Installieren Sie das Paket oder den Port OpenSSL:&prompt.root; pkg install opensslAus dem Verzeichnis, in dem ca.crt
gespeichert ist (in diesem Beispiel
/usr/local/etc/openldap), starten
Sie:&prompt.root; c_rehash .Sowohl die CA als auch das Serverzertifikat werden nun in
ihren jeweiligen Rollen korrekt erkannt. Um dies zu
überprüfen, führen die folgenden Befehl aus dem Verzeichnis
der server.crt aus:&prompt.root; openssl verify -verbose -CApath . server.crtFalls slapd ausgeführt wurde, muss
der Daemon neu gestartet werden. Wie in
/usr/local/etc/rc.d/slapd angegeben,
müssen die folgenden Zeilen in
/etc/rc.conf eingefügt werden, um
slapd beim Booten ordnungsgemäß
auszuführen:lapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/
ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"
slapd_cn_config="YES"slapd bietet beim Booten keine
Möglichkeit zur Fehlersuche. Überprüfen Sie dazu
/var/log/debug.log,
dmesg -a und
/var/log/messages.Das folgende Beispiel fügt die Gruppe
team und den Benutzer
john zur
LDAP-Datenbank domain.example
hinzu, die bislang leer ist. Erstellen Sie
zunächst die Datei
domain.ldif:&prompt.root; cat domain.ldif
dn: dc=domain,dc=example
objectClass: dcObject
objectClass: organization
o: domain.example
dc: domain
dn: ou=groups,dc=domain,dc=example
objectClass: top
objectClass: organizationalunit
ou: groups
dn: ou=users,dc=domain,dc=example
objectClass: top
objectClass: organizationalunit
ou: users
dn: cn=team,ou=groups,dc=domain,dc=example
objectClass: top
objectClass: posixGroup
cn: team
gidNumber: 10001
dn: uid=john,ou=users,dc=domain,dc=example
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: John McUser
uid: john
uidNumber: 10001
gidNumber: 10001
homeDirectory: /home/john/
loginShell: /usr/bin/bash
userPassword: secretWeitere Informationen finden Sie in der
OpenLDAP-Dokumentation. Benutzen Sie
slappasswd, um das Passwort
durch einen Hash in
userPassword zu ersetzen. Der in
loginShell angegebene Pfad muss in
allen Systemen existieren, in denen
john sich anmelden darf. Benutzen
Sie schließlich den mdb-Administrator,
um die Datenbank zu ändern:&prompt.root; ldapadd -W -D "cn=mdbadmin,dc=domain,dc=example" -f domain.ldifÄnderungen im Bereich
global configuration können nur vom
globalen Superuser vorgenommen werden. Angenommen die Option
olcTLSCipherSuite: HIGH:MEDIUM:SSLv3 wurde
ursprünglich definiert und soll nun gelöscht werden.
Dazu erstellen Sie zunächst eine Datei mit folgendem
Inhalt:&prompt.root; cat global_mod
dn: cn=config
changetype: modify
delete: olcTLSCipherSuiteÜbernehmen Sie dann die Änderungen:&prompt.root; ldapmodify -f global_mod -x -D "cn=config" -WGeben Sie bei Aufforderung das im Abschnitt
configuration backend gewählte
Passwort ein. Der Benutzername ist nicht erforderlich:
Hier repräsentiert cn=config den DN des zu
ändernden Datenbankabschnitts. Alternativ können Sie mit
ldapmodify eine einzelne Zeile der
Datenbank löschen, mit ldapdelete einen
ganzen Eintrag.Wenn etwas schief geht oder der globale Superuser nicht
auf das Konfigurations-Backend zugreifen kann, ist es
möglich, die gesamte Konfiguration zu löschen und neu zu
schreiben:&prompt.root; rm -rf /usr/local/etc/openldap/slapd.d/slapd.ldif kann dann bearbeitet und
erneut importiert werden. Bitte folgenden Sie dieser
Vorgehensweise nur, wenn keine andere Lösung verfügbar
ist.Dies ist nur die Konfiguration des Servers. Auf demselben
Rechner kann auch ein LDAP-Client mit eigener, separater
Konfiguration betrieben werden.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-dhcp43-server installiert
werden.DHCPServerDHCPinstallierenDer Port net/isc-dhcp43-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 in
/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-dhcp43-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.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.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 Bereichs
192.168.1.*.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.DNS-Server KonfigurationUnbound ist im Basissystem von
&os; enthalten. In der Voreinstellung bietet es nur die
DNS-Auflösung auf dem lokalen Rechner.
Obwohl das im Basissystem enthaltene
Unbound konfiguriert werden kann,
um Namensauflösung über den lokalen Rechner hinweg
bereitzustellen, ist es empfehlenswert für solche
Anforderungen Unbound aus der &os;
Ports-Sammlung zu installieren.Um Unbound zu aktivieren, fügen
Sie folgende Zeile in /etc/rc.conf
ein:local_unbound_enable="YES"Alle vorhandenen Nameserver aus
/etc/resolv.conf werden als Forwarder
in der neuen Unbound-Konfiguration
benutzt.Wenn einer der aufgeführten Nameserver kein
DNSSEC unterstützt, wird die lokale
DNS-Auflösung nicht funktionieren.
Testen Sie jeden Server und entfernen Sie die Server, die
den Test nicht bestehen. Das folgende Beispiel zeigt einen
Trust Tree beziehungsweise
einen Fehler für den Nameserver auf 192.168.1.1:&prompt.root; drill -S FreeBSD.org @192.168.1.1Nachdem jeder Server für DNSSEC
konfiguriert ist, starten Sie
Unbound:&prompt.root; service local_unbound onestartDieses Kommando sorgt für die Aktualisierung von
/etc/resolv.conf, so dass Abfragen für
DNSSEC gesicherte Domains jetzt
funktionieren. Führen Sie folgenden Befehl aus, um den
DNSSEC
Trust Tree für
FreeBSD.org zu überprüfen:&prompt.user; drill -S FreeBSD.org
;; Number of trusted keys: 1
;; Chasing: freebsd.org. A
DNSSEC Trust tree:
freebsd.org. (A)
|---freebsd.org. (DNSKEY keytag: 36786 alg: 8 flags: 256)
|---freebsd.org. (DNSKEY keytag: 32659 alg: 8 flags: 257)
|---freebsd.org. (DS keytag: 32659 digest type: 2)
|---org. (DNSKEY keytag: 49587 alg: 7 flags: 256)
|---org. (DNSKEY keytag: 9795 alg: 7 flags: 257)
|---org. (DNSKEY keytag: 21366 alg: 7 flags: 257)
|---org. (DS keytag: 21366 digest type: 1)
| |---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
| |---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
|---org. (DS keytag: 21366 digest type: 2)
|---. (DNSKEY keytag: 40926 alg: 8 flags: 256)
|---. (DNSKEY keytag: 19036 alg: 8 flags: 257)
;; Chase successfulApache 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/samba48
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, wenn Sie den
Port oder das Paket net/samba48
installieren. Dies erlaubt es dem Administrator
SMB/CIFS-Freigaben auf dem &os;-System
einzurichten, auf welche dann Clients mit µsoft.windows;
oder den Samba-Client-Bibliotheken
zugreifen können.Konfiguration des ServersSamba wird in
/usr/local/etc/smb4.conf konfiguriert.
Diese Datei muss erstellt werden, bevor
Samba benutzt werden kann.Eine einfache smb4.conf, wie hier
gezeigt, stellt den Zugriff auf Verzeichnisse und Drucker für
&windows;-Clients in einer Arbeitsgruppe (engl.
Workgroup) zur Verfügung. In
aufwendigeren Installationen, in denen LDAP
oder Active Directory zum Einsatz kommt, ist es einfacher die
smb4.conf mit dem Werkzeug
&man.samba-tool.8; zu erstellen.[global]
workgroup = WORKGROUP
server string = Samba Server Version %v
netbios name = ExampleMachine
wins support = Yes
security = user
passdb backend = tdbsam
# Example: share /usr/src accessible only to 'developer' user
[src]
path = /usr/src
valid users = developer
writable = yes
browsable = yes
read only = no
guest ok = no
public = no
create mask = 0666
directory mask = 0755Globale EinstellungenEinstellungen für das Netzwerk werden in
/usr/local/etc/smb4.conf
definiert:workgroupDer Name der Arbeitsgruppe.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.wins supportLegt fest, ob Samba als
WINS-Server fungieren soll.
Aktivieren Sie die Unterstützung für
WINS auf maximal einem Server im
Netzwerk.Samba absichernDie wichtigsten Einstellungen in
/usr/local/etc/smb4.conf betreffen
das zu verwendende Sicherheitsmodell sowie das
Backend-Passwortformat. 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. Die empfohlene
Authentifizierungsmethode, tdbsam,
ist ideal für einfache Netzwerke und wird hier
vorgestellt. Für größere oder komplexere Netzwerke
wird ldapsam empfohlen.
smbpasswd war der frühere Standard
und gilt mittlerweile als veraltet.Samba BenutzerDamit &windows;-Clients auf die Freigaben zugreifen
können, müssen die &os;-Benutzerkonten in der
SambaSAMAccount-Datenbank zugeordnet
werden. Für bereits vorhandene Benutzerkonten kann dazu
&man.pdbedit.8; benutzt werden:&prompt.root; pdbedit -a usernameDieser Abschnitt beschreibt lediglich die am häufigsten
verwendeten Einstellungen. Ausfü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_server_enable="YES"Jetzt kann Samba direkt
gestartet werden:&prompt.root; service samba_server start
Performing sanity check on Samba configuration: OK
Starting nmbd.
Starting smbd.Samba verwendet drei Daemonen.
Sowohl nmbd als auch
smbd werden durch
samba_enable gestartet. Wenn eine
Namensauflösung über winbind
benötigt wird, setzen Sie zusätzlich:winbindd_enable="YES"Samba kann jederzeit
durch folgenden Befehl beendet werden:&prompt.root; service samba_server 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.&os; enthält einen nativen,
kernelbasierten iSCSI
Target und Initiator.
Dieser Abschnitt beschreibt, wie ein &os;-System als Target oder
Initiator konfiguriert wird.Ein iSCSI-Target konfigurierenUm 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 53294)
+++ head/de_DE.ISO8859-1/books/handbook/security/chapter.xml (revision 53295)
@@ -1,4438 +1,4438 @@
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.pkg 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 Login-Klassen oder die
Ressourcen-Datenbank benutzen, 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
grundlegende Sicherheitskonfigurationen auf einem
&os;-System durchgeführt werden. Der Rest des Kapitels
zeigt 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
+ /usr/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 das
Werkzeug security/rkhunter, mit dem
Rootkits erkannt werden können.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 COEDDie 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.Unter Kerberos werden Benutzer
und Dienste als Prinzipale bezeichnet, die
innerhalb einer administrativen Domäne, dem sogenannten
Realm enthalten sind. Ein typisches
Benutzer-Prinzipal hätte das Format
user@REALM
(Realms sind traditionell in Großbuchstaben).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.
Weil alle Mitglieder eines
Kerberos-Realms dem
KDC vertrauen, gelten für das
KDC erhöhte Sicherheitsanforderungen.
Der direkte Zugriff auf das KDC sollte
daher eingeschränkt sein.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:kdc_enable="YES"
kadmind_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.
Der Rechnername des KDC muss im
DNS auflösbar sein.In großen Netzwerken mit einem ordentlich konfigurierten
DNS-Server kann die Datei aus dem obigen
Beispiel verkürzt werden:[libdefaults]
default_realm = EXAMPLE.ORG
[domain_realm]
.example.org = 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 sie 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. Es wäre durchaus sinnvoll, ein 45-stelliges
Zufallspasswort für diesen Zweck zu benutzten. Um den
Schlüssel zu erstellen, rufen Sie kstash
auf und geben Sie ein Passwort ein:&prompt.root; kstash
Master key: xxxxxxxxxxxxxxxxxxxxxxx
Verifying password - Master key: xxxxxxxxxxxxxxxxxxxxxxxNachdem der Schlüssel erstellt wurde, sollte die Datenbank
initialisiert werden. Das
Kerberos-Werkzeug &man.kadmin.8;
kann die Datenbank mit kadmin -l direkt
bearbeiten, ohne dabei den 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 kdc 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, indem Sie für den eben angelegten
Benutzer ein Ticket anfordern:&prompt.user; kinit tillman
tillman@EXAMPLE.ORG's Password:Überprüfen Sie, ob das Ticket erfolgreich ausgestellt
wurde:&prompt.user; klist
Credentials cache: FILE: /tmp/krb5cc_1001
Principal: tillman@EXAMPLE.ORG
Issued Expires Principal
Aug 27 15:37:58 2013 Aug 28 01:37:58 2013 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 generiert 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]:
Principal expiration time [never]:
Password expiration time [never]:
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, um unnötige Schlüssel
in der keytab des Systems zu vermeiden.Mit Hilfe 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 HTTP/-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.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.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 Dokumentation
The Kerberos FAQ
Designing an Authentication System: a Dialogue in Four
Scenes
RFC 4120, The Kerberos
Network Authentication Service (V5)
MIT
Kerberos-SeiteHeimdal
Kerberos-SeiteOpenSSLTomRhodesBeigetragen von SicherheitOpenSSLOpenSSLOpenSSL 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.Das in &os; integrierte OpenSSL
stellt die Protokolle Secure Sockets Layer 3.0 (SSLv3)
und Transport Layer Security 1.0/1.1/1.2 (TLSv1/TLSv1.1/TLSv1.2) zur Verfügung.
Die OpenSSL-Bibliotheken stellen
kryptographische Funktionen bereit. &os; 12.0-RELEASE und
neuere Versionen enthalten OpenSSL mit Unterstützung für
Transport Layer Security 1.3 (TLSv1.3).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/postgresql11-server, haben eine
Option für den Bau mit OpenSSL.
Bei Auswahl dieser Option, wird
OpenSSL aus dem Basissystem benutzt.
Wenn Sie für den Bau der Anwendung stattdessen
OpenSSL aus dem Port
security/openssl benutzten wollen, fügen Sie
folgende Zeile in
/etc/make.conf ein:DEFAULT_VERSIONS+= ssl=opensslOpenSSL 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 erzeugenUm ein Zertifikat zu erzeugen, das von einer externen
CA signiert werden soll, geben Sie
folgenden Befehl und die angeforderten Informationen
ein. Diese Informationen werden in das Zertifikat
geschrieben. Für Common Name geben Sie
den vollqualifizierten Namen des Systems ein, auf dem das
Zertifikat später installiert wird. Wenn der Name nicht
übereinstimmt, wird die Anwendung, die das Zertifikat
überprüft, dem Benuzter eine Warnung anzeigen. Die
Überprüfung würde fehlschlagen und das Zertifikat damit
unbrauchbar machen.&prompt.root; openssl req -new -nodes -out req.pem -keyout cert.key -sha256 -newkey rsa:2048
Generating a 2048 bit RSA private key
..................+++
.............................................................+++
writing new private key to 'cert.key'
-----
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 NameBei der Erzeugung des Zertifikates können noch weitere
Optionen, wie die Gültigkeitsdauer
und alternative Verschlüsselungsalgorithmen, angegeben
werden. &man.openssl.1; beschreibt die zur
Verfügung stehenden Optionen.Das folgende Kommando erstellt zwei Dateien im aktuellen
Verzeichnis: Die Anforderung für ein neues Zertifikat wird 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 signiert und an Sie zurückgesandt.
cert.key, 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 genrsa -rand -genkey -out cert.key 2048
0 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
.............................................+++
.................................................................................................................+++
e is 65537 (0x10001)Benutzen Sie diesen Schlüssel, um ein selbst signiertes
Zertifikat zu erzeugen. Folgen Sie wieder den Anweisungen am
Prompt:&prompt.root; openssl req -new -x509 -days 365 -key cert.key -out cert.crt -sha256
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 (e.g. server FQDN or YOUR name) []:localhost.example.org
Email Address []:trhodes@FreeBSD.orgDieses Kommando erstellt zwei neue Dateien im aktuellen
Verzeichnis: Der Schlüssel der Zertifizierungsstelle
cert.key und das Zertifikat selbst,
cert.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
chmod 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.Unter &os; 10.0-RELEASE und neueren Versionen ist es
möglich, ein selbst signiertes Zertifikat für
Sendmail automatisch erzeugen
zu lassen. Um diese Funktionalität zu aktivieren, fügen Sie
die folgenden Zeilen in /etc/rc.conf
ein:sendmail_enable="YES"
sendmail_cert_enable="YES"
sendmail_cert_cn="localhost.example.org"Dadurch wird automatisch ein selbst signiertes Zertifikat
(/etc/mail/certs/host.cert), der
Schlüssel für die CA
(/etc/mail/certs/host.key und das
Zertifikat der CA
(/etc/mail/certs/cacert.pem erzeugt. Das
Zertifikat wird den in
festgelegten Common Name verwenden.
Nachdem Sie die Änderungen gespeichert haben, starten Sie
Sendmail neu:&prompt.root; service sendmail restartWenn alles gut ging, erscheinen keine Fehlermeldungen
in /var/log/maillog. Für einen einfachen
Test, bauen Sie mit Hilfe von telnet eine
Verbindung zum Mailserver auf:&prompt.root; telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.14.7/8.14.7; Fri, 18 Apr 2014 11:50:32 -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 Hiten M.Pandyahmp@FreeBSD.orgGeschrieben von IPsecInternet Protocol Security
(IPsec) ist ein Satz von Protokollen, die auf
dem Internet-Protokoll (IP) aufbauen. Durch
Authentifizierung und Verschlüsselung jedes einzelnen
IP-Pakets, können mehrere Systeme geschützt
miteinander kommunizieren. &os;s IPSsec
Netzwerk-Stack basiert auf der http://www.kame.net
Implementierung und unterstützt sowohl IPv4
als auch IPv6.IPsecESPIPsecAHIPsec besteht aus den folgenden
Protokollen:Encapsulated Security Payload
(ESP): dieses Protokoll
verschlüsselt IP-Pakete mit einem
symmetrischen Verfahren wie Blowfish oder
3DES. Damit werden die Pakete vor
Manipulationen Dritter geschützt.Authentication Header
(AH): dieses Protokoll
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.IP Payload Compression Protocol
(IPComp): dieses Protokoll
versucht durch Komprimierung der
IP-Nutzdaten die Menge der gesendeten
Daten zu reduzieren und somit die Kommunikationsleistung zu
verbessern.Diese Protokolle können, je nach Situation, zusammen oder
einzeln verwendet werden.VPNVirtual Private NetworkVPNIPsec unterstützt zwei Modi: Der
Transport-Modus verschlüsselt die Daten
zwischen zwei Systemen. Der Tunnel-Modus
verbindet zwei Subnetze miteinander. Durch einen Tunnel können
dann 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;.Seit &os; 11 ist IPsec in der
Voreinstellung aktiviert. Um die Unterstützung für
IPsec in älteren Versionen zu aktivieren,
fügen Sie folgenden Optionen in die
Kernelkonfigurationsdatei ein und erstellen Sie einen neuen
Kernel, wie in
beschrieben.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 securityDer Rest dieses Kapitels beschreibt die Einrichtung eines
IPsec-VPN zwischen einem
Heimnetzwerk und einem Firmennetzwerk. Für das folgende
Beispiel gilt:Beide Netzwerke sind über ein &os;-Gateway mit dem
Internet verbunden.Der Gateway jedes Netzwerks besitzt mindestens eine
externe IP-Adresse. In diesem Beispiel
ist die externe IP-Adresse des
Firmennetzwerks (LAN) 172.16.5.4 und das
Heimnetzwerk (LAN) hat die externe
IP-Adresse 192.168.1.12.Die intern verwendeten IP-Adressen
können private oder öffentliche Adressen sein. Sie dürfen
sich jedoch nicht überschneiden. Zum Beispiel sollten nicht
beide Netze 192.168.1.x benutzen. In
diesem Beispiel ist die interne
IP-Adresse des Firmennetzwerks
(LAN) 10.246.38.1 und das
Heimnetzwerk (LAN) hat die interne
IP-Adresse 10.0.0.5.Konfiguration eines VPN unter
&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 extern2Überprüfen Sie mit ifconfig die
Konfiguration auf beiden Gateways. Hier folgt die Ausgabe
von 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 0xffffff00Hier folgt die Ausgabe von 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. Dazu werden folgende Befehle
verwendet:corp-net&prompt.root; route add 10.0.0.0 10.0.0.5 255.255.255.0
corp-net&prompt.root; route add net 10.0.0.0: gateway 10.0.0.5
priv-net&prompt.root; route add 10.246.38.0 10.246.38.1 255.255.255.0
priv-net&prompt.root; 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;
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;Nachdem die Datei gespeichert wurde, 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
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. Benutzen Sie
ssh-keygen um
RSA-Schlüssel erzeugen. 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 rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:54Xm9Uvtv6H4NOo6yjP/YCfODryvUU7yWHzMqeXwhq8 user@host.example.com
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| |
| . o.. |
| .S*+*o |
| . O=Oo . . |
| = Oo= oo..|
| .oB.* +.oo.|
| =OE**.o..=|
+----[SHA256]-----+Geben Sie hier die Passphrase ein. Diese darf auch
Leer- und Sonderzeichen enthalten.Geben Sie die Passphrase zur Überprüfung erneut
ein.Der private Schlüssel wird in
~/.ssh/id_rsa und der öffentliche
Schlüssel in ~/.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-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
eingesetzten Version von OpenSSH.
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 kann 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. Die zu verwaltende Identität muss mit
ssh-add sowie der Passphrase für den
privaten Schlüssel übergeben werden. Danach kann sich der
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_rsa:
Identity added: /usr/home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)
&prompt.user;Geben Sie hier die Passphrase für den Schlüssel
ein.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.Ab jetzt sollte sshd für alle
Benutzer mit einem Benutzernamen und Kennwort zur Verfügung
stehen.SSH Server SicherheitObwohl sshd das am weitesten
verbreitete Remote-Administrations-Werkzeug ist, sind
Brute-Force- und
Drive-by-Angriffe auf
öffentliche Netzwerke weit verbreitet. Daher stehen mehrere
Optionen zur Verfügung, um diese Art von Angriffen zu
verhindern. Diese Optionen werden in diesem Abschnitt
beschrieben.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;.Darüber hinaus können Benutzer gezwungen werden, eine
Zwei-Faktor-Authentifizierung mit einem öffentlichen und einem
privaten Schlüssel zu benutzen. Bei Bedarf kann der Benutzer
ein Schlüsselpaar mit &man.ssh-keygen.1; erzeugen und dem
Administrator den öffentlichen Schlüssel zukommen lassen. Der
Schlüssel wird, wie weiter oben beschrieben, in
authorized_keys platziert. Um den
Benutzer zu zwingen, ausschließlich Schlüssel zu benutzen,
kann die folgende Option konfiguriert werden:AuthenticationMethods publickeyVerwechseln 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 von
Drittanbietern überwachenTomRhodesBeigetragen von pkgIn 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 &os; Dienstprogramm
pkg enthält Optionen für genau
diesen Anwendungsfall.pkg fragt dazu eine Datenbank auf
bekannte Sicherheitsprobleme ab. Diese Datenbank wird vom &os;
Security Team sowie den Ports-Entwicklern aktualisiert und
gewartet.Anweisungen zur Installation von
pkg finden Sie im
.Die Installation enthält Konfigurationsdateien für
&man.periodic.8;, welche die Datenbank von
pkg verwaltet und aktualisiert.
Diese Funktionalität wird aktiviert, wenn in
&man.periodic.conf.5; die Variable
daily_status_security_pkgaudit_enable auf
YES gesetzt wird. Stellen Sie auf jeden Fall
sicher, dass diese (an das E-Mail-Konto von root gesendeten)
Sicherheitsberichte auch gelesen werden.Nach der Installation kann ein Administrator mit dem
folgenden Kommando die Datenbank aktualisieren und sich die
Sicherheitslücken in installierten Paketen anzeigen
lassen:&prompt.root; pkg audit -Fpkg zeigt dann die
Schwachstellen in installierten Pakete an:Affected package: cups-base-1.1.22.0_1
Type of problem: cups-base -- HPGL buffer overflow vulnerability.
Reference: <https://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.pkg ist ein mächtiges
Werkzeug und insbesondere in Zusammenarbeit mit
ports-mgmt/portmaster ä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:https://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:https://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. Der
Teil in Klammern zeigt an, in welchem Zweig die
Aktualisierung eingeflossen ist und die entsprechende
Versionsnummer und Patch-Level des Release. Der
Patch-Level besteht aus dem Buchstaben
p, gefolgt von einer Nummer. Dies
erlaubt es dem Benutzer festzustellen, welche Korrekturen
bereits auf dem System eingespielt wurden.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; sysrc accounting_enable=yesEinmal 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; bietet dem Systemadministrator mehrere
Möglichkeiten die System-Ressourcen, die ein einzelner
Benutzer verwenden kann, einzuschränken.
Festplatten-Kontingente schränken den Plattenplatz, der
einem Benutzer zur Verfügung steht, ein. Kontingente werden
im diskutiert.QuotasBenutzer einschränkenQuotasEinschränkungen auf andere Ressourcen, wie
CPU und Speicher, können über eine
Konfigurationsdatei oder über die Kommandozeile konfiguriert
werden. Traditionell werden Login-Klassen in
/etc/login.conf definiert. Obwohl diese
Methode immer noch untersützt wird, muss nach jeder Änderung
an dieser Datei die Ressourcen-Datenbank neu gebaut werden.
Zudem müssen Sie die notwendigen Änderungen in
/etc/master.passwd vornehmen und die
Passwort-Datenbnak neu bauen. Dieser Prozess kann, abhängig
davon, wie viele Benutzer bearbeitet werden müssen, sehr
zeitaufwändig sein.Mit
rctl 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 und Jails.In diesem Abschnitt werden beide Methoden
vorgestellt. Angefangen wird mit der traditionellen
Methode.Login-Klassen konfigurierenBenutzer einschränkenAccountseinschränken/etc/login.confBei der traditionellen Methode werden Login-Klassen und
Ressourcenbeschränkungen in
/etc/login.conf definiert. Jeder
Benutzer kann einer Login-Klasse zugewiesen werden
(standardmäßig default) und jede
Login-Klasse ist mit einem Satz von Login-Fähigkeiten
verbunden. Eine Login-Fähigkeit ist ein
Name=Wert
Paar, in dem Name die Fähigkeit
bezeichnet und Wert ein beliebiger
Text ist, der in Abhänigkeit von
Name entsprechend verarbeitet
wird.Immer wenn /etc/login.conf
verändert wurde, muss die
/etc/login.conf.db mit dem folgenden
Kommando aktualisiert werden:&prompt.root; cap_mkdb /etc/login.confRessourcenbeschränkungen unterscheiden sich von normalen
Login-Fähigkeiten zweifach. Erstens gibt es für jede
Beschränkung ein aktuelles und ein maximales Limit. Das
aktuelle Limit kann vom Benutzer oder einer Anwendung beliebig
bis zum maximalen Limit verändert werden. Letzteres kann
der Benutzer nur heruntersetzen. Zweitens gelten die meisten
Ressourcenbeschränkungen für jeden vom Benutzer gestarteten
Prozess. listet die
gebräuchlichen Ressourcenbeschränkungen auf. Alle verfügbaren
Ressourcenbeschränkungen und Fähigkeiten sind im Detail in
&man.login.conf.5; beschrieben.Benutzer einschränkencoredumpsizeBenutzer einschränkencputimeBenutzer einschränkenfilesizeBenutzer einschränkenmaxprocBenutzer einschränkenmemorylockedBenutzer einschränkenmemoryuseBenutzer einschränkenopenfilesBenutzer einschränkensbsizeBenutzer einschränkenstacksize
Ressourcenbeschränkungen für Login-KlassenRessourcenbeschränkungBeschreibungcoredumpsizeDas Limit der Größe einer core-Datei, die von
einem Programm generiert wird, unterliegt aus
offensichtlichen Gründen anderen Limits der
Festplattenbenutzung, zum Beispiel
filesize oder
Festplattenkontingenten. Es wird oft als weniger
harte Methode zur Kontrolle des
Festplattenplatz-Verbrauchs verwendet. Da Benutzer
die core-Dateien selbst nicht erstellen und sie oft
nicht löschen, kann diese Option davor schützen, dass
kein Festplattenspeicher mehr zur Verfügung steht,
sollte ein großes Programm abstürzen.cputimeDie maximale Rechenzeit, die ein Prozess eines
Benutzers verbrauchen darf. Überschreitet ein Prozess
diesen Wert, wird er vom Kernel beendet. Beachten
Sie, dass die Rechenzeit
limitiert wird, nicht die prozentuale
Prozessorenbenutzung, wie es in einigen Feldern von
top und ps
dargestellt wird.filesizeHiermit lässt sich die maximale Größe einer Datei
bestimmen, die der Benutzer besitzen darf. Im
Gegensatz zu Festplattenkontingenten ist
diese Beschränkung nur für jede einzelne Datei gültig
und nicht für den Platz, den alle Dateien eines
Benutzers verwenden.maxprocDas ist die maximale Anzahl von Prozessen, die
ein Benutzer starten darf, und beinhaltet sowohl
Vordergrund- als auch Hintergrundprozesse. Dieser
Wert nicht höher sein als das System-Limit, das in
kern.maxproc angegeben ist.
Vergessen Sie nicht, dass ein zu kleiner Wert den
Benutzer in seiner Produktivität einschränken könnte,
wenn beispielsweise ein großes Programm übersetzt wird
oder viele Prozesse gestartet sind.memorylockedDieses Limit gibt an, wie viel virtueller
Speicher von einem Prozess maximal im Arbeitsspeicher
festgesetzt werden kann (siehe auch &man.mlock.2;).
Ein paar systemkritische Programme, wie &man.amd.8;,
verhindern damit einen Systemzusammenbruch, der
auftreten könnte, wenn sie aus dem Speicher genommen
werden.memoryuseBezeichnet den maximalen Speicher, den ein
Prozess benutzen darf und beinhaltet sowohl
Arbeitsspeicher-, als auch Swap-Benutzung. Es ist
kein allübergreifendes Limit für den
Speicherverbrauch, aber ein guter Anfang.openfilesMit diesem Limit lässt sich die maximale Anzahl
der von einem Prozess des Benutzers geöffneten Dateien
festlegen. In &os; werden Dateien auch verwendet, um
Sockets und >IPC>-Kanäle
darzustellen. Setzen Sie es deshalb nicht zu niedrig.
Das System-Limit ist in
kern.maxfiles definiert.sbsizeDieses Limit beschränkt den Netzwerk-Speicher,
den ein Benutzer verbrauchen darf. Es kann generell
dazu benutzt werden Netzwerk-Verbindungen zu
beschränken.stacksizeDas ist die maximale Größe, auf die der Stack
eines Prozesses heranwachsen darf. Das allein ist
natürlich nicht genug, um den Speicher zu beschränken,
den ein Programm verwenden darf. Es sollte deshalb in
Verbindung mit anderen Limits verwendet
werden.
Beim Setzen von Ressourcenbeschränkungen sind noch andere
Dinge zu beachten:Von /etc/rc beim Hochfahren des
Systems gestartete Prozesse werden der
daemon Login-Klasse zugewiesen.Obwohl die voreingestellte
/etc/login.conf sinnvolle Limits
enthält, sind sie evtl. nicht für jedes System geeignet.
Ein zu hohes Limit kann das System für Missbrauch anfällig
machen, und ein zu niedriges Limit kann der Produktivität
schaden.&xorg; beansprucht selbst
eine Menge Ressourcen und verleitet die Benutzer dazu,
mehrere Programme gleichzeitig laufen zu lassen.Bedenken Sie, dass viele Limits für einzelne Prozesse
gelten und nicht für den Benutzer selbst. Setzt man zum
Beispiel openfiles auf
50, kann jeder Prozess des Benutzers
bis zu 50 Dateien öffnen. Dadurch
ist die maximale Anzahl von Dateien, die von einem
Benutzer geöffnet werden können,
openfiles mal
maxproc. Das gilt auch für den
Speicherverbrauch.Weitere Informationen über Ressourcenbeschränkungen,
Login-Klassen und -Fähigkeiten finden Sie in &man.cap.mkdb.1;,
&man.getrlimit.2; und &man.login.conf.5;.Einschränkung von Ressourcen aktivieren und
konfigurierenDie Variable kern.racct.enable muss
auf einen Wert ungleich Null eingestellt sein. Angepasste
Kernel benötigen eine spezielle Konfiguration: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;.Gemeinsame Administration mit SudoTomRhodesBeigetragen von BjörnHeidottingÜbersetzt von SicherheitSudoSystemadministratoren benötigen häufig die Möglichkeit,
Benutzern erweiterte Berechtigungen zu gewähren, damit
diese privilegierte Aufgaben ausführen können. Die Idee, dass
Teammitglieder einen Zugang zu einem &os;-System zur Verfügung
gestellt bekommen, um ihre spezifischen Aufgaben erledigen zu
können, stellt den Administrator vor eine große
Herausforderung. Diese Teammitglieder benötigen in der Regel
nur einen eingeschränkten Zugang. Für manche Aufgaben werden
jedoch die Rechte des Superusers benötigt. Zum Glück gibt es
keinen Grund, diesen Mitgliedern einen solchen Zugang zu geben,
da es Werkzeuge für genau diesen Anwendungsfall gibt.Bislang wurde in diesem Kapitel immer versucht, den Zugriff
für autorisierte Benutzer zu gewähren und den Zugriff für
nicht autorisierte Benutzer zu verhindern. Ein weiteres Problem
entsteht, sobald autorisierte Benutzer Zugriff auf die
Ressourcen des Systems haben. In vielen Fällen benötigen einige
Benutzer Zugriff auf Startskripte von Anwendungen. In anderen
Fällen muss eine Gruppe von Administratoren das System
verwalten. Traditionell wird der Zugriff über Benutzer,
Gruppen, Dateiberechtigungen und manchmal sogar &man.su.1;
verwaltet. Und da immer mehr Anwendungen einen Zugriff brauchen
und immer mehr Benutzer Zugriff auf die Systemressourcen
benötigen, ist ein besserer Lösungsansatz erforderlich. Die am
häufigsten verwendete Anwendung in solchen Fällen ist derzeit
Sudo.Sudo erlaubt dem Administrator
eine rigide Konfiguration des Zugriffs auf bestimmte Kommandos
und stellt einige erweiterte Protokollfunktionen zur Verfügung.
Dieses Werkzeug kann als Port oder Paket
security/sudo installiert werden. Das Paket
wird wie folgt installiert:&prompt.root; pkg install sudoNach der Installation können Sie visudo
benutzen, um die Konfiguration in einem Texteditor zu öffnen.
Es wird ausdrücklich visudo empfohlen, da
dieses Programm die Syntax auf Fehler überprüft, bevor die
Konfigurationsdatei gespeichert wird.Die Konfigurationsdatei besteht aus mehreren kleinen
Abschnitten, die eine umfangreiche Konfiguration ermöglichen.
Im folgenden Beispiel soll der Webentwickler (user1) den Dienst
webservice starten und stoppen
dürfen. Um ihm dieses Recht zu gewähren, fügen Sie folgende
Zeile an das Ende von
/usr/local/etc/sudoers ein:user1 ALL=(ALL) /usr/sbin/service webservice *Der Benutzer kann jetzt
webservice über dieses Kommando
starten:&prompt.user; sudo /usr/sbin/service webservice startDiese Konfiguration gestattet den Zugriff auf den
webservice für einen einzelnen
Benutzer. Jedoch ist in den meisten Organisationen ein ganzes
Team für die Verwaltung eines solchen Dienstes verantwortlich.
Mit einer weiteren Zeile ist es möglich, einer ganzen Gruppe
diesen Zugriff zu geben. Die folgenden Schritte erstellen eine
Gruppe mit den entsprechenden Benutzern. Der Gruppe wird es
dann ermöglicht, diesen Dienst zu verwalten:&prompt.root; pw groupadd -g 6001 -n webteamNun werden die Benutzer mit Hilfe von &man.pw.8; in die
Gruppe webteam hinzugefügt:&prompt.root; pw groupmod -m user1 -n webteamZuletzt wird folgende Zeile in
/usr/local/etc/sudoers hinzugefügt, damit
jedes Mitglied von webteam den Dienst
webservice verwalten kann:%webteam ALL=(ALL) /usr/sbin/service webservice *Im Gegensatz zu &man.su.1;, benötigt
Sudo nur das Passwort des
Benutzers.Benutzer, die mit Hilfe von Sudo
Programme ausführen, müssen lediglich ihr eigenes Passwort
eingeben. Dies ist sicherer und bietet eine bessere Kontrolle
als &man.su.1;, wo der Benutzer das root-Passwort eingibt und damit
alle Rechte von root
erlangt.Viele Organisationen haben bereits auf eine
Zwei-Faktor-Authentifizierung umgestellt. In diesen Fällen
hat der Benutzer möglicherweise gar kein Passwort, welches er
eingeben könnte. Sudo bietet für
solche Fälle die Variable NOPASSWD. Wenn
die Variable in die obige Konfiguration hinzugefügt wird,
dürfen die Mitglieder der Gruppe
webteam den Dienst verwalten, ohne
ein Passwort eingeben zu müssen:%webteam ALL=(ALL) NOPASSWD: /usr/sbin/service webservice *ProtokollierungEin Vorteil von Sudo ist, dass
Sitzungen protokolliert werden können. Mit den integrierten
Protokollmechanismen und dem Befehl
sudoreplay können alle über
Sudo ausgelösten Befehle
protokolliert und zu einem späteren Zeitpunkt überprüft
werden. Um diese Funktion zu aktivieren, fügen Sie einen
Eintrag für das Verzeichnis der Protokolle hinzu. Dieses
Beispiel verwendet eine Benutzervariable. Weitere
Informationen finden Sie in der Manualpage von
sudoreplay.Defaults iolog_dir=/var/log/sudo-io/%{user}Dieses Verzeichnis wird automatisch nach der
Konfiguration erstellt. Um auf der sicheren Seite zu sein,
ist es am besten, das System die Verzeichnisse mit
Standardberechtigungen erstellen zu lassen. Dieser
Eintrag wird auch ein Protokoll für Administratoren
erstellen, wenn diese den Befehl
sudoreplay benutzen. Um dieses
Verhalten zu ändern, kommentieren Sie die entsprechenden
Zeilen in sudoers aus.Nachdem dieser Eintrag in die Datei
sudoers hinzugefügt wurde, kann die
Konfiguration der Benutzer für die Protokollierung
aktualisiert werden. In dem gezeigten Beispiel würde der
aktualisierte Eintrag für das
webteam zusätzlich folgende
Änderung benötigen:%webteam ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: /usr/sbin/service webservice *Von nun an wird jede Änderung am
webservice protokolliert, wenn sie
von einem Mitglied der Gruppe
webteam initiiert wurde. Eine
Liste der Sitzungen kann wie folgt angezeigt werden:&prompt.root; sudoreplay -lWenn Sie eine bestimmte Sitzung wiedergeben möchten,
suchen Sie in der Ausgabe nach dem Eintrag
TSID= und übergeben Sie den Wert ohne
weitere Optionen an sudoreplay.
Zum Beispiel:&prompt.root; sudoreplay user1/00/00/02Obwohl die Sitzungen protokolliert werden, kann ein
böswilliger Administrator wahllos die Sitzungsprotokolle
löschen. Daher ist es eine gute Idee, eine tägliche
Kontrolle mit einem Intrusion Detection
System (IDS) oder
einer ähnlichen Software durchzuführen, so dass andere
Administratoren auf manuelle Änderungen aufmerksam gemacht
werden.sudoreplay ist extrem
erweiterbar. Lesen Sie die Dokumentation für weitere
Informationen.