<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Sockets</id>
	<title>Systemd Baustein Sockets - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Baustein_Sockets"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Sockets&amp;action=history"/>
	<updated>2026-10-21T13:45:53Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Baustein_Sockets&amp;diff=73778&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: Baustein Socket-Aktivierung</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Baustein_Sockets&amp;diff=73778&amp;oldid=prev"/>
		<updated>2026-10-17T15:47:32Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: Baustein Socket-Aktivierung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! ab Stufe !! Lernpfad&lt;br /&gt;
|-&lt;br /&gt;
| '''Socket-Aktivierung''' || [[Systemd Stufe 2 Fortgeschritten|Stufe 2]] || [[Systemd Lernpfad|Übersicht]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*Bei der '''Socket-Aktivierung''' lauscht nicht der Dienst selbst auf dem Port, sondern systemd.&lt;br /&gt;
*Erst wenn die erste Verbindung kommt, startet systemd den Dienst und reicht ihm die Verbindung weiter.&lt;br /&gt;
*So laufen selten gebrauchte Dienste nur, wenn sie wirklich gebraucht werden. Früher hat das '''inetd''' erledigt.&lt;br /&gt;
*Zu einer '''.socket'''-Unit gehört eine '''.service'''-Unit mit gleichem Namen.&lt;br /&gt;
&lt;br /&gt;
=Anzeigen=&lt;br /&gt;
*systemctl list-sockets&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
LISTEN                              UNIT                            ACTIVATES&lt;br /&gt;
0.0.0.0:111                         rpcbind.socket                  rpcbind.service&lt;br /&gt;
/run/cups/cups.sock                 cups.socket                     cups.service&lt;br /&gt;
/run/dbus/system_bus_socket         dbus.socket                     dbus.service&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Beispiel cups: Der Druckdienst startet erst, wenn jemand druckt.&lt;br /&gt;
&lt;br /&gt;
=Beispiel: Echo-Server=&lt;br /&gt;
*Jede Verbindung bekommt eine eigene Instanz des Dienstes. Der Dienst ist nur '''cat''': Was ankommt, geht zurück.&lt;br /&gt;
*/etc/systemd/system/echo.socket&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Echo-Server auf Port 5555&lt;br /&gt;
&lt;br /&gt;
[Socket]&lt;br /&gt;
ListenStream=5555&lt;br /&gt;
Accept=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=sockets.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*/etc/systemd/system/echo@.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Echo-Verbindung&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=/usr/bin/cat&lt;br /&gt;
StandardInput=socket&lt;br /&gt;
DynamicUser=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*systemctl daemon-reload&lt;br /&gt;
*systemctl enable --now echo.socket&lt;br /&gt;
*Testen:&lt;br /&gt;
*nc localhost 5555&lt;br /&gt;
*Jede Zeile kommt zurück. Während die Verbindung besteht:&lt;br /&gt;
*systemctl list-units 'echo@*'&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  UNIT                                      LOAD   ACTIVE SUB     DESCRIPTION&lt;br /&gt;
  echo@0-127.0.0.1:5555-127.0.0.1:41234.service loaded active running Echo-Verbindung&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Option !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| ListenStream=5555 || TCP-Port. Auch eine Adresse geht: 127.0.0.1:5555, oder ein Pfad für einen Unix-Socket&lt;br /&gt;
|-&lt;br /&gt;
| ListenDatagram=5555 || UDP&lt;br /&gt;
|-&lt;br /&gt;
| Accept=yes || pro Verbindung eine Instanz von echo@.service. Für einfache Programme wie cat&lt;br /&gt;
|-&lt;br /&gt;
| Accept=no || ein Dienst für alle Verbindungen, er bekommt den lauschenden Socket. Standard&lt;br /&gt;
|-&lt;br /&gt;
| StandardInput=socket || die Verbindung ist Ein- und Ausgabe des Programms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Accept=no: ein Dienst für alles=&lt;br /&gt;
*So arbeiten die meisten echten Dienste: dbus, cups, cockpit.&lt;br /&gt;
*Das Programm muss das unterstützen, es bekommt den Socket von systemd übergeben (sd_listen_fds).&lt;br /&gt;
*Startet der Dienst einmal, läuft er weiter, bis er sich selbst beendet oder gestoppt wird.&lt;br /&gt;
&lt;br /&gt;
=Sicherheit=&lt;br /&gt;
*Ein aktivierter Socket ist ein offener Port, auch wenn der Dienst gerade nicht läuft. '''ss -lntp''' zeigt ihn als systemd.&lt;br /&gt;
*systemctl list-sockets gehört deshalb zu jeder Prüfung: Welche Ports öffnet systemd selbst?&lt;br /&gt;
*Die Härtungsoptionen aus [[Systemd Stufe 3 Security|Stufe 3]] gehören in die .service, '''IPAddressAllow=''' und '''IPAddressDeny=''' gehen auch in die .socket.&lt;br /&gt;
&lt;br /&gt;
=Stolperfallen=&lt;br /&gt;
*'''Den Socket aktivieren''', nicht den Service. Sonst lauscht der Dienst wieder selbst, oder es gibt Streit um den Port.&lt;br /&gt;
*'''Port belegt:''' Läuft der Dienst schon selbst auf dem Port, kann der Socket nicht starten. Erst den Service stoppen und deaktivieren.&lt;br /&gt;
*'''Accept=yes''' braucht eine '''Vorlage''' mit @ im Namen: echo@.service.&lt;br /&gt;
*'''Stoppen:''' Ein gestoppter Service wird bei der nächsten Verbindung wieder gestartet. Ganz aus nur mit '''systemctl stop echo.socket'''.&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Lassen Sie sich alle Sockets anzeigen. Welche Dienste starten auf Ihrem System erst bei Bedarf?&lt;br /&gt;
#Bauen Sie den Echo-Server und testen Sie ihn mit nc.&lt;br /&gt;
#Öffnen Sie zwei Verbindungen gleichzeitig. Wie viele Instanzen laufen?&lt;br /&gt;
#Prüfen Sie mit ss -lntp, wer auf Port 5555 lauscht.&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Lassen Sie den Echo-Server nur auf 127.0.0.1 lauschen.&lt;br /&gt;
#Erlauben Sie mit IPAddressAllow= in der .socket nur das eigene Netz.&lt;br /&gt;
#Finden Sie heraus, wie ssh.socket unter Debian funktioniert und wann man es statt ssh.service nimmt.&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>