Nächste: , Vorige: , Nach oben: Dienste   [Inhalt][Index]


12.9.5 Netzwerkdienste

Das im vorherigen Abschnitt besprochene Modul (gnu services networking) stellt auch Dienste für fortgeschrittene Netzwerkeinrichtungen zur Verfügung, etwa um einen DHCP-Dienst für andere anzubieten, Pakete mit iptables oder nftables zu filtern, einen WLAN-Zugangspunkt mit hostapd verfügbar zu machen, den „Superdaemon“ inetd auszuführen und noch mehr. In diesem Abschnitt werden sie beschrieben.

Scheme-Prozedur: dhcpd-service-type

Dieser Diensttyp definiert einen Dienst, der einen DHCP-Daemon ausführt. Um einen Dienst zu diesem Typ anzugeben, müssen Sie eine <dhcpd-configuration> bereitstellen. Zum Beispiel so:

(service dhcpd-service-type
         (dhcpd-configuration
          (config-file (local-file "my-dhcpd.conf"))
          (interfaces '("enp0s25"))))
Datentyp: dhcpd-configuration
package (Vorgabe: isc-dhcp)

Das Paket, das den DHCP-Daemon zur Verfügung stellt. Von diesem Paket wird erwartet, dass es den Daemon unter dem Pfad sbin/dhcpd relativ zum Verzeichnis der Paketausgabe bereitstellt. Das vorgegebene Paket ist der DHCP-Server vom ISC.

config-file (Vorgabe: #f)

Die Konfigurationsdatei, die benutzt werden soll. Sie muss angegeben werden und wird an dhcpd mittels seiner Befehlszeilenoption -cf übergeben. Ein beliebiges „dateiartiges“ Objekt kann dafür angegeben werden (siehe dateiartige Objekte). Siehe man dhcpd.conf für Details, welcher Syntax die Konfigurationsdatei genügen muss.

version (Vorgabe: "4")

Die DHCP-Version, die benutzt werden soll. Der ISC-DHCP-Server unterstützt die Werte „4“, „6“ und „4o6“. Das Feld entspricht den Befehlszeilenoptionen -4, -6 und -4o6 von dhcpd. Siehe man dhcpd für Details.

run-directory (Vorgabe: "/run/dhcpd")

Das zu benutzende Laufzeit-Verzeichnis („run“-Verzeichnis). Wenn der Dienst aktiviert wird, wird dieses Verzeichnis erzeugt, wenn es noch nicht existiert.

pid-file (Vorgabe: "/run/dhcpd/dhcpd.pid")

Die zu benutzende PID-Datei. Dieses Feld entspricht der Befehlszeilenoption -pf von dhcpd. Siehe man dhcpd für Details.

interfaces (Vorgabe: '())

Die Namen der Netzwerkschnittstelle, auf der dhcpd auf Broadcast-Nachrichten lauscht. Wenn diese Liste nicht leer ist, werden ihre Elemente (diese müssen Zeichenketten sein) an den dhcpd-Aufruf beim Starten des Daemons angehängt. Es ist unter Umständen nicht nötig, hier Schnittstellen ausdrücklich anzugeben; siehe man dhcpd für Details.

Scheme-Variable: hostapd-service-type

Dies ist der Diensttyp für den hostapd-Daemon, mit dem ein WLAN-Zugangspunkt (ein „Access Point“ gemäß IEEE 802.11) und Authentifizierungsserver eingerichtet werden kann. Sein zugewiesener Wert muss eine hostapd-configuration sein wie im folgenden Beispiel:

;; Mit wlan1 den Zugangspunkt für "Mein Netzwerk" betreiben.
(service hostapd-service-type
         (hostapd-configuration
          (interface "wlan1")
          (ssid "Mein Netzwerk")
          (channel 12)))
Datentyp: hostapd-configuration

Dieser Datentyp repräsentiert die Konfiguration des hostapd-Dienstes. Er hat folgende Felder:

package (Vorgabe: hostapd)

Das zu benutzende hostapd-Paket.

interface (Vorgabe: "wlan0")

Die Netzwerkschnittstelle, auf der der WLAN-Zugangspunkt betrieben wird.

ssid

Die SSID (Service Set Identifier), eine das Netzwerk identifizierende Zeichenkette.

broadcast-ssid? (Vorgabe: #t)

Ob diese SSID allgemein sichtbar sein soll.

channel (Vorlage: 1)

Der zu verwendende WLAN-Kanal.

driver (Vorgabe: "nl80211")

Über welchen Schnittstellentyp der Treiber angesprochen wird. "nl80211" wird von allen Linux-mac80211-Treibern benutzt. Schreiben Sie "none", wenn hostapd für einen eigenständigen RADIUS-Server erstellt wird, der keine Draht- oder Drahtlosverbindung steuert.

extra-settings (Vorgabe: "")

Weitere Einstellungen, die wie sie sind an die Konfigurationsdatei von hostapd angehängt werden. Siehe https://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf für eine Referenz der Konfigurationsdatei.

Scheme-Variable: simulated-wifi-service-type

Dies ist der Diensttyp für einen Dienst, um ein WLAN-Netzwerk zu simulieren. Das kann auf virtuellen Maschinen zu Testzwecken eingesetzt werden. Der Dienst lädt das mac80211_hwsim-Modul in den Linux-Kernel und startet hostapd, um ein Pseudo-WLAN-Netzwerk vorzutäuschen, das nach Vorgabe als wlan0 sichtbar ist.

Der Wert des Dienstes ist ein hostapd-configuration-Verbundsobjekt.

Scheme-Variable: iptables-service-type

Mit diesem Diensttyp wird eine iptables-Konfiguration eingerichtet. iptables ist ein Rahmen für Netzwerkpaketfilter, der vom Linux-Kernel unterstützt wird. Der Dienst unterstützt die Konfiguration von iptables für sowohl IPv4 als auch IPv6. Eine einfache Beispielkonfiguration, die alle eingehenden Verbindungen verweigert, die nicht an den SSH-Port 22 gehen, können Sie hier sehen:

(service iptables-service-type
         (iptables-configuration
          (ipv4-rules (plain-file "iptables.rules" "*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
COMMIT
"))
          (ipv6-rules (plain-file "ip6tables.rules" "*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-port-unreachable
COMMIT
"))))
Datentyp: iptables-configuration

Repräsentiert die iptables-Konfiguration.

iptables (Vorgabe: iptables)

Das zu benutzende iptables-Paket, das iptables-restore und ip6tables-restore zur Verfügung stellt.

ipv4-rules (Vorgabe: %iptables-accept-all-rules)

Die zu benutzenden iptables-Regeln. Diese werden an iptables-restore übergeben. Als Regeln kann jedes „dateiartige“ Objekt angegeben werden (siehe dateiartige Objekte).

ipv6-rules (Vorgabe: %iptables-accept-all-rules)

Die zu benutzenden ip6tables-Regeln. Diese werden an ip6tables-restore übergeben. Als Regeln kann jedes „dateiartige“ Objekt angegeben werden (siehe dateiartige Objekte).

Scheme-Variable: nftables-service-type

Dieser Dienst richtet eine Konfiguration von nftables ein. nftables ist als Projekt ein Teil von Netfilter mit dem Ziel, den bestehenden Aufbau aus iptables, ip6tables, arptables und ebtables zu ersetzen. Es stellt einen neuen Rahmen für Netzwerkpaketfilter bereit sowie ein neues Werkzeug nft auf Anwendungsebene und eine Kompatibilitätsschicht für iptables. Dieser Dienst wird zusammen mit %default-nftables-ruleset ausgeliefert, einem vorgegebenen Satz von Regeln, der alle eingehenden Verbindungen außer auf dem SSH-Port 22 ablehnt. Um ihn zu benutzen, schreiben Sie einfach:

Datentyp: nftables-configuration

Datentyp, der die nftables-Konfiguration repräsentiert.

package (Vorgabe: nftables)

Das nftables-Paket, das nft zur Verfügung stellt.

ruleset (Vorgabe: %default-nftables-ruleset)

Die zu benutzenden nftables-Regeln. Als Regeln kann jedes „dateiartige“ Objekt angegeben werden (siehe dateiartige Objekte).

Scheme-Variable: ntp-service-type

Dies ist der Typ des Dienstes, der den ntpd-Daemon für das Network Time Protocol, kurz NTP, ausführt. Mit diesem Daemon wird die Systemuhr mit der Uhr auf den angegebenen NTP-Servern synchronisiert.

Der Wert dieses Dienstes ist ein ntpd-configuration-Objekt, wie im Folgenden beschrieben.

Datentyp: ntp-configuration

Der Datentyp für die Dienstkonfiguration des NTP-Dienstes.

servers (Vorgabe: %ntp-servers)

Dies ist die Liste der Server (<ntp-server>-Verbundsobjekte), mit denen ntpd synchronisiert wird. Siehe die Definition des ntp-server-Datentyps weiter unten.

allow-large-adjustment? (Vorgabe: #t)

Hiermit wird festgelegt, ob ntpd die Uhr beim ersten Umstellen um mehr als 1.000 Sekunden ändern darf.

ntp (Vorgabe: ntp)

Das NTP-Paket, was benutzt werden soll.

Scheme-Variable: %ntp-servers

Liste der Rechnernamen („Host“-Namen), die als vorgegebene NTP-Server benutzt werden. Dabei handelt es sich um die Server des NTP Pool Project.

Datentyp: ntp-server

Der Datentyp, der die Konfiguration eines NTP-Servers repräsentiert.

type (Vorgabe: 'server)

Die Art des NTP-Servers als Symbol, entweder 'pool, 'server, 'peer, 'broadcast oder 'manycastclient.

address

Die Adresse des Servers als Zeichenkette.

options

NTPD-Optionen, die für diesen bestimmten Server gelten sollen, angegeben als Liste von Optionsnamen und/oder Tupeln aus je Optionsname und -wert. Im folgenden Beispiel wird ein Server definiert, der die Optionen iburst und prefer sowie version 3 und eine maxpoll-Zeit von 16 Sekunden benutzen soll.

(ntp-server
 (type 'server)
 (address "ein.ntp.server.org")
 (options `(iburst (version 3) (maxpoll 16) prefer))))
Scheme-Prozedur: openntpd-service-type

Hiermit wird ntpd, der Network-Time-Protocol-Daemon (NTP-Daemon), ausgeführt, in seiner OpenNTPD-Implementierung. Der Daemon sorgt dafür, dass die Systemuhr mit den Uhren der eingestellten Server synchron bleibt.

(service
 openntpd-service-type
 (openntpd-configuration
  (listen-on '("127.0.0.1" "::1"))
  (sensor '("udcf0 correction 70000"))
  (constraint-from '("www.gnu.org"))
  (constraints-from '("https://www.google.com/"))))

Scheme-Variable: %openntpd-servers

Diese Variable bezeichnet eine Liste von Serveradressen, die in %ntp-servers definiert sind.

Datentyp: openntpd-configuration
openntpd (Vorgabe: (file-append openntpd "/sbin/ntpd"))

Das openntpd-Programm, das benutzt werden soll.

listen-on (Vorgabe: '("127.0.0.1" "::1"))

Eine Liste von lokalen IP-Adressen oder Rechnernamen („Host“-Namen), auf denen der ntpd-Daemon lauschen soll.

query-from (Vorgabe: '())

Eine Liste von lokalen IP-Adressen, die der ntpd-Daemon für ausgehende Anfragen benutzen soll.

sensor (Vorgabe: '())

Hiermit geben Sie eine Liste von Zeitdifferenz-Sensorgeräten an, die ntpd benutzen soll. ntpd wird auf jeden Sensor lauschen, der auch tatsächlich existiert, und solche, die nicht existieren, ignorieren. Siehe die Dokumentation beim Anbieter für weitere Informationen.

server (Vorgabe: '())

Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen von NTP-Servern an, mit denen synchronisiert werden soll.

servers (Vorgabe: %openntp-servers)

Hiermit geben Sie eine Liste von IP-Adressen oder Rechnernamen von NTP-Pools an, mit denen synchronisiert werden soll.

constraint-from (Vorgabe: '())

ntpd kann so eingestellt werden, dass es das Datum aus der „Date“-Kopfzeile bei mit TLS übermittelten Anfragen an HTTPS-Server, denen vertraut wird, ausliest. Diese Zeitinformation wird nicht für Genauigkeit benutzt, sondern um mit authentifizierten Informationen die Auswirkungen eines Man-in-the-Middle-Angriffs auf unauthentifizierte NTP-Kommunikation einzuschränken. Geben Sie hierzu eine Liste von URLs, IP-Adressen oder Rechnernamen („Host“-Namen) von HTTPS-Servern an, um eine solche Beschränkung („Constraint“) einzurichten.

constraints-from (Vorgabe: '())

Wie bei constraint-from geben Sie auch hier eine Liste von URLs, IP-Adressen oder Rechnernamen von HTTPS-Servern an, um eine Beschränkung einzurichten. Falls der Rechnername zu mehreren IP-Adressen aufgelöst wird, berechnet ntpd den Median von allen als Beschränkung.

Scheme-Variable: inetd-service-type

Dieser Dienst führt den inetd-Daemon aus (siehe inetd invocation in GNU Inetutils). inetd lauscht auf Verbindungen mit Internet-Sockets und startet bei Bedarf das entsprechende Server-Programm, sobald eine Verbindung mit einem dieser Sockets hergestellt wird.

Der Wert dieses Dienstes ist ein inetd-configuration-Objekt. Im folgenden Beispiel wird der inetd-Daemon konfiguriert, um den eingebauten echo-Dienst sowie einen SMTP-Dienst anzubieten, wobei letzterer SMTP-Kommunikation über SSH an einen Server smtp-server über einen vom rechnernamen bezeichneten Zugang („Gateway“) weiterleitet:

(service
 inetd-service-type
 (inetd-configuration
  (entries (list
            (inetd-entry
             (name "echo")
             (socket-type 'stream)
             (protocol "tcp")
             (wait? #f)
             (user "root"))
            (inetd-entry
             (node "127.0.0.1")
             (name "smtp")
             (socket-type 'stream)
             (protocol "tcp")
             (wait? #f)
             (user "root")
             (program (file-append openssh "/bin/ssh"))
             (arguments
              '("ssh" "-qT" "-i" "/pfad/zum/ssh_schlüssel"
                "-W" "smtp-server:25" "benutzer@rechnername")))))))

Siehe unten für mehr Details über inetd-configuration.

Datentyp: inetd-configuration

Datentyp, der die Konfiguration von inetd repräsentiert.

program (Vorgabe: (file-append inetutils "/libexec/inetd"))

Das inetd-Programm, das benutzt werden soll.

entries (Vorgabe: '())

Eine Liste von inetd-Diensteinträgen. Jeder Eintrag sollte von einem inetd-entry-Konstruktor erzeugt werden.

Datentyp: inetd-entry

Datentyp, der einen Eintrag in der inetd-Konfiguration repräsentiert. Jeder Eintrag entspricht einem Socket, auf dem inetd auf Anfragen lauscht.

node (Vorgabe: #f)

Optional sollte hier als Zeichenkette eine kommagetrennte Liste lokaler Adressen angegeben werden, die inetd benutzen soll, wenn er stellvertretend für den angegebenen Dienst lauscht. Siehe Configuration file in GNU Inetutils für eine vollständige Beschreibung aller Optionen.

name

Eine Zeichenkette. Dieser Name muss einem Eintrag in /etc/services entsprechen.

socket-type

Entweder 'stream, 'dgram, 'raw, 'rdm oder 'seqpacket.

protocol

Eine Zeichenkette, die einem Eintrag in /etc/protocols entsprechen muss.

wait? (Vorgabe: #t)

Ob inetd warten soll, bis der Server beendet ist, bevor es wieder auf neue Anfragen an den Dienst lauscht.

user

Eine Zeichenkette mit dem Benutzernamen (und optional dem Gruppennamen) des Benutzers, als der dieser Server ausgeführt werden soll. Der Gruppenname kann als Suffix angegeben werden, getrennt durch einen Doppelpunkt oder Punkt, d.h. "benutzer", "benutzer:gruppe" oder "benutzer.gruppe".

program (Vorgabe: "internal")

Das Serverprogramm, das die Anfragen bedienen soll, oder "internal", wenn inetd einen eingebauten Dienst verwenden soll.

arguments (Vorgabe: '())

Eine Liste von Zeichenketten oder dateiartigen Objekten, die dem Serverprogramm als Argumente übergeben werden, angefangen mit dem nullten Argument, d.h. dem Namen selbigen Serverprogramms. Bei in inetd eingebauten Diensten muss dieser Eintrag auf '() oder '("internal") gesetzt sein.

Siehe Configuration file in GNU Inetutils für eine mehr ins Detail gehende Erörterung jedes Konfigurationsfeldes.

Scheme-Variable: opendht-service-type

Dieser Diensttyp dient dazu, einen OpenDHT-Knoten, dhtnode, zu betreiben. Mit dem Daemon kann ein eigener Proxy-Dienst für die verteilte Hashtabelle (Distributed Hash Table, DHT) angeboten werden, den man in Jami und anderen Anwendungen angeben kann, damit sie sich darüber verbinden.

Wichtig: Wenn Sie den OpenDHT-Proxy-Server nutzen, sollten die für ihn „sichtbaren“ IP-Adressen der Clients auch anderen Netzwerkteilnehmern gegenüber erreichbar sein. In der Praxis ist es am besten, den Proxy-Server auf einem Rechner mit öffentlich zugänglicher IP-Adresse außerhalb Ihres privaten Netzwerks zu betreiben. Wenn Sie den Proxy-Server zum Beispiel im privaten lokalen Netzwerk mit IPv4 zugänglich machen würden und dann mittels Portweiterleitung für die Außenwelt zugänglich machten, funktioniert das vielleicht bei externen Netzwerkteilnehmern, aber für die Geräte im lokalen Netzwerk des Proxys würde anderen OpenDHT-Knoten nur deren private Adresse mitgeteilt, womit sie keine Verbindung aufbauen können.

Der Wert dieses Dienstes ist ein opendht-configuration-Objekt, wie im Folgenden beschrieben.

Datentyp: opendht-configuration

Verfügbare opendht-configuration-Felder sind:

opendht (Vorgabe: opendht) (Typ: dateiartig)

Zu benutzendes opendht-Paket.

peer-discovery? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

Ob sich der Knoten am Multicast-Mechanismus zum Finden lokaler Netzwerkteilnehmer beteiligen soll.

enable-logging? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

Ob Protokollnachrichten über syslog geschrieben werden sollen. Weil es so ausführlich ist, ist es nach Vorgabe deaktiviert.

debug? (Vorgabe: #f) (Typ: Boolescher-Ausdruck)

Ob Protokollnachrichten der Fehlersuch-Ausführlichkeitsstufe aktiviert werden sollen. Diese Option wirkt sich nicht aus, wenn Protokollierung ganz abgeschaltet ist.

bootstrap-host (Vorgabe: "bootstrap.jami.net:4222") (Typ: Vielleicht-Zeichenkette)

Der Rechnername des Knotens, über den eine erste Verbindung ins OpenDHT-Netzwerk aufgebaut wird. Es kann eine bestimmte Portnummer angegeben werden, indem als Suffix :PORT angehängt wird. Vorgegeben ist, den Bootstrap-Knoten von Jami zu benutzen, aber man kann jeden Rechnernamen eines Knotens angeben. Es ist auch möglich, Bootstrapping zu deaktivieren, indem man dies ausdrücklich auf den Wert %unset-value festlegt.

port (Vorgabe: 4222) (Typ: Vielleicht-Zahl)

An welchen UDP-Port sich der OpenDHT-Knoten binden soll. Wird er nicht angegeben, wird ein verfügbarer Port automatisch ausgewählt.

proxy-server-port (Typ: Vielleicht-Zahl)

Einen Proxy-Server auf dem angegebenen Port lauschen lassen.

proxy-server-port-tls (Typ: Vielleicht-Zahl)

Einen Proxy-Server auf dem angegebenen Port auf TLS-Verbindungen lauschen lassen.

Scheme-Variable: tor-service-type

Dies ist der Diensttyp für den Dienst, der den Tor-Daemon für anonyme Netzwerkrouten ausführt. Der Dienst benutzt für seine Konfiguration ein <tor-configuration>-Verbundsobjekt. Vorgegeben ist, dass der Tor-Daemon als „unprivilegierter“ Nutzer tor ausgeführt wird, einem Mitglied der tor-Benutzergruppe ohne besondere Berechtigungen.

Datentyp: tor-configuration
tor (Vorgabe: tor)

Das Paket, das den Tor-Daemon zur Verfügung stellt. Von diesem Paket wird erwartet, dass es den Daemon unter dem Pfad bin/tor relativ zum Ausgabeverzeichnis verfügbar macht. Das vorgegebene Paket ist die Implementierung des Tor-Projekts.

config-file (Vorgabe: (plain-file "empty" ""))

Die Konfigurationsdatei, die benutzt werden soll. Sie wird an eine vorgegebene Konfigurationsdatei angehängt und die sich daraus ergebende Konfigurationsdatei wird dann an tor über dessen Befehlszeilenoption -f übergeben. Hier kann jedes „dateiartige“ Objekt (siehe dateiartige Objekte) angegeben werden. Siehe man tor für Details zur Syntax der Konfigurationsdatei.

hidden-services (Vorgabe: '())

Die Liste der zu benutzenden „versteckten Dienste“ als <hidden-service>-Verbundsobjekte. Für jeden versteckten Dienst, den Sie in dieser Liste eintragen, werden automatisch entsprechende Einstellungen zur vorgefertigten Konfigurationsdatei hinzugefügt. Sie können <hidden-service>-Verbundsobjekte bequem mit der unten beschriebenen Prozedur tor-hidden-service erzeugen lassen.

socks-socket-type (Vorgabe: 'tcp)

Welche Art von Socket Tor für seinen SOCKS-Socket in der Voreinstellung benutzen soll. Dafür muss entweder 'tcp oder 'unix angegeben werden. Für 'tcp wird Tor nach Voreinstellung auf dem TCP-Port 9050 auf der loopback-Schnittstelle (d.h. localhost) lauschen. Für 'unix wird Tor auf dem UNIX-Socket /var/run/tor/socks-sock lauschen, auf den Mitglieder der tor-Benutzergruppe Schreibberechtigung erhalten.

Wenn Sie detailliertere Anpassungen am SOCKS-Socket vornehmen wollen, belassen Sie socks-socket-type bei seinem vorgegebenen Wert 'tcp und benutzen Sie config-file, um diese Voreinstellung mit Ihrer eigenen SocksPort-Option zu überspielen.

control-socket? (Vorgabe: #f)

Ob ein „Steuerungs-Socket“ bereitgestellt werden soll, über den Tor angesteuert werden kann, um zum Beispiel Onion-Dienste zur Laufzeit zu instanziieren. Wird hier #t angegeben, nimmt Tor Steuerungsbefehle auf dem Unix-Socket /var/run/tor/control-sock entgegen, auf den Mitglieder der tor-Benutzergruppe Schreibzugriff bekommen.

Scheme-Prozedur: tor-hidden-service Name Zuordnung

Hiermit wird ein neuer versteckter Dienst von Tor mit diesem Namen definiert, der die Zuordnung herstellt. Die Zuordnung ist eine Liste von Port-/Rechner-Tupeln wie hier:

 '((22 "127.0.0.1:22")
   (80 "127.0.0.1:8080"))

In diesem Beispiel wird Port 22 des versteckten Dienstes an den ihm zugeordneten lokalen Port 22 weitergeleitet und Port 80 wird an den lokalen Port 8080 weitergeleitet.

Dadurch wird ein Verzeichnis /var/lib/tor/hidden-services/Name erstellt, worin sich in der Datei hostname der .onion-Rechnername („Host“-Name) des versteckten Dienstes befindet.

Siehe die Dokumentation des Tor-Projekts für weitere Informationen.

Das Modul (gnu services rsync) bietet die folgenden Dienste an:

Sie könnten einen rsync-Daemon einsetzen wollen, um Dateien verfügbar zu machen, damit jeder (oder nur Sie) bestehende Dateien herunterladen oder neue Dateien hochladen kann.

Scheme-Variable: rsync-service-type

Dies ist der Diensttyp für den rsync-Daemon, er benutzt ein rsync-configuration-Verbundsobjekt wie in diesem Beispiel:

;; Zwei Verzeichnisse über rsync exportieren.  Wie vorgegeben
;; lauscht rsync auf allen Netzwerkschnittstellen.
(service rsync-service-type
         (rsync-configuration
           (modules (list (rsync-module
                            (name "musik")
                            (file-name "/srv/zik")
                            (read-only? #f))
                          (rsync-module
                            (name "filme")
                            (file-name "/home/charlie/filme"))))))

Siehe unten für Details zur rsync-configuration.

Datentyp: rsync-configuration

Datentyp, der die Konfiguration für den rsync-service repräsentiert.

package (Vorgabe: rsync)

Zu benutzendes rsync-Paket.

address (Vorgabe: #f)

Auf welcher IP-Adresse rsync auf eingehende Verbindungen lauscht. Wird nichts angegeben, wird auf allen verfügbaren Adressen gelauscht.

port-number (Vorgabe: 873)

Der TCP-Port, auf dem rsync auf eingehende Verbindungen lauscht. Wenn die Portnummer kleiner als 1024 ist, muss rsync als Administratornutzer root und auch mit dieser Benutzergruppe gestartet werden.

pid-file (Vorgabe: "/var/run/rsyncd/rsyncd.pid")

Der Name der Datei, in die rsync seine PID schreibt.

lock-file (Vorgabe: "/var/run/rsyncd/rsyncd.lock")

Der Name der Datei, die rsync als seine Sperrdatei verwendet.

log-file (Vorgabe: "/var/log/rsyncd.log")

Der Name der Datei, in die rsync seine Protokolle schreibt.

user (Vorgabe: "root")

Das Benutzerkonto, dem der rsync-Prozess gehören soll.

group (Vorgabe: "root")

Die Benutzergruppe des rsync-Prozesses.

uid (Vorgabe: "rsyncd")

Der Benutzername oder der Benutzeridentifikator (d.h. die „User-ID“), mit dem Dateiübertragungen zum und vom Modul stattfinden sollen, wenn der Daemon als Administratornutzer root läuft.

gid (Vorgabe: "rsyncd")

Benutzergruppenname oder Gruppenidentifikator („Group-ID“), mit dem auf das Modul zugegriffen wird.

modules (Vorgabe: %default-modules)

Liste von „Modulen“ – d.h. Verzeichnissen, die mit rsync exportiert werden. Jedes Element muss ein rsync-module-Verbund sein, wie nun beschrieben wird.

Datentyp: rsync-module

Dies ist der Datentyp für rsync-„Module“. Ein Modul ist ein Verzeichnis, das über das rsync-Protokoll exportiert wird. Die verfügbaren Felder sind wie folgt:

name

Der Modulname. Dieser ist der Name, der in URLs benutzt wird. Zum Beispiel, wenn das Modul musik heißt, wird die entsprechende URL rsync://host.example.org/musik sein.

file-name

Der Name des Verzeichnisses, das exportiert wird.

comment (Vorgabe: "")

Kommentar, der mit dem Modul verbunden ist. Clientbenutzerschnittstellen dürfen das anzeigen, wenn sie die Liste der verfügbaren Module bekommen.

read-only? (Vorgabe: #t)

Ob der Client Dateien hochladen können soll. Wenn dies falsch ist, wird das Hochladen autorisiert werden, wenn die Berechtigungen dort, wo der Daemon läuft, es erlauben.

chroot? (Vorgabe: #t)

Wenn es auf wahr steht, wechselt der rsync-Daemon das Wurzelverzeichnis in das Verzeichnis des Moduls, bevor er Dateiübertragungen mit dem Client unternimmt. Das ist besser für die Sicherheit, aber es geht nur, wenn rsync als Administratornutzer root läuft.

timeout (Vorgabe: 300)

Wie viele Sekunden ein Prozess untätig bleiben darf, bis eine Verbindung zum Client getrennt wird.

Das Modul (gnu services syncthing) bietet die folgenden Dienste an:

Sie könnten einen syncthing-Daemon benutzen wollen, wenn Sie Dateien auf zwei oder mehr Rechnern haben und diese in Echtzeit synchronisieren wollen, geschützt vor neugierigen Blicken.

Scheme-Variable: syncthing-service-type

Dies ist der Diensttyp für den syncthing-Daemon, er benutzt ein syncthing-configuration-Verbundsobjekt wie in diesem Beispiel:

Siehe unten für Details zur syncthing-configuration.

Datentyp: syncthing-configuration

Datentyp, der die Konfiguration für den syncthing-service-type repräsentiert.

syncthing (Vorgabe: syncthing)

Zu benutzendes syncthing-Paket.

arguments (Vorgabe: ’())

Liste der Befehlszeilenoptionen, die an das syncthing-Programm übergeben werden.

logflags (Vorgabe: 0)

Die Summe aus den Protokollierungsoptionen, siehe die Dokumentation von Syncthing zu logflags.

user (Vorgabe: #f)

Das Benutzerkonto, mit dem der Syncthing-Dienst ausgeführt wird. Es wird vorausgesetzt, dass der angegebene Benutzer existiert.

group (Vorgabe: "users")

Die Gruppe, mit der der Syncthing-Dienst ausgeführt wird. Es wird vorausgesetzt, dass die angegebene Gruppe existiert.

home (Vorgabe: #f)

Das gemeinsame Verzeichnis für sowohl Konfiguration als auch Daten. In der Vorgabeeinstellung würde das in $HOME gespeicherte Verzeichnis das Konfigurationsverzeichnis des mit user festgelegten Syncthing-Nutzers.

Des Weiteren bietet das Modul (gnu services ssh) die folgenden Dienste an.

Scheme-Prozedur: lsh-service [#:host-key "/etc/lsh/host-key"] [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] [#:allow-empty-passwords? #f] [#:root-login? #f]  [#:syslog-output? #t]

[#:x11-forwarding? #t]  [#:tcp/ip-forwarding? #t] [#:password-authentication? #t]  [#:public-key-authentication? #t] [#:initialize? #t] Das lshd-Programm auf dem lsh-Paket so ausführen, dass es auf dem Port mit Portnummer port-number lauscht. host-key muss eine Datei angeben, die den Rechnerschlüssel enthält, die nur für den Administratornutzer lesbar sein darf.

Wenn daemonic? wahr ist, entkoppelt sich lshd vom Terminal, auf dem er läuft, und schickt seine Protokolle an syslogd, außer syslog-output? ist auf falsch gesetzt. Selbstverständlich hängt der lsh-service dann auch von der Existenz eines syslogd-Dienstes ab. Wenn pid-file? wahr ist, schreibt lshd seine PID in die Datei namens pid-file.

Wenn initialize? wahr ist, wird der Startwert zur Verschlüsselung ebenso wie der Rechnerschlüssel bei der Dienstaktivierung erstellt, falls sie noch nicht existieren. Das kann lange dauern und Anwenderinteraktion kann dabei erforderlich sein.

Wenn initialize? falsch ist, bleibt es dem Nutzer überlassen, den Zufallsgenerator zu initialisieren (siehe lsh-make-seed in LSH Manual) und ein Schlüsselpaar zu erzeugen, dessen privater Schlüssel in der mit host-key angegebenen Datei steht (siehe lshd basics in LSH Manual).

Wenn interfaces leer ist, lauscht lshd an allen Netzwerkschnittstellen auf Verbindungen, andernfalls muss interfaces eine Liste von Rechnernamen („Host“-Namen) oder Adressen bezeichnen.

allow-empty-passwords? gibt an, ob Anmeldungen mit leeren Passwörtern akzeptiert werden sollen, und root-login? gibt an, ob Anmeldungen als Administratornutzer „root“ akzeptiert werden sollen.

Die anderen Felder sollten selbsterklärend sein.

Scheme-Variable: openssh-service-type

Dies ist der Diensttyp für den OpenSSH-Secure-Shell-Daemon, sshd. Sein Wert muss ein openssh-configuration-Verbundsobjekt wie in diesem Beispiel sein:

(service openssh-service-type
         (openssh-configuration
           (x11-forwarding? #t)
           (permit-root-login 'prohibit-password)
           (authorized-keys
             `(("alice" ,(local-file "alice.pub"))
               ("bob" ,(local-file "bob.pub"))))))

Siehe unten für Details zur openssh-configuration.

Dieser Dienst kann mit weiteren autorisierten Schlüsseln erweitert werden, wie in diesem Beispiel:

(service-extension openssh-service-type
                   (const `(("charlie"
                             ,(local-file "charlie.pub")))))
Datentyp: openssh-configuration

Dies ist der Verbundstyp für die Konfiguration von OpenSSHs sshd.

openssh (Vorgabe: openssh)

Das zu benutzende OpenSSH-Paket.

pid-file (Vorgabe: "/var/run/sshd.pid")

Der Name der Datei, in die sshd seine PID schreibt.

port-number (Vorgabe: 22)

Der TCP-Port, auf dem sshd auf eingehende Verbindungen lauscht.

max-connections (Vorgabe: 200)

Harte Grenze, wie viele Client-Verbindungen gleichzeitig möglich sind, durchgesetzt durch den im inetd-Stil startenden Shepherd-Dienst (siehe make-inetd-constructor in The GNU Shepherd Manual).

permit-root-login (Vorgabe: #f)

Dieses Feld bestimmt, ob und wann Anmeldungen als Administratornutzer „root“ erlaubt sind. Wenn es #f ist, sind Anmeldungen als Administrator gesperrt, bei #t sind sie erlaubt. Wird hier das Symbol 'prohibit-password angegeben, dann sind Anmeldungen als Administrator erlaubt, aber nur, wenn keine passwortbasierte Authentifizierung verwendet wird.

allow-empty-passwords? (Vorgabe: #f)

Wenn dies auf wahr gesetzt ist, können sich Nutzer, deren Passwort leer ist, anmelden. Ist es falsch, können sie es nicht.

password-authentication? (Vorgabe: #t)

Wenn dies wahr ist, können sich Benutzer mit ihrem Passwort anmelden. Wenn es falsch ist, müssen sie andere Authentisierungsmethoden benutzen.

public-key-authentication? (Vorgabe: #t)

Wenn dies wahr ist, können Benutzer zur Anmeldung mit ihrem öffentlichen Schlüssel authentifiziert werden. Wenn es falsch ist, müssen sie andere Authentisierungsmethoden benutzen.

Autorisierte öffentliche Schlüssel werden in ~/.ssh/authorized_keys gespeichert. Dies wird nur für Protokollversion 2 benutzt.

x11-forwarding? (Vorgabe: #f)

Wenn dies auf wahr gesetzt ist, ist das Weiterleiten von Verbindungen an grafische X11-Clients erlaubt – mit anderen Worten funktionieren dann die ssh-Befehlszeilenoptionen -X und -Y.

allow-agent-forwarding? (Vorgabe: #t)

Ob Weiterleitung an den SSH-Agenten zugelassen werden soll.

allow-tcp-forwarding? (Vorgabe: #t)

Ob Weiterleitung von TCP-Kommunikation zugelassen werden soll.

gateway-ports? (Vorgabe: #f)

Ob Ports als Zugang für eingehende Verbindungen („Gateway-Ports“) weitergeleitet werden dürfen.

challenge-response-authentication? (Vorgabe: #f)

Gibt an, ob „Challenge-Response“-Authentifizierung zugelassen wird (z.B. über PAM).

use-pam? (Vorgabe: #t)

Aktiviert die Pluggable-Authentication-Module-Schnittstelle. Wenn es auf #t gesetzt ist, wird dadurch PAM-Authentisierung über challenge-response-authentication? und password-authentication? aktiviert, zusätzlich zur Verarbeitung von PAM-Konten und Sitzungsmodulen für alle Authentisierungsarten.

Weil PAM-Challenge-Response-Authentisierung oft für dieselben Zwecke wie Passwortauthentisierung eingesetzt wird, sollten Sie entweder challenge-response-authentication? oder password-authentication? deaktivieren.

print-last-log? (Vorgabe: #t)

Hiermit wird angegeben, ob sshd Datum und Uhrzeit der letzten Anmeldung anzeigen soll, wenn sich ein Benutzer interaktiv anmeldet.

subsystems (Vorgabe: '(("sftp" "internal-sftp")))

Hiermit werden externe Subsysteme konfiguriert (z.B. ein Dateiübertragungsdaemon).

Diese werden als Liste von zweielementigen Listen angegeben, von denen jede den Namen des Subsystems und einen Befehl (mit optionalen Befehlszeilenargumenten) benennt, der bei einer Anfrage an das Subsystem ausgeführt werden soll.

Der Befehl internal-sftp implementiert einen SFTP-Server im selben Prozess. Alternativ kann man den sftp-server-Befehl angeben:

(service openssh-service-type
         (openssh-configuration
          (subsystems
           `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
accepted-environment (Vorgabe: '())

Eine Liste von Zeichenketten, die die Umgebungsvariablen benennen, die exportiert werden dürfen.

Jede Zeichenkette wird zu einer eigenen Zeile in der Konfigurationsdatei. Siehe die Option AcceptEnv in man sshd_config.

Mit diesem Beispiel können SSH-Clients die Umgebungsvariable COLORTERM exportieren. Sie wird von Terminal-Emulatoren gesetzt, die Farben unterstützen. Sie können Sie in der Ressourcendatei Ihrer Shell benutzen, um Farben in der Eingabeaufforderung und in Befehlen zu aktivieren, wenn diese Variable gesetzt ist.

(service openssh-service-type
         (openssh-configuration
           (accepted-environment '("COLORTERM"))))
authorized-keys (Vorgabe: '())

Dies ist die Liste der autorisierten Schlüssel. Jedes Element der Liste ist ein Benutzername gefolgt von einem oder mehr dateiartigen Objekten, die öffentliche SSH-Schlüssel repräsentieren. Zum Beispiel werden mit

(openssh-configuration
  (authorized-keys
    `(("rekado" ,(local-file "rekado.pub"))
      ("chris" ,(local-file "chris.pub"))
      ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))

die angegebenen öffentlichen Schlüssel für die Benutzerkonten rekado, chris und root registriert.

Weitere autorisierte Schlüssel können als service-extension hinzugefügt werden.

Beachten Sie, dass das hier neben ~/.ssh/authorized_keys ohne sich zu stören benutzt werden kann.

generate-host-keys? (Vorgabe: #t)

Ob Schlüsselpaare für den Rechner mit ssh-keygen -A unter /etc/ssh erzeugt werden sollen, wenn es noch keine gibt.

Das Erzeugen von Schlüsselpaaren dauert nur ein paar Sekunden, wenn genug Entropie vorrätig ist, und findet nur einmal statt. Wenn Sie es z.B. auf einer virtuellen Maschine nicht brauchen, etwa weil Sie die Rechnerschlüssel schon von anderswo bekommen und die zusätzliche Zeit beim Systemstart ein Problem ist, schalten Sie es vielleicht lieber aus.

log-level (Vorgabe: 'info)

Dieses Symbol gibt die Stufe der Protokollierung an: quiet (schweigsam), fatal, error, info, verbose (ausführlich), debug (Fehlersuche) etc. Siehe die Handbuchseite für sshd_config für die vollständige Liste der Stufenbezeichnungen.

extra-content (Vorgabe: "")

Dieses Feld kann benutzt werden, um beliebigen Text an die Konfigurationsdatei anzuhängen. Es ist besonders bei ausgeklügelten Konfigurationen nützlich, die anders nicht ausgedrückt werden können. Zum Beispiel würden mit dieser Konfiguration Anmeldungen als Administratornutzer „root“ grundsätzlich untersagt, lediglich für eine bestimmte IP-Adresse wären sie zugelassen:

(openssh-configuration
  (extra-content "\
Match Address 192.168.0.1
  PermitRootLogin yes"))
Scheme-Prozedur: dropbear-service [Konfiguration]

Den Dropbear-SSH-Daemon mit der angegebenen Konfiguration ausführen, einem <dropbear-configuration>-Objekt.

Wenn Sie zum Beispiel einen Dropbear-Dienst angeben möchten, der auf Port 1234 lauscht, dann fügen Sie diesen Aufruf ins services-Feld des Betriebssystems ein:

(dropbear-service (dropbear-configuration
                    (port-number 1234)))
Datentyp: dropbear-configuration

Dieser Datentyp repräsentiert die Konfiguration eines Dropbear-SSH-Daemons.

dropbear (Vorgabe: dropbear)

Das zu benutzende Dropbear-Paket.

port-number (Vorgabe: 22)

Die Portnummer des TCP-Ports, auf dem der Daemon auf eingehende Verbindungen wartet.

syslog-output? (Vorgabe: #t)

Ob eine Ausgabe für Syslog aktiviert sein soll.

pid-file (Vorgabe: "/var/run/dropbear.pid")

Der Dateiname der PID-Datei des Daemons.

root-login? (Vorgabe: #f)

Ob Anmeldungen als Administratornutzer root möglich sein sollen.

allow-empty-passwords? (Vorgabe: #f)

Ob leere Passwörter zugelassen sein sollen.

password-authentication? (Vorgabe: #t)

Ob passwortbasierte Authentisierung zugelassen sein soll.

Scheme-Variable: autossh-service-type

Dies ist der Diensttyp für das AutoSSH-Programm, das eine Kopie von ssh ausführt und diese überwacht. Bei Bedarf wird sie neugestartet, für den Fall, dass sie abstürzt oder keine Kommunikation mehr verarbeitet. AutoSSH kann von Hand aus der Befehlszeile heraus aufgerufen werden, indem man Argumente an die Binärdatei autossh aus dem Paket autossh übergibt, aber es kann auch als ein Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

AutoSSH kann benutzt werden, um an den lokalen Rechner gerichtete Kommunikation an eine entfernte Maschine über einen SSH-Tunnel weiterzuleiten. Dabei gilt die ~/.ssh/config-Datei des AutoSSH ausführenden Benutzers.

Um zum Beispiel einen Dienst anzugeben, der autossh mit dem Benutzerkonto pino ausführt und alle lokalen Verbindungen auf Port 8081 an entfernt:8081 über einen SSH-Tunnel durchzureichen, fügen Sie folgenden Aufruf in das services-Feld des Betriebssystems ein:

(service autossh-service-type
         (autossh-configuration
          (user "pino")
          (ssh-options (list "-T" "-N" "-L" "8081:localhost:8081" "entfernt.net"))))
Datentyp: autossh-configuration

Dieser Datentyp repräsentiert die Konfiguration des AutoSSH-Dienstes.

user (Vorgabe: "autossh")

Das Benutzerkonto, mit dem der AutoSSH-Dienst ausgeführt wird. Es wird vorausgesetzt, dass der angegebene Benutzer existiert.

poll (Vorgabe: 600)

Gibt an, wie oft die Verbindung geprüft wird („Poll Time“), in Sekunden.

first-poll (Vorgabe: #f)

Gibt an, wie viele Sekunden AutoSSH vor der ersten Verbindungsprüfung abwartet. Nach dieser ersten Prüfung werden weitere Prüfungen mit der in poll angegebenen Regelmäßigkeit durchgeführt. Wenn dies auf #f gesetzt ist, erfährt die erste Verbindungsprüfung keine Sonderbehandlung, sondern benutzt die gleichen Zeitabstände, die auch mit poll festgelegt wurden.

gate-time (Vorgabe: 30)

Gibt an, wie viele Sekunden lang eine SSH-Verbindung aktiv sein muss, bis sie als erfolgreich angesehen wird.

log-level (Vorgabe: 1)

Die Protokollierungsstufe. Sie entspricht den bei Syslog verwendeten Stufen, d.h. 0 verschweigt die meisten Ausgaben, während 7 die gesprächigste Stufe ist.

max-start (Vorgabe: #f)

Wie oft SSH (neu) gestartet werden darf, bevor AutoSSH aufgibt und sich beendet. Steht dies auf #f, gibt es keine Begrenzung und AutoSSH kann endlos neu starten.

message (Vorgabe: "")

Welche Nachricht beim Prüfen von Verbindungen an die zurückkommende Echo-Nachricht angehängt werden soll.

port (Vorgabe: "0")

Welche Ports zum Überprüfen der Verbindung benutzt werden. Steht dies auf "0", werden keine Überprüfungen durchgeführt. Steht es auf "n" für eine positive ganze Zahl n, werden die Ports n und n+1 zum Überwachen der Verbindung eingesetzt, wobei auf Port n Daten dafür gesendet werden und Port n+1 deren Echo empfangen soll. Steht es auf "n:m" für positive ganze Zahlen n und m, werden Ports n und m zur Überprüfung eingesetzt, wozu Port n zum Senden der Prüfdaten eingesetzt wird und Port m das Echo empfängt.

ssh-options (Vorgabe: '())

Die Liste der Befehlszeilenargumente, die an ssh weitergegeben werden sollen, wenn es ausgeführt wird. Die Befehlszeilenoptionen -f und -M sind AutoSSH vorbehalten; sie anzugeben, führt zu undefiniertem Verhalten.

Scheme-Variable: webssh-service-type

Dies ist der Diensttyp für das Programm WebSSH, das einen webbasierten SSH-Client ausführt. WebSSH kann von Hand aus der Befehlszeile heraus aufgerufen werden, indem man Argumente an die Binärdatei wssh aus dem Paket webssh übergibt, aber es kann auch als ein Guix-Dienst ausgeführt werden. Letzteres wird hier beschrieben.

Um zum Beispiel einen Dienst anzugeben, der WebSSH an der Loopback-Schnittstelle auf Port 8888 ausführt, wobei die Richtlinie ist, dass Verbindungen abgelehnt werden außer zu einer Liste von erlaubten Rechnern, und eine auf HTTPS-Verbindungen lauschende NGINX als inversen Proxy dafür fungieren zu lassen, fügen Sie folgende Aufrufe in das services-Feld des Betriebssystems ein:

(service webssh-service-type
  (webssh-configuration (address "127.0.0.1")
                        (port 8888)
                        (policy 'reject)
                        (known-hosts '("localhost ecdsa-sha2-nistp256 AAAA…"
                                       "127.0.0.1 ecdsa-sha2-nistp256 AAAA…"))))

(service nginx-service-type
         (nginx-configuration
          (server-blocks
           (list
            (nginx-server-configuration
             (inherit %webssh-configuration-nginx)
             (server-name '("webssh.example.com"))
             (listen '("443 ssl"))
             (ssl-certificate (letsencrypt-certificate "webssh.example.com"))
             (ssl-certificate-key (letsencrypt-key "webssh.example.com"))
             (locations
              (cons (nginx-location-configuration
                     (uri "/.well-known")
                     (body '("root /var/www;")))
                    (nginx-server-configuration-locations %webssh-configuration-nginx))))))))
Datentyp: webssh-configuration

Repräsentiert die Konfiguration für den Dienst webssh-service.

package (Vorgabe: webssh)

Zu benutzendes webssh-Paket.

user-name (Vorgabe: "webssh")

Der Benutzername oder der Benutzeridentifikator (d.h. die „User-ID“), mit dem Dateiübertragungen zum und vom Modul stattfinden sollen.

group-name (Vorgabe: "webssh")

Benutzergruppenname oder Gruppenidentifikator („Group-ID“), mit dem auf das Modul zugegriffen wird.

address (Vorgabe: #f)

Die IP-Adresse, auf der webssh auf eingehende Verbindungen lauscht.

port (Vorgabe: 8888)

Der TCP-Port, auf dem webssh auf eingehende Verbindungen lauscht.

policy (Vorgabe: #f)

Die Verbindungsrichtlinie reject setzt voraus, dass erlaubte Rechner in known-hosts eingetragen werden.

known-hosts (Vorgabe: '())

Eine Liste der Rechner, die für eine SSH-Verbindung aus webssh zugelassen sind.

log-file (Vorgabe: "/var/log/webssh.log")

Der Name der Datei, in die webssh seine Protokolle schreibt.

log-level (Vorgabe: #f)

Das Protokollierungsniveau.

Scheme-Variable: %facebook-host-aliases

Diese Variable enthält eine Zeichenkette, die Sie für /etc/hosts benutzen können (siehe Host Names in Referenzhandbuch der GNU-C-Bibliothek). Jede Zeile enthält einen Eintrag, der einen bekannten Servernamen des Facebook-Online-Dienstes – z.B. www.facebook.com – an den lokalen Rechner umleitet – also an 127.0.0.1 oder dessen IPv6-Gegenstück ::1.

Normalerweise wird diese Variable im Feld hosts-file einer operating-system-Betriebssystemdeklaration benutzt (siehe /etc/hosts):

(use-modules (gnu) (guix))

(operating-system
  (host-name "mymachine")
  ;; …
  (hosts-file
    ;; Eine /etc/hosts-Datei, mit der "localhost" und
    ;; "mymachine" als Alias-Namen eingerichtet werden
    ;; und für die Facebook-Servernamen stattdessen
    ;; Alias-Namen benutzt werden.
    (plain-file "hosts"
                (string-append (local-host-aliases host-name)
                               %facebook-host-aliases))))

Dieser Mechanismus kann verhindern, dass lokal laufende Programme, wie z.B. Web-Browser, auf Facebook zugreifen.

Das Modul (gnu services avahi) stellt die folgende Definition zur Verfügung.

Scheme-Variable: avahi-service-type

Dieser Dienst führt den avahi-daemon aus, einen systemweiten mDNS-/DNS-SD-Anbieter, mit dem im lokalen Netzwerk befindliche Geräte erkannt werden können („Service Discovery“) und Rechnernamen selbstständig aufgelöst werden können („Zero-Configuration“) (siehe https://avahi.org/). Sein Wert muss ein avahi-configuration-Verbundsobjekt sein – siehe unten.

Dieser Dienst erweitert den Name Service Cache Daemon (nscd), damit er .local-Rechnernamen mit nss-mdns auflösen kann. Siehe Name Service Switch für Informationen zur Auflösung von Rechnernamen.

Des Weiteren wird das avahi-Paket zum Systemprofil hinzugefügt, damit Befehle wie avahi-browse einfach benutzt werden können.

Datentyp: avahi-configuration

Dieser Datentyp repräsentiert die Konfiguration von Avahi.

host-name (Vorgabe: #f)

Wenn dies auf etwas anderes als #f gesetzt ist, wird es anderen als Rechnername für diese Maschine mitgeteilt, andernfalls wird der tatsächliche Rechnername anderen mitgeteilt.

publish? (Vorgabe: #t)

Wenn es auf wahr gesetzt ist, dürfen Rechnernamen und Avahi-Dienste über das Netzwerk mitgeteilt werden (als Broadcast).

publish-workstation? (Vorgabe: #t)

Wenn es auf wahr gesetzt ist, teilt avahi-daemon den Rechnernamen dieser Maschine und die IP-Adresse über mDNS auf dem lokalen Netzwerk öffentlich mit. Um die auf Ihrem lokalen Netzwerk mitgeteilten Rechnernamen zu sehen, können Sie das hier ausführen:

avahi-browse _workstation._tcp
wide-area? (Vorgabe: #f)

Wenn dies auf wahr gesetzt ist, ist DNS-SD über „Unicast DNS“ aktiviert.

ipv4? (Vorgabe: #t)
ipv6? (Vorgabe: #t)

Mit diesen Feldern wird festgelegt, ob IPv4-/IPv6-Sockets verwendet werden.

domains-to-browse (Vorgabe: '())

Dies ist eine Liste von Domänen, die durchsucht werden.

Scheme-Variable: openvswitch-service-type

Dies ist der Diensttyp des Open-vSwitch-Dienstes, der als Wert ein openvswitch-configuration-Objekt hat.

Datentyp: openvswitch-configuration

Der Datentyp, der die Konfiguration von Open vSwitch repräsentiert, einem auf mehreren Schichten arbeitenden („multilayer“) virtuellen Switch, der für massenhafte Netzwerkautomatisierung durch programmatische Erweiterungen eingesetzt werden kann.

package (Vorgabe: openvswitch)

Das Paketobjekt vom Open vSwitch.

Scheme-Variable: pagekite-service-type

Dies ist der Diensttyp für den PageKite-Dienst, einem Angebot zur getunnelten Netzwerkumleitung, womit bloß auf localhost lauschende Server öffentlich erreichbar gemacht werden können. Mit PageKite werden die Server für andere erreichbar, selbst wenn Ihre Maschine nur über eine restriktive Firewall oder eine Netzwerkadressübersetzung („Network Address Translation“, NAT) ohne Portweiterleitung mit dem Internet verbunden ist. Der Wert dieses Dienstes ist ein pagekite-configuration-Verbundsobjekt.

Hier ist ein Beispiel, wodurch die lokal laufenden HTTP- und SSH-Daemons zugänglich gemacht werden:

(service pagekite-service-type
         (pagekite-configuration
           (kites '("http:@kitename:localhost:80:@kitesecret"
                    "raw/22:@kitename:localhost:22:@kitesecret"))
           (extra-file "/etc/pagekite.rc")))
Datentyp: pagekite-configuration

Der Datentyp, der die Konfiguration von PageKite repräsentiert.

package (Vorgabe: pagekite)

Paketobjekt von PageKite.

kitename (Vorgabe: #f)

PageKite-Name, um sich gegenüber dem Vordergrundserver zu authentisieren.

kitesecret (Vorgabe: #f)

Das gemeinsame Geheimnis, das eine Authentisierung gegenüber dem Vordergrundserver ermöglicht. Wahrscheinlich sollten Sie es besser als Teil von extra-file angeben.

frontend (Vorgabe: #f)

Eine Verbindung zum angegebenen PageKite-Vordergrundserver herstellen statt zu dem Dienst von pagekite.net.

kites (Vorgabe: '("http:@kitename:localhost:80:@kitesecret"))

Die Liste der zu benutzenden „Kites“ für Dienste. Nach Vorgabe wird der HTTP-Server auf Port 80 nach außen hin zugänglich gemacht. Dienste sind im Format protokoll:kitename:rechnername:port:geheimnis anzugeben.

extra-file (Vorgabe: #f)

Eine Konfigurationsdatei, die zusätzlich eingelesen werden soll. Es wird erwartet, dass Sie diese manuell erstellen. Benutzen Sie sie, wenn Sie zusätzliche Optionen angeben möchten und um gemeinsame Geheimnisse abseits von Guix’ Zuständigkeitsbereich zu verwalten.

Scheme-Variable: yggdrasil-service-type

Der Diensttyp, um eine Verbindung mit dem Yggdrasil-Netzwerk herzustellen, einer frühen Implementierungsstufe eines völlig Ende-zu-Ende-verschlüsselten IPv6-Netzwerks.

Die Wegfindung im Yggdrasil-Netzwerk verläuft unabhängig vom Namen der Netzwerkknoten („Name-independent Routing“) und verwendet kryptografisch erzeugte Adressen. Durch die statische Adressierung können Sie dieselbe Adresse so lange weiterbenutzen, wie Sie möchten, selbst wenn Sie sich an einem anderen Ort befinden als vorher, und Sie können auch, wann immer Sie möchten, eine neue Adresse erzeugen (durch Erzeugung neuer Schlüssel). Siehe https://yggdrasil-network.github.io/2018/07/28/addressing.html

Übergeben Sie einen Wert vom Typ yggdrasil-configuration, um ihn eine Verbindung zu öffentlichen und/oder lokalen Netzwerkteilnehmern („Peers“) herstellen zu lassen.

Hier ist ein Beispiel für die Nutzung mit öffentlichen Peers und einer statischen Adresse. Die statischen Schlüssel zum Signieren und Verschlüsseln werden in /etc/yggdrasil-private.conf definiert (dies ist die Vorgabe für config-file).

;; Teil des operating-system in der Betriebssystemdeklaration
(service yggdrasil-service-type
              (yggdrasil-configuration
               (autoconf? #f) ;nur öffentliche Peers benutzen
               (json-config
               ;; nehmen Sie eine von
               ;; https://github.com/yggdrasil-network/public-peers
                '((peers . #("tcp://1.2.3.4:1337"))))
               ;; /etc/yggdrasil-private.conf ist der Vorgabewert von config-file
               ))
# Beispielinhalt für /etc/yggdrasil-private.conf
{
  # Ihr öffentlicher Schlüssel. Ihre Peers können Sie um
  # den Schlüssel bitten, um ihn in deren Konfiguration der
  # AllowedPublicKeys einzutragen.
  PublicKey: 64277…

  # Ihr privater Signierschlüssel. Geben Sie ihn NICHT weiter!
  PrivateKey: 5c750…
}
Datentyp: yggdrasil-configuration

Repräsentiert die Konfiguration von Yggdrasil.

package (Vorgabe: yggdrasil)

Paketobjekt von Yggdrasil.

json-config (Vorgabe: '())

Der Inhalt von /etc/yggdrasil.conf. Er wird mit /etc/yggdrasil-private.conf zusammengelegt. Beachten Sie, dass diese Einstellungen im Guix-Store gespeichert werden, auf den alle Nutzer Zugriff haben. Speichern Sie dort nicht Ihre privaten Schlüssel. Siehe die Ausgabe von yggdrasil -genconf für eine kurze Übersicht über gültige Schlüssel und ihre Vorgabewerte.

autoconf? (Vorgabe: #f)

Ob der automatische Modus benutzt werden soll. Ihn zu aktivieren, bedeutet, dass Yggdrasil eine dynamische IP-Adresse benutzt und sich mit IPv6-Nachbarn verbindet.

log-level (Vorgabe: 'info)

Wie detailliert die Protokolle sein sollen. Schreiben Sie 'debug für einen höheren Detailgrad.

log-to (Vorgabe: 'stdout)

Wohin Protokolle geschickt werden. Die Vorgabe ist, dass der Dienst ein Protokoll seiner Standardausgabe in /var/log/yggdrasil.log schreibt. Die Alternative ist 'syslog, wodurch die Ausgabe an den laufenden syslog-Dienst geschickt wird.

config-file (Vorgabe: "/etc/yggdrasil-private.conf")

Wo die HJSON-Datei liegt, aus der sensible Daten geladen werden. Hier sollten private Schlüssel gespeichert werden, wodurch nicht nach jedem Neustart eine zufällige Adresse benutzt wird. Verwenden Sie #f zum Deaktivieren. In dieser Datei festgelegte Optionen haben Vorrang vor json-config. Tragen Sie anfangs die Ausgabe von yggdrasil -genconf ein. Um eine statische Adresse zu benutzen, löschen Sie alles außer den folgenden Optionen:

  • EncryptionPublicKey
  • EncryptionPrivateKey
  • SigningPublicKey
  • SigningPrivateKey
Scheme-Variable: ipfs-service-type

Der Diensttyp, um sich mit dem IPFS-Netzwerk zu verbinden, einem weltweiten, versionierten, von einem Netzwerkteilnehmer zum anderen („peer-to-peer“) verteilten Dateisystem. Geben Sie ein ipfs-configuration-Verbundsobjekt an, um die für den Netzwerkzugang (Gateway) und die Anwendungsschnittstelle (API) verwendeten Ports zu ändern.

Hier ist eine Beispielkonfiguration, um nicht standardmäßige Ports einzusetzen:

(service ipfs-service-type
         (ipfs-configuration
          (gateway "/ip4/127.0.0.1/tcp/8880")
          (api "/ip4/127.0.0.1/tcp/8881")))
Datentyp: ipfs-configuration

Repräsentiert die Konfiguration des IPFS.

package (Vorgabe: go-ipfs)

Paketobjekt von IPFS.

gateway (Vorgabe: "/ip4/127.0.0.1/tcp/8082")

Die Adresse des Netzwerkzugangs im Format einer Multiadresse („multiaddress“).

api (Vorgabe: "/ip4/127.0.0.1/tcp/5001")

Die Adresse des API-Endpunkts im Format einer Multiadresse („multiaddress“).

Scheme-Variable: keepalived-service-type

Dies ist der Diensttyp für die Software Keepalived für virtuelle Router, keepalived. Sein Wert muss ein keepalived-configuration-Verbundsobjekt sein, wie in diesem Beispiel für die Maschine erster Wahl (Master):

(service keepalived-service-type
         (keepalived-configuration
           (config-file (local-file "keepalived-master.conf"))))

Dabei enthält keepalived-master.conf:

vrrp_instance meine-gruppe {
  state MASTER
  interface enp9s0
  virtual_router_id 100
  priority 100
  unicast_peer { 10.0.0.2 }
  virtual_ipaddress {
    10.0.0.4/24
  }
}

Für die Ersatzmaschine (Backup):

(service keepalived-service-type
         (keepalived-configuration
          (config-file (local-file "keepalived-backup.conf"))))

Dort enthält keepalived-backup.conf:

vrrp_instance meine-gruppe {
  state BACKUP
  interface enp9s0
  virtual_router_id 100
  priority 99
  unicast_peer { 10.0.0.3 }
  virtual_ipaddress {
    10.0.0.4/24
  }
}

Nächste: Unbeaufsichtigte Aktualisierungen, Vorige: Netzwerkeinrichtung, Nach oben: Dienste   [Inhalt][Index]